基于​NI Vision Development​模​块​的​FPGA​视觉​产品​简介

概览

借助​FPGA​技术​和​NI Vision Development​模​块,​您​可以​对​采集​的​相机​图像​进行​高速​现场​可​编​程​门​阵​列​(FPGA)​处理。​FPGA​处理​尤其​适用​于​要求​图像​采集​和​处理​之间​具有​低​延迟​的​应用。​本文​概述​了​如何​在​FPGA​上​进行​图像​处理​及其​典型​的​应用​场景。

内容

FPGA​编​程​简介

NI LabVIEW FPGA​模​块​是​LabVIEW​图形​化​编​程​环境​的​扩展​模​块。​您​可以​使用​VHDL​等​底层​语言​进行​复杂​的​FPGA​编​程。​但是​如果​您​熟悉​LabVIEW,​则​可​快速​学会​使用​LabVIEW FPGA。​这​可​大幅​缩短​FPGA​编​程​应用​的​开发​时间,​避免​需要​定制​硬件​设计。​与​使用​HDL​进行​编​程​不同,​您​可以​在​LabVIEW​程序​框​图​界面​上​创建​应用​程序,​LabVIEW FPGA​会​合成​图形​化​代码​并​将​其​部署​到​FPGA​硬件​上。 

在​FPGA​上​处理​图像

许多​图形​处理​算法​具有​内在​并行​性,​因此​适用​于​在​FPGA​上​实现。​这些​算法​包含​对​感兴趣​的​像​素、​行​和​区域​进行​运算,​不需要​图案​(pattern)​等​高级​图像​信息。​这些​函数​可以​在​多个​小​区域​的​位​上​或​图像​的​多个​区域​上​同时​执行。​图像​数据​也可以​并行​传输​到​FPGA​并​同步​进行​处理,​这​是​因为​数据​的​处理​不需要​使用​中央​处理​器。​NI Vision Development​模​块​包含​50​多个​图像​处理​函数,​可​结合​NI LabVIEW FPGA​模​块​使用,​在​FPGA​上​处理​图像。 以下​列出​了​Vision Development​模​块​中​可在​FPGA​上​使用​的​几个​图像​处理​函数​示例: 

预​处理

  • 图像​变换
  • 图像​运算​符
  • 阴影​校正
  • Bayer​解码
  • 色彩​空间​转换
  • 一​维​快速​傅立叶​变换
  • 滤波​(平滑/​锐​化)
  • 二​值​形态​学

特征​抽取

  • 边沿、​线​和​角
  • 二​进制​对象
  • 颜色

测量

  • 重心
  • 面积​测量

 

Vision Development​模​块​FPGA​函数​概述

Vision Development​模​块​与​NI LabVIEW FPGA​模​块​一起​安装​后,“视觉”(Vision)​选​板​就​会​包含​用于​FPGA​图像​处理​应用​的​函数。

图​1. “视觉”(Vision)​选​板​包含​了​多个​用于​FPGA​图像​处理​应用​的​函数。

 

“视觉”(Vision)​选​板​包含​了​图像​变换​VI,​用于​在​FPGA​和​CPU​之间​传输​图像。​第二​部分“FPGA​视觉​的​应用​场景”探讨​了​不同​的​应用​场景​以及​为什么​图像​在​传​入​或​传​出​CPU​时​有时​需要​进行​图像​转换。

NI Vision Development​模​块​包含​Vision Assistant Express VI,​该​VI​可​通过​握手​和​同步​自动​生成​LabVIEW FPGA​图像​处理​代码,​无​需​编写​底层​同步​代码。​您​可以​在​LabVIEW​程序​框​图​中​打开​Vision Assistant,​也可以​将​其​作为​一个​独立​的​程序​打开​来​创建​针对​特定​NI​硬件​的​LabVIEW​项目。

NI Vision Assistant

图​2. Vision Assistant​可​作为​一个​独立​的​程序​打开,​以​生成​针对​特定​硬件​的​代码。

 

选择​好​硬件​之后,​Vision Assistant​会​估算​出​图像​处理​脚本​所需​的​FPGA​资源,​然后​生成​一个​包含​一个​主机​VI​和​FPGA VI​的​LabVIEW​项目​来​进行​图像​处理​和​转换。

