----追光逐电 光赢未来----
机器视觉的一个优势是其速度非常快,远超人类。在企业努力提高生产力的背景下,生产线的运行速度不断提升,这使得人类成为瓶颈,限制了生产效率的提升。合理设计的机器视觉能够恢复潜在的生产力提升。本文涵盖了实现高速机器视觉的主要方面和方法。
本文讨论的主题包括:
高速机器视觉的定义
高速机器视觉的应用领域
如何提高机器视觉过程中各个环节的速度,包括触发、相机曝光、将相机数据传输到处理器、图像处理和输出时序。
本文多次提到“延迟”一词,延迟指的是某个动作所需的时间。在机器视觉模型中,延迟可以指其中一个步骤、多个步骤或整个过程的时间。在高速应用中,重点在于减少每个步骤的预期延迟,从而降低整个过程的延迟,而不涉及管理延迟的变化。需要管理和最小化延迟变化的系统是实时系统,此话题超出了本文的范围。
关于机器视觉的“高速”没有正式、标准化、可量化的定义。
一种观点是,如果机器视觉是被视为高速的生产系统的一部分,则该视觉系统也可以被视为高速。
另一种观点是,如果视觉系统的速度与执行相同功能的其他系统相当或更快,则相较之下它就是高速的。
定义视觉系统高速的一些标准包括:
短曝光时间,以确保移动部件在图像中不出现运动模糊。
能够处理高频率的输入图像,通常以每秒帧数来衡量。
从图像触发到视觉系统输出可用之间的延迟非常短。
一个高速视觉系统通常具备上述一个、两个或三个特征。
基本的机器视觉过程可以被建模为包括五个步骤:触发、图像曝光、图像数据传输到处理器、图像处理以及输出激活。本文其余部分将探讨这五个环节,并描述如何在每个环节中最小化延迟。
高速机器视觉的用途包括:
在生产线上,产品运行速度从每秒一件到数百件,通常太快而无法进行人工干预
机器人引导,以便沿着路径执行焊接或涂胶等操作
大宗食品的分类
电子组件的组装与定位
自动车牌识别
物体或人员的安全监控
高速印刷机的打印质量检查
纺织品的等级评定
农田的遥感监测
识别植物上的害虫、杂草和疾病,以实现拖拉机的自动化
体育分析
触发信号是由视觉系统某个组件接收的外部信号,启动机器视觉过程并开始图像采集。触发信号通常由某种事件引发,理想情况下由高速度传感器生成,以检测部件的存在。有些系统则通过定时器接收触发信号,另一些系统则是自由运行的,图像采集的速度取决于相机曝光、图像数据传输和图像处理的带宽。
某些传感器,如一些光电探测器,会增加一个延迟,称为去抖动,以确保可靠的检测。这种延迟可能影响系统速度,需谨慎考虑。
更重要的是触发信号的接收位置。相机、帧抓取器和光源控制器都设计用于接收触发信号,并将其传递给其他组件,且可以进行可编程时序调整。使用这些设备接收和分配触发信号,通常比使用计算机软件或 PLC 更为理想,因为计算机和 PLC 会增加可变延迟,进一步减慢系统速度。然而,在某些应用中,触发信号必须来自 PLC 或计算机,这时别无选择。
由于相机、帧抓取器或光源控制器都可以接收触发信号并启动成像过程,那么该使用哪个呢?由于这些组件都使用可编程硬件,通常速度非常快。选择如何路由触发信号可能需考虑减少布线复杂性。
帧抓取器通常具备一个可选的附加功能,可以向 CPU 发送中断通知,告知相机曝光开始。在需要时使用此中断,可以帮助 CPU 准备处理即将到来的图像。
需要理解的是,导致触发的物理事件与触发信号之间总是存在延迟,同时这种延迟也总是会有小的变动或不确定性。通常,这种延迟短到可以忽略不计,在整个机器视觉过程中影响不大。
还有另一种触发选项,即让相机自由运行,分析每个进入的图像,以判断是否有物体存在。以检测杂草的拖拉机上的相机为例,当拖拉机穿过田地时,杂草并没有可用的触发信号。为了实现高速,相机可以设置为以低分辨率成像,当检测到杂草时,再获取高分辨率图像,以便精确定位杂草。
对于高速视觉而言,短曝光时间是有利的。大多数机器视觉相机都具有可编程的曝光时间,有些甚至短至 1μsec。虽然可以缩短曝光时间,但如果缩短曝光本身,会导致图像变暗,这并不建议。为了解释这一点,有必要进行一些说明。
图像传感器上的每个像素都是一个光子计数器。要使像素输出特定电平,需要一定数量的光子入射到该像素上。由于光子具有能量,因此光子的能量与产生像素输出所需的光子数量的乘积即为曝光。能量是功率与时间的乘积。对于像素而言,曝光是入射光功率与曝光时间的乘积。
在数学上,曝光可以表达为:
其中:
E 表示以分数形式表示的曝光
I(λ) 是按波长的入射光子流密度(功率密度)
AP 是像素的感应区域
QE(λ) 是按波长的量子效率
t 是曝光时间
S 是像素中光生电子的饱和容量
I(λ) 可以由以下表达式给出:
其中:W(λ) 是按波长的入射光功率密度
λ 是波长
h 是普朗克常数
c 是光速
缩短曝光时间需要增加到达像素的光量。有两种方法可以增加入射到图像传感器上的光功率:一是提高视场内的光功率,二是通过打开光圈来增强镜头的聚光能力。
通过打开镜头光圈(使用较小的 f 值),可以增加曝光,从而收集更多光线并提高到达像素的光功率。然而,光圈不仅控制镜头的聚光能力,还影响镜头的分辨率和景深。因此,光圈设置必须受到限制,以满足所需的分辨率和景深,不应仅仅为了收集更多光线而随意调整。
大多数机器视觉相机具有可编程增益。可调增益是对像素信号的放大;虽然它会影响输出幅度(亮度)或图像,但并不影响曝光。虽然增益可以提高幅度,但同时也会增加噪声。增加增益并不能纠正曝光不足的图像,也无法提供更高质量的图像。
从关于曝光的信息中,您应该了解到一个关键点:入射到图像传感器上的光功率是最重要的,而不一定与视场的大小有关。例如,如果有两个不同视场大小的成像系统,并且使用相同的相机和镜头对视场进行成像,那么原则上,您需要为每个视场提供相同的照明功率,以获得良好的曝光。因此,较小的视场需要更强的照明,以获得相同的入射光功率。
选择像素较大或较小的相机并不一定会影响所需的曝光。较小的像素会导致图像传感器变小,从而使相机更经济。然而,较小的像素通常具有较低的填充因子(实际对光敏感的像素面积的百分比),导致灵敏度降低。较小像素的噪声表现也较差。因此,虽然像素大小对曝光的影响不大,但图像质量却会显著改变。
在对移动物体成像时,曝光时间的一个限制是所产生的模糊。由于物体在运动,曝光时间是有限的,因此在曝光期间会出现物体移动。最佳做法是将模糊限制在不超过 1 像素。
模糊的计算公式为:
其中:
B 是以像素为单位的模糊
VP 是部件的速度(通常以 mm/sec 为单位)
t 是曝光时间(秒)
RS 是视场中的空间分辨率(mm/pixel)
例如,如果某个部件以 25 米/分钟(417 mm/sec)的速度移动,而空间分辨率为 0.5 mm/pixel,
所有现代机器视觉相机都具有可编程曝光时间,也称为可编程快门。电子快门有两种类型:滚动快门和全局快门。
滚动快门(见图 4)是最容易在图像传感器中实现的。它会依次曝光每一行像素,每一行的开始时间略晚于前一行。当对移动物体进行成像时,滚动快门会导致运动畸变,使移动物体在图像中出现扭曲。因此,在对移动物体成像时,通常不建议使用滚动快门。
全局快门(见图 5)同时曝光图像传感器中的所有像素。在对移动物体成像时,它不会产生运动畸变。
使用滚动快门的相机可以通过在图像曝光的关键时刻闪烁光源来防止运动畸变(见图 6)。然而,当曝光时间缩短以加快视觉系统速度时,闪烁的时间窗口会消失(见图 7)。
除了相机的电子快门能够最小化图像中的运动模糊外,一些具有适当控制器的光源可以产生非常短的光脉冲,类似于闪光灯,有助于缩短曝光时间并减少模糊。
目前,机器视觉中使用的大多数光源都是基于 LED 的。许多 LED 光源可以在高达其额定稳态电流十倍的电流下脉冲(称为过驱动),前提是工作周期,即开灯时间与触发间隔时间的比率小于过驱动与工作周期的乘积,并且小于 1(见图 8)。
通常,相机的电子快门与光源的过驱动一起使用。在这种配置中,确保一个快门的时间稍早且持续时间稍长于另一个是很重要的,以防止发生竞争条件,即一个定时控制曝光开始,而另一个定时控制曝光结束(见图 9)。
与曝光及下文涉及的相机接口相关的重要指标是帧率,即相机向处理器传送图像的最大速率。以下是关于帧率的一些考虑因素:
帧率由曝光时间、图像数据从图像传感器读取的速度以及图像数据传输到处理器的速度决定。一些相机还提供内部图像处理,可能会增加一些延迟,但通常非常小。
当前的机器视觉相机可以提供高达 1,590 帧/秒的帧率。还有一些特殊的高速相机,通常用于科学研究,能够以更高的帧率工作。
较低的图像分辨率(像素的行和列)与较高的帧率相关联。
在相机内部使用感兴趣区域(ROI)可以减少从图像传感器读取图像数据的时间,并将数据传输到处理器。这会大大提高帧率。
像素合并(binning)是一种相机功能,可以将相邻像素组合成一个虚拟更大的像素,这样不仅提高了相机的灵敏度,还因减少了较大像素的数量而提升了帧率。
触发之间的时间不能短于曝光时间。如果发生这种情况,相机将无法正确响应触发信号。对触发信号的响应取决于相机的设计。相机可能会忽略触发信号,或者在当前曝光完成之前延迟下一个曝光。
在读取当前图像的数据并将其传输到处理器的同时触发后续图像的曝光是可行的。然而,这种时机需要仔细分析,以确保不会出现时间冲突,导致数据丢失。
只要曝光足够短,短曝光时间并没有缺点。
更高灵敏度的相机可以在不复杂化照明设计的情况下实现更短的曝光时间。
短曝光时间不仅有助于加快视觉处理速度和减少运动模糊,还能缓解环境光的影响。
图像数据从图像传感器传输到处理器的速度取决于以下因素:
数据从芯片读取的速度
相机接口的传输速度
图像的像素大小
每个像素的数据深度
灰度图 – 位/像素
彩色图 – RGB(通常是灰度的3倍)
高动态范围(仅在必要时使用)(通常是灰度的2倍)
有些相机使用 GigE 协议,但并不符合 GigE Vision 标准;还有一些相机使用 USB3 协议,但不符合 USB3 Vision 标准。未符合标准的相机可能存在未知的干扰标准,可能无法与为这些标准设计的软件良好兼容。
表1中的数据速率为原始数据速率。除了 Camera Link,其他接口使用的数据包不仅包含图像数据,还包括数据编码,增加了额外的位以及头部和尾部信息。因此,图像数据的实际传输速率会低于显示的速率。在选择相机接口时,应适度保守,以确保接口的速度足够。
机器视觉相机接口标准更重视速度而非绝对的数据可靠性。除了 Camera Link,数据包中包含冗余数据,以帮助检测数据错误,并在一定程度上进行纠正。一般来说,如果发生数据传输错误,图像数据会被损坏。视觉系统的设计应考虑如何检测图像损坏,以及损坏的图像对系统性能的影响。
不要在 GigE Vision 或 USB3 Vision 中使用集线器。因为没有机制可以在与其他源的数据包冲突时重新传输数据包,所以使用集线器会导致 GigE Vision 失败。使用 GigE 交换机则可以在不丢失数据的情况下工作,但会导致有效数据速率降低。使用 USB3 集线器不会影响数据完整性,但会降低可实现的数据速率。采用专用端口的高性能接口卡(用于 GigE 或 USB3)将提供最快且最可靠的图像数据传输。
关于数据速率的一些进一步思考:
目前用于机器视觉的图像传感器能够以高达 3,780 Mpixel/秒的速度传输数据,但大多数传感器速度较慢。
相机接口的速度可能不及图像传感器的数据传输速率。
相机可能无法达到潜在的图像传感器数据速率或接口数据速率。
在当前的计算机中,几乎所有接口都通过 PCIe(PCI Express)总线工作。这包括帧抓取器、用于 GigE 和 USB3 的插卡接口,以及大多数板载 GigE 和 USB3 端口。PCIe 几乎不干扰处理器的操作,能够直接将数据从接口传输到内存。
PCIe 是一种多通道串行总线,总共有 16 条串行通道。每条通道的带宽取决于其代数。第三代的每条通道带宽为 1GB/秒,第四代为 2GB/秒。第五代的规范已发布,带宽为每条通道 4GB/秒,但相关产品非常有限。相机接口可用的带宽取决于其代数和所使用的通道数量。
尽管设备可以使用全部 16 条通道,但实际上并不这样做,因为这会排除其他设备访问 PCIe。对于游戏计算机,高速显示刷新有时会使用 8 条通道。大多数相机接口使用 1、2 或 4 条通道。
接口设备和 PCIe 总线决定使用哪个代数的速度,基于两者中较低的速度。要实现第四代速度,接口卡和计算机的 PCIe 总线都必须支持第四代;否则,将使用第三代的速度。
例如,Camera Link HS 每条电缆的理论带宽可达到 2,100 MB/秒(原始带宽)。考虑到数据包和编码开销,实际数据带宽可能略低于 2,000 MB/秒。要处理这种带宽,至少需要两个第三代 PCIe 通道的帧抓取器,而第四代 PCIe 仅需一条通道即可处理这一电缆的带宽。
了解所有连接相机的总带宽可以确定所需的最低 PCIe 带宽,并且一旦确定 PCIe 的代数,总带宽还决定了所需的最小通道数量。
图12展示了简单图像处理的示意图,在这种处理方式中,图像处理始终在下一个触发器启动新图像采集之前完成并提供输出。随着处理速度的提升,这种方法通常是可行的,但并非总是如此。需要注意的是,图像处理时间是阴影区域,其延迟是不确定的,所需时间会因每个图像的内容以及操作系统的行为而有所不同。
使用几乎相同的设备,可以通过使用多个线程和两个核心交错处理来提高视觉系统的速度,如图13所示。这引出了三种常见的处理模式:
单指令单数据(SISD,图14)
仅使用一个核心的非常简单的 PC 处理
大多数嵌入式处理器
大多数数字信号处理器(DSP)
单指令多数据(SIMD,图15)
大多数 PC 处理器内置的功能,如 Intel 的 MMX/SSE
专用的网格处理芯片
根据其编程的可编程门阵列(FPGA)
多指令多数据(MIMD,图16、图17 和图18)
多核处理器
处理器阵列
专用的流水线处理器
与通用处理器协作的一个或多个专用处理器
图形处理单元(GPU)
根据其编程的 FPGA
以下是一些加快图像处理速度的方法:
简化图像。
消除多余特征。
每幅图像尽可能减少部件数量。
设计时确保图像之间的一致性,以简化图像处理。
使用最低可行的图像分辨率。
使用感兴趣区域(ROI)来最小化处理的像素数量。
算法时间与 NPixels 成正比,或 NPixels²。
将计算密集型任务转移到硬件上。
重写算法,使其对特定应用更高效。
尽量将代码结构化为从缓存内存中工作,以最小化缓存缺失,这样可以避免访问 RAM 导致程序运行变慢。
避免使用嵌入分支指令的循环。分支会减慢处理器的执行速度。
避免使用管理代码的语言(如 C# 和 Python)。
这些语言是半编译和解释型的。
避免使用会暂停计算的垃圾回收。
避免在运行时分配或释放内存,或创建和销毁对象。
关闭虚拟内存。
使用充足的缓存内存。
以高优先级运行关键任务。
避免在循环中进行分支操作。
输出有两种基本选择:通过既定协议的软件输出,或通过设置位的硬件输出。
软件输出具有以下特点:
+最灵活
+输出协议范围最广
+能处理大数据项(如图像)
-速度较慢
-延迟变化较大
硬件输出具有以下特点:
+快速
+延迟变化最小
+通过相机或帧抓取器的输入输出
-最适合有限数据(如通过/不通过)
大多数视觉系统使用这两种输出形式的组合。软件输出适用于时间不紧迫且可以排队以防止数据丢失的场景。
由于图像处理的软件处理时间因图像而异,您可能需要实现可变延迟,以便正确同步输出。
构建一个高速视觉系统需要关注视觉系统设计的各个方面。本文重点介绍了机器视觉过程中的五个主要步骤:触发、曝光、图像数据传输、图像处理和输出,以提供加快视觉系统的有效方法。
申明:感谢原创作者的辛勤付出。本号转载的文章均会在文中注明,若遇到版权问题请联系我们处理。
----与智者为伍 为创新赋能----
联系邮箱:uestcwxd@126.com
QQ:493826566