作者:默宸,来源:FPGA技术联盟
图像处理简而言之就是对图像进行操作从而得到自己想要的结果,它是一个非常广义的概念,包含图像增强、图像复原、图像重建、图像分析、模式识别、计算机视觉等N多个应用方向。这些应用技术有许多在本质上是相通的,但是不同应用领域的关注点往往是不同的。
FPGA做图像处理的优势
用FPGA做图像处理最关键的一点优势就是:FPGA能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA。例如在某些分选设备中图像处理基本上用的都是FPGA,因为在相机中从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理必须很快且延时固定,只有FPGA进行的实时流水线运算才能满足这一要求。
要了解FPGA进行图像处理的优势就必须理解FPGA所能进行的实时流水线运算和DSP,GPU等进行的图像处理运算有何不同:
DSP,GPU,CPU对图像的处理基本是以帧为单位的,从相机采集到的图像数据会先存在内存中,然后GPU会读取内存中的图像数据进行处理。假如采集图像的帧率是30帧,那么DSP,GPU要是能在1/30秒内完成一帧图像的处理,那基本上就能算是实时处理。
而FPGA对图像进行实时流水线运算是以行为单位的。FPGA可以直接和图像传感器芯片连接采集图像数据流,如果是RAW格式的还可以通过差值来获得RGB图像数据。FPGA能进行实时流水线处理的关键是它可以用内部的Block Ram缓存若干行的图像数据。Block Ram可以说是类似于CPU里面的Cache,但Cache不是你能完全控制的,而Block Ram是完全可控的,可以用它实现各种灵活的运算处理。这样FPGA通过缓存若干行图像数据就可以对图像进行实时处理,数据就这样一边流过就一边处理好了,不需要送入DDR缓存了之后再读出来处理。
FPGA图像处理之路,从此开始
用FPGA做图像处理相关的开发时,往往我们首先要考虑的是FPGA处理板的性能,因为做图像处理是一个十分消耗资源的事情。从网上可以搜索到很多图像处理FPGA开发板,有些开发板上的资源十分丰富,可以满足我们前期试验的需求。
FPGA在图像处理方面的主要应用于图像的预处理阶段。
什么是图像的预处理?比如图像的畸变校正,滤波器处理,边缘检测、颜色检测和阈值处理等。这些预处理都有共同的特征:算法较为简单,操作重复性强等。但是,除了预处理,FPGA就不能做点别的吗?图像处理类似一个三层金字塔,分为底层,中间层,高层。
图像处理金字塔有三层,分别针对的是像素级、特征级和目标级。一个成熟的图像处理应用应该同时完成这三层。
在像素层,我们可以对图像做一些变换,目的是增强图像的有用信息,同时滤波任何不相关的信息(如噪声)。然后通过对预处理后的图像做分割操作实现图像从像素级到特征级的过度,分割操作可以理解为检测图像中具有共同性质的区域。针对这些区域,依据一个或多个分类法则,将区域归类到预先设定的特征类型中作为后期识别的数据集。此时的数据已经不仅仅是图像了,其中包含了丰富的特征信息,如物体的位置等。在金字塔高层,依靠获取的特征信息,如有必要还可以将这些特征集作为学习的训练集来创建专用的模型,借助模型来实现识别,进而用来对实时采集的图像进行描述。
图像处理系统设计注意点
1. 将算法开发和FPGA实现分离。用软件的图像处理环境算法可以进行大批量的图像样本测试及调试,再将算法映射到硬件上,这样大大节省了硬件调试周期。
2. 算法的精度。图像处理的算法中,大部分需要采用浮点数运算,而浮点数运算再FPGA中是非常不划算的,因此需要转换成定点数计算,此时会涉及到浮点运算转定点运算时精度下降的问题。
3. 结构的合理划分。这里是指DSP,CPU与FPGA;一般结构规则:计算量大的操作如sobel算子、均值滤波可以采用FPGA进行,不规则的动态可变长度循环的底层算法由DSP、CPU进行;
图像处理FPGA 设计基本方法
1. 阵列结构结合流水线处理设计。例如RGB图像,包括三组数据,处理时需要并行三通道后,每个通道进行分别的串行流水处理。
2. 缓存设计。帧缓存、行缓存、列对齐。
3. 资源。分辨率、处理窗口、对资源影响成倍增加。