Vision Assistant生成的LabVIEW项目

图​3. 创建​图像​处理​脚本​之后,​Vision Assistant​将​自动​生成​一个​包含​硬件​终端、​主机​VI(如果​指定​的话)​和​FPGA VI​的​LabVIEW​项目​来​进行​图像​处理​和​转换。

 

FPGA​视觉​的​应用​场景

应用​场景​1:​仅​使用​FPGA​进行​处理,​以​实现​高速​控制

FPGA​图像​处理​可​降低​图像​分析​所需​的​运算​处理​资源。​由于​FPGA​是​一个​硬件​资源,​因而​可​将​CPU​资源​释放​出来,​用于​执行​其他​运算。​执行​分析​时​不需要​CPU​的​干预,​因此​大大​降低​了​从​图像​处理​到​控制​信号​输出​之间​的​延迟。​图​4​显示​的​例子​可​帮助​您​了解​如何​使用​FPGA​来​释放​CPU​资源。​在​本​例​中,​FPGA​执行​所有​的​图像​处理​并​生成​输出​信号。​这​使得​系统​延迟​降到​最低,​从而​能够​快速​生成​控制​信号。

仅FPGA的处理

图​4.所有​处理​任务​均​在​终端​的​FPGA​上​执行。​这​使得​CPU​能够​执行​其他​任务,​从而​最大​程度​降低​系统​延迟。

应用​场景​案例​包括​高速​分类、​眼球​追踪、​激光​对准。 仅​FPGA​的​处理​可在​帧​接收​器​上​实现,​只需​在​图像​数据​输入​路径​上​直接​放置​一个​FPGA​即可。​两​个​典型​的​产品是Camera Link​帧​接收器Camera Link​适​配​器​模块

 

NI PCIe-1473R和NI 1483R

图​5. Camera Link​帧​接收​器​和​Camera Link​适​配​器​模​块​将​FPGA​放置​在​图像​路径​中,​适用​于​板​载​预​处理​和​高速​控制​应用。

 

应用​场景​2:​FPGA​预​处理

基于​FPGA​的​视觉​系统​处理​器​还​可​用于​执行​更多​处理​任务。​图​6​介绍​了​如何​使用​FPGA​来​进行​预​处理,​同时​在​CPU​上​执行​更​高级​的​处理​算法。​在此​应用​场景​中,​FPGA​执行​的是​位​处理,​比如​滤波​或​边沿​检测。​经​预​处理​的​图像​发送​至​CPU​进行​图像​级​处理,​比如​图案​识别。​在​本​例​中​系统​延迟​依然​非常​低,​因为​CPU​执行​的​函数​数量​要​比​传统​视觉​系统​少得​多。

FPGA预处理

图​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​执行​的​函数​数量​来​降低​系统​延迟。

FPGA协处理

图​7. 图像​采集​和​预​处理​在​FPGA​上​进行​后,​图像​数据​传输​至​CPU。​CPU​执行​更​复杂​的​图像​分析,​例如​图案​匹配​和​分类。

 

FPGA​协​处理​可以​在​NI​工业​控制器​和​CompactRIO​以及​在​Camera Link​帧​接收​器​和​Camera Link​适​配​器​模​块​上​实现。

 

NI工业控制器和NI CompactRIO控制器

图​8. NI​工业​控制器​和​NI CompactRIO​控制器​支持​视觉​应用​所需​的​FPGA​协​处理。

 

FPGA​协​处理​的​一个​应用​是​质量​检验​时​的​颗粒​计数。​在​该​应用​中,​颗粒​计数​任务​可以​在​FPGA​上​运行​以​确定​颗粒​的​数目​及​大小。​然后​这个​信息​可以​与​处理​器​共享,​以便​显示​给​操作​员​或​用作​其他​进程​的​输入。

总结

总之,​FPGA​的​高速​运算​和​并行​特性​可​缩短​图像​处理​时间,​从而​降低​系统​延迟​和​提高​吞吐量。​此外,​FPGA​图像​处理​可以​允许​高速​分​拣​机​等​系统​的​控制器​更​快速​地​基于​所​采集​的​图像​作出​决策。​另外,​得益​于​嵌入式​处理​领域​的​最新​发展,3D​视觉现​已​广泛​应用​于​各种​机器​自动​化​领域。