人们对图像质量要求的不断提升,直接推动着图像算法的不断向前发展,那么到今天为止,常用的图像处理算法是怎么实现的呢?今天我们来谈一谈。 图像处理算法的实现一般有两种途径:软件或者硬件。软件 VS 硬件 软件实现方式,成本低,迭代快,且随着现在各种工具,平台的开源,用软件方式来实现算法,是很好的一种选择。但如果实时性要求较高,数据量较大,软件实现就不能够满足要求,需要改变算法或者改变实现方式来满足要求。 图像处理算法发展到今天,各种算法已经有一定的成熟度,想要改变算法来提高运行速度,难度比较大,因此大家纷纷将眼光转向了硬件实现上面。硬件实现方式 目前实现算法的途径主要有以下几种:通用计算机 通用计算机采用冯.诺依曼结构,串行处理单指令单数据。这种结构决定了它的处理速度比较慢,很难满足实时性要求,只能用于算法的验证和实时性要求不高的场合。 并行处理机 并行处理机即多个CPU同时工作。这样可以缓解单个CPU,不能实时处理数据的缺点。但这一技术目前存在工作时负荷不均匀,以及并行算法编写困难等问题,对于一些要求较高的场合,依然无法满足要求。 数字信号处理器 数字信号处理器也就是DSP(Digital Signal Processor):是为了实现快速数字信号处理算法而设计的、具有特殊的结构的处理器。 通常用C语言进行编程,处理速度非常快,可达到2000MPIS,比最快的CPU快10-50倍。DSP的内部采用专用硬件实现数字信号处理的一些常用算法,所以用DSP处理一些算法速度非常快,比如乘加运算只需一个时钟,但DSP只是对某些固定的运算提供了硬件优化,其仍是串行指令执行系统,并且这些优化运算并不适合所有算法,使其受到了限制。 专用集成电路 专用集成电路(Application Specific Integrated Circuit,ASIC)是为了某一固定的算法和应用而设计的专用电路。 如果图像处理算法采用通用处理器+DSP结构,仍然不能满足速度的要求,可以考虑ASIC。因为是专门针对某一种算法设计的电路,所以运算速度可以做到很快。ASIC的缺点也很明显:设计周期长,需求少,成本高,功能单一,ASIC一旦投入使用,设计系统的灵活性比较差,新的算法和技术只能通过设计新的芯片来实现,通用性差。 现场可编程门阵列 现场可编程门阵列(Field Programmable Gate Array,FPGA),FPGA是当今应用最广泛的可编程逻辑器件,也被称为可编程ASIC,FPGA在结构上具有逻辑功能块,采用查找表结构,通过可编程的内部连线连接功能模块来实现逻辑功能。 FPGA的功能是通过逻辑结构的配置数据来实现。工作时,设计者可现场编程改变FPGA的逻辑功能,设计出所需要的硬件逻辑,可以实时、灵活的更新和开发,提高了设计的灵活性和通用性。 图像处理具有并行性,因此采用合适的并行性算法是提高图像处理速度有效的方法。而FPGA在设计上,可以采用硬件并行和流水线技术,正好可以满足要求。 FPGA适合用来实现对实时图像和视频的处理。包括:直方图均衡、均值滤波、中值滤波、边缘检测、图像旋转、图像缩放等等。各种适合FPGA进行图像处理的算法,正在不断的出现和完善。 随着集成电路技术的不断成熟,国内外以FPGA为基础的图形图像算法和应用也层出不穷,如在汽车电子中的车载电视、车载可视电话等都是基于FPGA进行的数字图像处理;在数字电视系统中,FPGA正在越来越多的被应用,在图像显示、图像压缩、图像格式转化、I/O接口等都是用FPGA进行处理。 小结 就个人工作经历而言,ASIC和FPGA的使用非常多,但两者还是稍有不同。FPGA更多的偏向于算法的功能验证,如果要产品化量产的话,最终都会选择ASIC。所以一般的开发流程是:算法开发->FPGA验证->ASIC。