声明: 本文为 Xilinx 独家投稿,版权归原作者所有,非经允许,请勿转载。
作者简介: Aaron Behman,Xilinx 视频与视觉战略与市场营销总监。
Adam Taylor,英国工程技术学会会士(IET Fellow)及特许工程师(Chartered Engineer),是颇受欢迎的《基于Xilinx Zynq SoC玩转MicroZed》一书作者。
欢迎一线的开发者们撰文分享你们的进阶、踩过的坑以及对热点技术的看法与实践经验。投稿邮箱:[email protected]。
基于视觉的系统在很多行业和应用领域中已变得非常普遍。实际上,我们中的很多人每天就携着一个嵌入式视觉系统,比如在我们的智能手机中。这些智能设备不仅能够捕获图像和录制视频,而且还能执行增强现实的应用,这些都展示了嵌入式视觉技术是如何被普遍地广为接受。
处理能力、存储器密度和系统集成度的提升,促进了嵌入式视觉在传统和新兴应用领域( 图1所示实例)的增长。这也使得嵌入式视觉在消费类、产业和政府领域被广泛接受,因而将在十年内实现显著增长。表1列出了一些嵌入式视觉的高增长领域,其中有一些显而易见,有些则不是很明显。
表 1 预期的嵌入式视觉高增长领域
应用 | 示例领域 | CAGR | 年 |
---|---|---|---|
机器视觉 | 机器视觉 | 9.1 % | 2020 |
超光谱成像 | 超光谱 | 12% | 2019 |
收费系统 | 监视 | 11.1% | 2020 |
3D 成像 | 高级驾驶员辅助系统、医疗 | 27.5% | 2020 |
面部识别 | 监视 | 17.4% | 2020 |
嵌入式视觉系统包含从所选成像传感器接收光子到系统输出的整个信号链。系统输出是指从图像中提取的经过处理或未经处理的图像或信息,并提供给下游系统。当然,嵌入式系统架构师负责根据系统要求确保端到端性能。
为此,嵌入式视觉系统架构师需要熟悉与传感器和后处理系统有关的各种概念和技术。本文作为高级入门手册,旨在让读者对这些技术和概念有一个基本了解。
首先需要熟悉电磁波谱以及希望系统运行的光谱域。人眼只能看到 390nm(蓝光)至 700nm(红光)波长之间的光谱,也就是通常所指的可见光谱;成像设备凭借所采用的技术,则能捕获到更宽泛波长的图像,包括 X 光、紫外线、红外线以及可见光谱。
在近红外光谱及以下范围,我们可以使用电荷耦合器件(CCD)或 CMOS (互补金属氧化物半导体)图像传感器 (CIS);到了红外光谱范围,需要使用专用的红外检测器。红外光谱范围之所以需要专用传感器,部分原因在于芯片成像器(如 CCD 或 CIS)需要的激发能。这些器件通常需要 1eV 的光子能量来激发一个电子,然而在红外范围,光子能量介于 1.7eV-1.24meV 之间,因此红外成像器应基于 HgCdTe 或 InSb。这些器件需要更低的激发能量,经常与 CMOS 读出 IC(即 ROIC)配合使用,以控制和读出传感器。
最常见的两种检测器技术分别是 CCD 和 CIS
电荷耦合器件被视为模拟器件,因此要集成到数字系统中就需要使用片外 ADC 以及所需模拟电压电平下的时钟生成功能。每个像素存储由光子产生的电荷。大多数情况下将像素排列成 2D 阵列,组成多个行,每行包含多个像素。读出 CCD 时通过行传输将每行并行传递到读出寄存器,再通过读出寄存器将每行串行读出。这个寄存器读出过程中,电荷转换为电压。
CMOS 成像传感器能实现更紧密集成,使 ADC、偏置和驱动电路都集成在同一晶片上。这大大降低了系统集成要求,同时也提高了 CIS 设计的复杂性。CIS 的核心是有源像素传感器 (APS),其中每个像素同时包含光电二极管和读出放大器,因此,与 CCD 不同,CIS 能够读出阵列中的任意像素地址。
尽管大多数嵌入式视觉都采用 CIS 器件,但是 CCD 仍用于非常注重性能的高端科研应用领域。本文的要点内容适用于这两种成像技术。
选择正确的传感器需要了解系统要求,为此,必须从器件的几个方面加以考虑。
第一个要求是我们必须确定所需的分辨率,也就是每行有多少个像素,检测器需要多少行。最终应用对此起决定作用,例如,科研用的天文学应用可能需要高分辨率的 2D 器件,而工业检查成像可能仅需要行扫描方案。
行扫描器件在 X 方向上包含单行(有时是几行)像素。如果通过相机或目标的移动生成 Y 方向上的图像,通常采用这类器件。它们用于检查或光学字符识别 (OCR) 领域。有些领域需要采用时域积分 (TDI) 线扫描传感器。这类传感器在 X 方向包含多行,随着目标移动,像素值也从一个向下一个移动,随着电荷在时间上积分,可实现更灵敏的检测。不过,TDI 需要在行传输与目标移动之间进行同步,以防出现模糊和图像缺陷。由于只有几行需要读出,因此帧率可以非常高。
2D 阵列包含多个行,每行有多个像素,阵列大小是决定传感器最大帧率的一个因素。通常,为了实现更高的帧速率,2D 器件并行读出多个像素。2D 器件还能执行窗口操作(有时称为兴趣区域),即只读出特定的感兴趣区域,以获得更高帧速率。这类器件可用于众多领域,而且信息包含在 2D 图像中,例如高级驾驶员辅助系统 (ADAS)、监控或科研领域。
确定成像器格式以及所需分辨率之后,我们还必须考虑像素间距。像素间距定义像素的大小,决定能收集多少入射光子产生的电荷。因此,较小的像素间距意味着在积分周期内(传感器暴露在图像中的时间)收集较少的电荷。如果像素间距较小,意味着捕捉图像需要更长的积分时间,这会影响传感器捕捉快速移动图像的能力,并降低低光拍照性能。
确定传感器格式后,我们必须考虑使用哪种技术,CCD、CMOS 还是更为专业的技术。这里的重要参数是量子效率 (QE);该参数是器件通过光子产生电子的效率。通常,我们希望在有用光谱上实现尽可能高的 QE,这对于低光应用也具有重要意义。影响器件 QE 的因素有三个:吸收、反射和透射。QE 降低的一个主因是器件结构。器件结构可能导致像素被传感器中的电路屏蔽,例如金属线或多晶硅栅极电路等。这些结构会吸收或反射光子,从而降低 QE,因此要选好传感器。
前照式 — 对于这类器件,光子以上面的介绍的传统方式照射器件的前面,像素可能被遮蔽,QE 相应降低。
背照式 — 这些器件经过后期处理,将器件的后部削薄,以便在后面接收光照,从而不受其他设计元件的阻挡。薄型背照式器件能实现最佳 QE。
我们还必须考虑图像传感器中所允许的噪声;有三个主要方面需要考虑。
器件噪声 — 这在本质上讲是暂时的,包括散射噪声以及输出放大器和复位电路产生的噪声。
固定图形噪声(FPN) — 呈空间分布,由相同光照强度下像素的不同响应引起。FPN 通常由每个像素的不同偏移和增益响应引起;偏移部分通常称为暗信号响应非均匀性 (DSNU),增益部分称为图像响应非均匀性 (PRNU)。有多种方法可以补偿 FPN,最常见的方法是输出信号的相关双采样法。
暗电流 — 这由图像传感器中的热噪声引起,甚至在无光照情况下也会出现。暗信号对最终图像质量的影响取决于帧速率;较高帧速率下影响不大,然而,随着帧速率降低(如科研应用)影响会很明显。由于暗电流与温度有关,因此在需要降低暗电流的情况下,通常做法是利用冷却器件(例如 Peltier)来降低成像器件的工作温度。
理解了成像器的噪声模式后,我们就能确定能实现多大的信噪比 (SNR)。
确定器件的噪声性能后,就可以确定图像传感器所需的动态范围。动态范围代表传感器捕获光照强度范围较大的图像的能力,单位是 dB 或以比率形式给出。这意味着图像同时包含高照度区和暗区。
传感器的实际动态范围由像素的满井容量决定,也就是像素饱和前所能承载的电子数量。将容量除以读出噪声,能方便地将比率转换为以 dB 为单位的值。
通常利用光子转换曲线测试法来确定动态范围,画出噪声与容量的关系曲线。
如果器件具有数字输出,可通过下面的公式利用输出端比特数计算该值。
然而,这并不能确保器件可以实现这样的动态范围;只是说明总线宽度所能代表的潜在范围,而没有考虑传感器性能因素。
IO 标准也很重要,不仅用来输出像素数据,还用来输出命令和控制接口。这与帧速率有关,例如 LVCMOS 接口不适合高帧速率应用,但可用于简单的监控摄像头。随着帧速率、分辨率和每像素比特数的增加,成像器件的趋势正朝着采用 LVDS 系列或 SERDES 技术的专用高速串行链路发展。
现在我们已经介绍了图像传感器的多个重要方面,另一个尚未考虑的因素是成像器是彩色还是单色传感器。无论选择哪种,都取决于应用场合。
彩色传感器 — 需要在每个像素上使用贝尔图形,在一条线上交替变换红色和绿色,下一条线上交替蓝色和绿色(绿色用得多是因为人眼对绿颜色波长更敏感)。这意味着要对接收到的光子进行滤波处理,使每个像素只接收具有所需波长的光子。我们可对图像进行后处理,用不同颜色围绕像素以重构每个像素上的颜色,从而确定像素颜色,而且不会降低图像分辨率。彩色传感器会使重构和输出图像所需的图像处理链变得复杂化。贝尔图形确实会导致分辨率降低,但是没有想象的那么差,通常降幅为 20%。
单色 — 由于图像阵列上没有贝尔图形,因此每个像素能接收所有光子。这样可增大图像灵敏度,使图像的读出更简单,因为不存在颜色重建所需的去马赛克效应。
经选择我们决定使用 CIS 器件,而实际上这些属于复杂的专用片上系统。因此,我们还必须考虑以下关于读出模式和积分时间的问题。
积分时间 — 这是读出之前像素的曝光时间。在比较简单的 CCD 系统上,需要接近电子装置在器件外执行该时序。然而对于 CIS 器件,积分时间可通过命令接口由寄存器来配置,然后 CIS 器件针对常用的两种读出模式精确地执行积分时间。
全局快门模式 — 这种模式下,所有像素同时接受光照,然后读出。此模式下由于所有像素同时读出,因此会增大读出噪声。如果要对快速运动物体拍摄快照,适合使用该模式。
滚动快门模式 — 这种模式下,进行逐行曝光和读出。这种模式的读出噪声较小,然而,在捕获快速运动物体方面不如全局快门模式。
选择了合适的传感器之后,在进行系统开发的过程中还需要考虑和解决诸多挑战。
除了技术挑战以外,开发系统时还会面对时间压力,确保在既定时限内将产品推向市场。我们要根据时间限制,重点弄清楚开发过程中的哪部分活动能实现附加价值,然后做出正确选择,分清哪部分应该自己开发(增值活动),哪部分可以购买商用现成产品 (COTS) 或者分包出去。重点关注增值活动并利用硬件、软件和 FPGA 层面的 IP 模块,是满足上市时间要求的重要促成因素之一。
除了上市时间要求,嵌入式视觉系统开发过程中还要经常考虑尺寸、重量、功耗和成本 (SWAP-C) 要求。究竟哪种要求占主导,取决于具体应用领域,例如手持设备在功耗方面就要比驾驶员辅助系统更为严格。然而,对于高级驾驶员辅助系统来说,由于要生产几百万台,因此方案成本就成了主导因素。
要在尺寸、重量、功耗和成本方面获得很好的效果,应该在传感器和处理系统中实现更为紧密的系统集成,即使用数量更少但功能更强的集成组件。
每种应用领域都具有不同增值点以及不同的尺寸、重量、功耗和成本考量,因此几乎所有嵌入式视觉系统都需要我们实现所谓的图像处理流水线。这种流水线可与所选的传感器建立接口连接,并且执行所需的操作以生成适合进一步加工或直接在网络上传输的图像。基本的图像处理流水线包含:
在图像处理流水线中对接收的图像执行和应用算法。所实现应用不同,算法也会不同;不过,有一些常用的图像处理算法可用来提高对比度,检测图像中的特性、目标或运动,或者校正模糊图像。
应该在一个框架中开发这些算法,以便我们以最短时间将产品推向市场,并鼓励重复使用,降低非重复性和重复性工程成本。有几种现成的框架我们可以考虑使用。
采用 FPGA 或 All Programmable SoC 方案时,将这些框架与 HLS 结合使用,能够高效开发出嵌入式视觉应用,并通过硬件在闭环中快速演示。
图像经过处理流水线后,数据从系统的输出方式也很重要,我们有三种选择。
利用视频图形阵列 (VGA)、高清多媒体接口 (HDMI)、串行数字接口 (SDI) 或 DisplayPort 等标准将图像输出到显示器。很多电动车采用触摸式显示屏对系统进行控制和配置。
将图像或从图像中提取的信息传送到另一个系统,该系统像云处理应用那样使用图像或提取出的信息。
将图像存储在非易失存储介质中,供以后访问。
对于绝大多数方式而言,在完成成像链后,我们都需要确定图像格式化方式,以便使用。此时,我们需要决定是否使用诸如 H.264(MPEG-4 Part 10 高级视频编码)或 H.265(高效率视频编码)等行业标准图像/视频压缩算法对图像进行编码,这些实现方案通常称为编解码器。编解码器能提高通信和网络带宽的使用效率,或降低实现高保真度所需的存储空间,因为编码通常存在较大失真 。如果因使用编解码器导致失真度无法接受,还可以按原始格式发送和存储图像,或者以无损格式进行编码。
大多数编解码器所使用的色彩空间都与图像传感器输出的色彩空间(前提是系统使用彩色器件)不同。嵌入式视觉中常用的色彩空间是:
红、绿、蓝 — 包含 RGB 信息作为图像传感器的输出,常用作 VGA 等简单接口的输出;
YUV — 包含亮度 (Y) 和色度 (U 和 V),该色彩空间用于大多数编解码器和一些显示标准。常用的 YUV 格式为 YUV4:4:4 和 YUV4:2:2。两种格式的区别在于:4:4:4 格式下,每像素由 8 位表示,得到 24 位像素。在 4:2:2 格式下,U 值和 V 值在像素之间共享,得到 16 位像素,可节省存储空间。
另一个对图像处理链和 SWAP-C 具有很大影响的决策是:大部分图像处理链应该在哪实现:
在边缘,即在嵌入式视觉系统之内。这样会提高系统的功耗和处理/存储要求,但能够实现更快的响应。在边缘处理将在大部分嵌入式应用(例如高级驾驶员辅助、机器视觉等)中成为主导。
在云中,这需要嵌入式视觉系统捕获图像,并且利用网络技术将图像发送到云。可在云中处理的典型应用包括医疗成像或科研应用。这类应用中,处理非常密集,且不需要实时结果。
为实现处理链,处于嵌入式视觉系统核心的处理内核不仅要能控制所选的图像传感器,还要能接收和实现图像处理流水线,并通过指定网络基础设施传送图像或发送到选定的显示器。考虑到这些严苛要求,因此经常要选择 FPGA,或者越来越多的情况下需要使用 All Programmable 片上系统,例如 Zynq 器件。
Zynq 器件将两个高性能 ARM A9 处理器与 FPGA 架构相结合。这样使得处理系统 (PS) 可用来通过 GigE、PCIe 或 CAN 等接口与主机系统通信,同时执行系统的一般管理和日常事务。器件的另一半,即可编程逻辑 (PL) 可用来接收和处理图像,充分利用 FPGA 架构的并行处理特性。如果要求通过网络基础设施传送图像,那么可使用 Zynq 中的直接存储器访问 (DMA) 控制器高效地将图像数据从 PL 移动到 PS DDR 存储器。图像到了 PS DDR 存储器内,可利用所选传输介质的 DMA 控制器进一步访问。
当然,一旦图像处在 PS DDR,高性能 A9 处理器也可提供进一步的处理操作。Zynq 架构的特点在于还可将处理后的图像从 PS DDR 移回 PL 中的图像流水线。
很多嵌入式视觉系统还要求能够集成更多传感器数据以更好地感知环境。这包括使用很多同类传感器(同类传感器融合)扩大视场,例如高级驾驶员辅助系统的全景功能;或者整合多个不同类型的传感器(异构传感器融合)提供可见光谱下无法看到的视觉内容,例如在常规图像传感器数据上叠加红外信息。
很多情况下,需要将嵌入式视觉应用的输出与其他传感器数据进行融合,使产生的图像包含多个不同传感器的信息。最简单的传感器融合应用是将不同频谱的图像相结合,例如可见光与红外线融合以实现更好的夜视效果。
传感器融合的另一个更为复杂的用途是将成像系统、全球导航卫星系统 (GNSS)、数字地图信息以及不同波长下运行的其他传感器(例如雷达)进行融合,以确定另一辆汽车的相对位置,从而实现避碰功能。
由于要将不同系统融合在一起,并提取信息,因此传感器融合对处理器的要求会非常高。All Programmable 片上系统解决方案能够与多个传感器建立接口连接,并行处理信息,增大数据吞吐量,因而具有多种显著优势。
嵌入式视觉已变得非常普遍,其市场渗透率和应用范围将在下个十年里只增不减。
在传感器和系统层面,有多个因素必须加以考虑。有多种技术、框架和器件可用来实现嵌入式视觉系统。
了解最新移动开发相关信息和技术,请关注 mobilehub 公众微信号(ID: mobilehub)。