【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @】
在传统的图像处理过程中,很多算法都是由cpu来完成的。但是由于cpu是一条指令、一条指令来完成的,整个时间上处理比较长。因此如果在图像处理的过程中出现标定、噪声处理、hsv提取、灰度化、旋转、算子计算、二值化、膨胀、腐蚀多次操作之后,那么整个计算时间是挺长的,因为每次处理的时候都需要将循环处理每个像素值,时间上是非常可观的。所以,要想提高处理的速度,满足实时性能要求,要么cpu频率高一些,要么使用fpga、cuda、asic等处理方法来优化算法。
fpga目前的应用场合主要是硬件协议和算法。相比较具体的硬件协议,fpga在算法这一块的加速效果也是非常明显的。对于软件工程师来说,特别是嵌入式软件工程师来说,用fpga做算法是很好的一个选择。
1、fpga优化的基本原理
如果cpu是对单个像素进行处理,那么fpga可以并发同时处理多个像素,这是优化的关键。传统图像算法之间没有依赖关系,这也决定了并发处理多个像素的做法是可以的,也是可行的。
2、fpga可以适配哪些算法
基础的图像算法都可以用fpga进行优化,比如下面
A、灰化
B、RGB -> HSV
C、直方图
D、高斯噪声处理
E、均值计算
F、二值化
G、Canny算子计算类
H、差值运算
I、腐蚀、膨胀
J、FFT、DFT等算法
K、旋转
L、上下、左右翻转
M、图像差值计算等等
3、fpga不适宜的计算
除了传统经典的图像算法,fpga并不适宜那些复杂的算法,比如说区域查找、深度学习、rcnn、ssd、yolo等复杂的算法。这部分内容可以用cpu来完成,或者芯片厂商提供的sdk来加速完成,比如arm nn等等。
4、比较适合做实验的fpga平台
zynq,除了fpga,还有arm
5、fpga适合的应用场景
fpga整体成本略高,比较适合对处理性能有要求、同时价格不敏感的场景
6、可能代替fpga的方案
现在除了fpga之外,另外一个比较好的框架就是nvidia的cuda。cuda的处理思路和fpga比较类似,但是它设计起来比较简单,可以用类c的代码完成fpga需要的大部分功能。
7、将来的趋势
未来一段时间内,fpga、dsp、cuda、多核cpu、asic都会存在,关键取决于应用场景,每一种方案都有自己的优势。只是从成本来说,cuda可能会代替fpga,而asic最终会从所有方案中脱颖而出。