清晰化算法在DSP上的实现
清晰化算法在DSP TIDM642上的实现,之前的部分工作摘要于此。
1 DSP平台的选择
1.1 DM642 Evolution Module
选择现有的DM642 Evolution Module(EVM)作为开发平台。
(1) DM642作为TI公司一款功能强大的经典芯片之一。主要性能如下:
- 高性能的定点信号处理器:指令执行周期可达1.39ns,时钟频率最高可达720MHz;完全兼容C64x系列软件。
- 增强的超长指令字(VLIW) C64x核:6个32/40位的ALU;两个乘法器支持每时钟周期4个16×16bit乘法或8个8×8bit乘法;64个32位通用寄存器;
- L1/L2存储结构;16KB L1P 程序Cache、16KB L1D 数据Cache;256KB统一编址的RAM/Cache;64位外部存储器接口(EMIF)总线;1024M可编址外部地址空间。
(2) DM642 EVM是基于DM642芯片的开发板,它是一个可开发DM642所有功能并包含所有相关外部器件的工作系统。它包括:32MB SDRAM;4MB线形Flash存储器;2个视频解码器;1个视频编码器;双口RS-232串行口和线形驱动;32KB I2C EEPROM等常用器件。
因此,DM642 EVM是进行数字图像处理较好的选择。
2 系统总体设计方案
视频实时系统分为视频采集、视频处理(去雾/夜视增强)和视频显示三个部分。处理过程如图所示。具体工作原理是:摄像头采集退化的模拟视频信号,模拟视频信号通过DM642 EVM上的解码芯片SAA7115解码成数字并行信号BT656码流送DM642视频端口(输入),并以EDMA方式传到SDRAM中存储。DM642 CPU通过访问SDRAM中的图像,处理后送回SDRAM中的输出缓冲区。DM642视频端口(输出)会以EDMA方式从SDRAM的输出缓冲区取得数据后形成BT656码流送出。DM642 EVM上的编码芯片SAA7105编码BT656码流成模拟视频信号输出,清晰化后的视频图像可以在显示器上显示。
3 算法基本流程
4 算法难点
(1)浮点型数据的处理:由于在算法中涉及到除法、在去雾中透射率的也是(0,1]之间的小数。而DM642是定点DSP,直接使用浮点型数据进行运算,速度太慢;
(2)滤波核半径较大时,算法复杂度也将是巨大的,算法在DSP上的运行效率也会十分低下。
(3)图像处理的数据量大,如何充分利用DSP资源,提高程序运行效率,成为算法实现的一个难点。
5 优化方案
- 降低算法本身复杂度,如:
- 在导向滤波中求取均值、方差时,使用boxfilter的方法, 快速计算邻域内像素和,使得算法具有O(N)的时间复杂度。
- 去雾过程是在RGB颜色空间进行的,因此,首先需要将视频解码器输出的YUV格式的数据转换成RGB格式。对于颜色空间的转换,直接使用转换公式至少需要4次乘法和6次加法。实际过程中对每个像素点都进行这样的运算,计算量很大。可使用部分查表法,以查表代替乘法运算。
- C代码的优化
- 程序中影响性能的主要代码是循环,优化一个循环可以抽出这个循环放在单独的文件,重新编写、重新编译和单独运行。
- 对浮点型数据的处理,采用Q格式定标的方法,浮点小数以定点小数形式运算。
- 使用关键字restrict消除存储器相关性,利于指令并行操作。
- 利用C64x的双16位扩充功能,一个周期可进行两个16位数据的运算。优化时,应该将连续的短整型数据流转换成整型数据流操作。
- 使用内联函数和循环展开。内联函数(如_add2()等)直接与C64x汇编指令映射,循环体内加入内联函数不影响程序流水执行;而循环的展开可以使CPU内的功能单元和寄存器得到充分利用,使循环体达到最佳流水状态。
- 使用逻辑运算代替乘除运算。
- 把程序和经常要用的数据放入片内RAM。
- 通过EDMA技术搬运片内片外的数据。EDMA不占用CPU时间,可提高运行速度。
- 使用C64x编译器提供的若干优化选项,如-o3程序级优化等。
- 使用TI提供的优化好的库函数,如DSPLIB、IMGLIB等。
6 实现测试环境和效果
2014
eaglediao