借助FPGA技术和NI视觉开发模块,您可以对从相机采集的图像进行高速现场可编程门阵列(FPGA)处理。 FPGA处理尤其适用于要求图像采集和处理之间具有低延迟的应用。 本文概述了如何在FPGA上进行图像处理,包括典型的应用案例。
1. FPGA编程介绍
NI LabVIEW FPGA模块是LabVIEW图形化编程环境的自然扩展。 您可以使用VHDL等底层语言进行复杂的FPGA编程。 但是如果您熟悉LabVIEW,您将可快速学会使用LabVIEW FPGA。 这可大幅缩短FPGA编程应用的开发时间,避免进行自定义硬件设计。 与使用HDL进行编程不同,您可以在LabVIEW程序框图界面上开发应用,LabVIEW FPGA会合成图形化代码并将其部署到FPGA硬件上。
2. FPGA图像处理
许多图形处理算法具有内在并行性,因此适用于使用FPGA。 这些包含感兴趣像素、行和区域运算的算法不需要图案(pattern)等高级图像信息。 您可以同时对多个小区域位或图像的多个区域执行这些函数。 图像数据也可以并行传输到FPGA并同时进行处理,这是因为数据的处理不需要使用中央处理器。 NI视觉开发模块包含了50多个图像处理函数,可结合NI LabVIEW FPGA模块在FPGA上处理图像。 以下列出了几个视觉开发模块可以用于FPGA的图像处理函数示例:
预处理
图像变换
图像算子
阴影校正
拜尔解码
色彩空间转换
一维和二维快速傅里叶变换
滤波(平滑/锐化)
二值形态学
特征抽取
边缘、线和棱角
二进制对象
颜色
测量
质心
面积测算
3. 视觉开发模块FPGA功能概述
视觉开发模块与NI LabVIEW FPGA模块一起安装后,“视觉”选板就会包含用于FPGA图像处理的函数。
图1. 视觉选板包含了多个用于FPGA图像处理的函数。
视觉选板包含了图像变换VI,可用于FPGA和CPU之间的图像传输。 第二部分——FPGA视觉应用案例探讨了不同的应用场景以及为什么FPGA和CPU之间传输图像时有时需要转换图像。
NI视觉开发模块包含了Vision Assistant Express VI,该VI可通过握手和同步自动生成LabVIEW FPGA图像处理代码,无需编写底层同步代码。 您可以通过LabVIEW程序框图打开Vision Assistant,也可以将其作为一个独立的程序打开来创建针对特定NI硬件的LabVIEW项目。
图2. Vision Assistant可作为一个独立的程序打开来生成针对特定硬件的代码。
选择好硬件之后,Vision Assistant可以估算出图像处理脚本所需的FPGA资源。 然后生成一个包含一个主机VI和FPGA VI的LabVIEW项目来进行图像处理和转换。
图3. 创建图像处理脚本之后,Vision Assistant将自动生成一个包含硬件终端、主机VI(如果规定的话)和FPGA VI的LabVIEW项目来进行图像处理和转换。
4. FPGA视觉应用案例
应用场景1: 仅FPGA的处理,用于高速控制
FPGA图像处理可降低图像分析所需的计算资源。 由于FPGA是一个硬件资源,因而可将CPU资源释放出来来执行其他运算。 执行分析时不需要CPU的干预,因此大大降低了图像处理到控制信号输出之间的延迟。 图4显示的例子可帮助您了解如何使用FPGA来释放CPU资源。 在本例中,FPGA执行所有的图像处理并生成输出信号。 这使得系统延迟降到最低,从而能够快速生成控制信号。
图4. 所有处理任务均在终端的FPGA上执行。 这使得CPU能够执行其他任务,从而最大程度降低系统延迟。
应用场景案例包括高速分类、眼球追踪、激光准直;仅FPGA处理可在帧接收器上实现,只需在图像数据输入路径上直接放置一个FPGA即可。 两个典型的产品是NI PCIe-1473R Camera Link帧接收器和NI 1483R Camera Link适配器模块。
图5. NI PCIe-1473R和NI 1483R均在图像路径上放置了一个FPGA,用于板载预处理和高速控制应用。
应用场景2: FPGA预处理
您还可使用基于FPGA的视觉系统处理器来执行更多处理任务。 . 图6介绍了如何使用FPGA来进行预处理,与此同时,CPU可以执行更高级的处理算法。 在本例中,FPGA执行的是位处理,比如滤波或边沿检测。 经预处理的图像发送至CPU进行图像级处理,比如图案识别。 在本例中系统延迟仍然非常低,因为CPU执行的函数数量比传统视觉系统要少得多。
图6. 图像采集和预处理在FPGA上执行,然后图像数据被传递到CPU。 CPU执行更复杂的图像分析,例如图案匹配和分类。
FPGA图像处理尤其适用于需要高速位级处理的应用。 FPGA接收图像数据后使用并高速板载时钟(时钟速率高达100 MHz)处理每个位。 您可在单个时钟周期内同时执行数据传输和使用硬件进行数据处理。 多个视觉算法可以分为多个迭代任务,然后在FPGA上并行执行。
此类架构的应用包括表面和幅材检测和光学相干断层扫描(OCT)。 图5显示了两个能够实现FPGA预处理的帧接收器。
应用场景3: FPGA协处理
在一些情况下,图像处理算法可能包含了多个步骤。 某些步骤,如阈值处理,可以在FPGA中实现。 其它步骤,如图案匹配,可能更适合在CPU上执行。 在这种情况下,您可以将任务从处理器转移到FPGA。 如图7所示,所采集的图像发送到CPU后,便逐个象素传输到FPGA进行位级运算。 像素在FPGA上处理后可发送回CPU进行其他处理。
如果算法可以完全在FPGA上执行,则象素不需要发送回CPU。 在这种情况下,您可以使用FPGA来生成基于图像处理算法结果的输出,或发送处理结果回CPU以便系统的其他部分使用。 结果数据可以是距离测量值、颗粒计数或图像处理步骤的任何其他结果。 FPGA协处理通过最小化CPU执行的函数数量来减少系统延迟。
图7. 图像采集和预处理都在FPGA上进行。 然后图像数据被传递到CPU。 CPU执行更复杂的图像分析,例如图案匹配和分类。
FPGA协处理可以在NI工业控制器和CompactRIO以及在NI PCIe-1473R和NI1483R上实现。
图8. NI工业控制器和NI CompactRIO控制器支持视觉应用所需的FPGA协处理。
FPGA协处理的一个应用是质量检验时的颗粒计数。 在该应用中,颗粒计数可以在FPGA上运行以确定颗粒的数目及大小。 然后这个信息可以与处理器共享,以便显示给操作员或用作其他进程的输入。
5. 总结
总之,FPGA的高速运算和并行特性可减少图像处理时间,从而降低系统延迟和增加吞吐量。 此外,FPGA图像处理可以允许高速分拣机等系统的控制器更快速地基于所采集的图像作出决策。
6. 相关链接
FPGA视觉产品:
NI工业控制器
NI Compact视觉系统
NI CompactRIO
NI PCIe-1473R – 具有FPGA图像处理功能的Camera Link帧接收器
NI 1483 - 用于FPGA图像处理的FlexRIO Camera Link模块
NI 1483 Camera Link NI FlexRIO适配器模块入门介绍
FPGA软件
NI视觉开发模块 - 适用于处理器和FPGA的可编程视觉函数
NI LabVIEW FPGA
IPNet - LabVIEW FPGA函数: 图像处理范例IP
FPGA技术
FPGA技术介绍: 5大优势
评论
查看更多