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缓存了以后再读出来处理。缓存

这样的数据流处理显然是顺序读取数据的,那么也就只能实现那些顺序读取数据的算法,也就是图像处理中那一大类用3x3到NxN的算子进行的滤波、取边缘、膨胀腐蚀等算法。可能你们会以为这些运算彷佛都是最基本的图像处理运算,只是个前端的预处理,彷佛用处不大。但问题是只有FPGA作这样的运算才是速度最快效率最高的,好比用CPU作一个取边缘的算法根本就达不到实时。另外别小看了这种NxN算子法,它能够有各类组合和玩法,能够实现分选多种颜色,甚至分辨简单形状等功能。FPGA进行的这种算子法处理是并行流水线算法,其延时是固定的,好比用3x3的算子进行处理其给出结果的延时是两行图像的时间。还有这个算子法和如今卷积神经网络中最前面的卷积层运算是相似的。微信


FPGA中的Block Ram是重要和稀缺资源,能缓存的图像数据行数是有限的,因此这个NxN的算子中的N不能特别大。固然FPGA也能够接DDR把图像缓存到其中再读出来进行处理,但这种处理模式就和CPU差很少了,达不到最高的实时性。其实有些咱们认为须要随机读取数据的图像处理算法也是能够并行流水线化的。网络

在密集运算中,耽误时间和消耗功耗的操做每每不是运算自己,而是把数据从内存中搬来搬去。GPU,CPU在进行运算时要把数据从内存中取出来,算好了在放回去。这样内存带宽每每成了运算速度的瓶颈,数据搬运过程当中的功耗占的比重也不会小。FPGA则能够经过堆不少计算硬件的方法把要作的运算都展开,而后数据从中流过,完成一个阶段的运算以后就直接流入第二个阶段,不须要把一个计算阶段完成后的数据再送回内存中,再读出来交给下一个阶段的运算。这样就会节省不少时间和功耗。如今用FPGA作图像处理就是这样干的,好比先用一个3x3的算子进行滤波,再用一个3x3的算子进行取边缘,在FPGA流水线算法中,滤波处理完了数据当即就会进行取边缘处理,是不须要像CPU那样存回内存再读出来的。机器学习


FPGA进行图像处理的前景仍是挺广阔的,愈来愈多的工业应用场合都要求更高的实时性,而这正是FPGA所适合的。还有机器学习领域,神经网络这种层状的,不须要很随机的读取数据的运算是比较适合用FPGA来作的。不过FPGA不擅长浮点运算,若是能整出不须要浮点运算的神经网络,那么FPGA在这方面的应用将会更大。学习

前些年用matlab和opencv作图像处理。近一段时间经过FPGA处理摄像头视频数据,有太多感触,复杂的算法先不说起,单是上面文章中提到的一些处理手段及策略,很是受用。spa

感谢来自知乎网的图像处理讨论。很是受益!3d


版权全部权归卿萃科技 杭州FPGA事业部,转载请注明出处视频

做者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA极客空间 微信公众号


扫描二维码关注杭州卿萃科技FPGA极客空间

相关文章
相关标签/搜索