清晰化算法在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
清晰化算法在DSP上的实现的更多相关文章
- Wellner 自适应阈值二值化算法
参考文档: Adaptive Thresholding for the DigitalDesk.pdf Adaptive Thresholding Using the Integral I ...
- sauvola二值化算法研究
sauvola二值化算法研究 sauvola是一种考虑局部均值亮度的图像二值化方法, 以局部均值为基准在根据标准差做些微调.算法实现上一般用积分图方法 来实现.这个方法能很好的解决全局阈值方法的短 ...
- 基于dsp_builder的算法在FPGA上的实现
基于dsp_builder的算法在FPGA上的实现 一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台 ...
- PIE SDK栅格矢量化算法
1.算法功能简介 栅格数据矢量化较为复杂,如果由一幅扫描的数字化地图来建立矢量数据库,则需要经过数字图象处理,如边缘增强.细化.二值化.特征提取及模式识别才能获得矢量数据.人们通常将多色地图分色后逐个 ...
- 【DSP开发】【计算机视觉】EMCV:可在DSP上运行的OpenCV
EMCV:可在DSP上运行的OpenCV EMCV项目主页: http://sf.net/projects/emcv EMCV全称为Embedded Computer Vision Library,是 ...
- 一种局部二值化算法:Sauvola算法
之前接触过全局二值化(OTSU算法),还有OPENCV提供的自适应二值化,最近又了解到一种新的局部二值化算法,Sauvola算法. 转载自:http://www.dididongdong.com/ar ...
- 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)
一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台:DIY_DE2 软件平台:quartus ii9.0 ...
- [计算机图形学]光栅化算法:DDA和Bresenham算法
目录 一.DDA 二.Bresenham 三.绘制图形 1. 绘制直线 2. 绘制圆 3. 绘制椭圆 一.DDA DDA算法是最简单的直线绘制算法.主要思想是利用直线的斜截式:\(y=kx+b\) 对 ...
- TinyMCE的使用(包括汉化及本地图片上传功能)
TinyMCE我就不多介绍了,这是下载地址:https://www.tinymce.com/download/ 下载下来是英文版,要汉化也很简单.首先去网上随便下载个汉化包,然后把汉化包解压后的lan ...
随机推荐
- vue-cli 4058错误
vue搭建项目 执行命令 npm install -g vue-cli 出现错误 4058 1.按照文章http://www.jb51.net/article/126221.htm操作没有效果 2 ...
- 七牛云-C#SDK-上传-前期准备
1.创建一个asp.net core MVC 程序(这里随便) 这是一个空的程序 2.创建UploadController 3.添加引用 Install-Package Newtonsoft.Json ...
- Delphi locate函数
使用ADO等数据控件的时候,经常会用到 locate 函数,在结果数据集中查询和定位,下面介绍一下: (一) function Locate(const KeyFields: String; cons ...
- Perl 条件语句
Perl 条件语句 Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: 注意,数字 0, 字符串 '0' . & ...
- django入门 -- 简单流程
django入门 -- 简单流程 简介 通过简单示例,使用django完成基本流程的开发,学习django的主要的知识点,在后续课程中会逐个知识点进行深入讲解 以“图书-英雄”管理为示例 主要知识点介 ...
- NX二次开发-创建直线(起点-向量方向-长度)UF_CURVE_create_line
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_csys.h> #include < ...
- Go语言中new()和 make()的区别详解
概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似.不过解释两者之间的不同也非常容易. new 的主要特性 首先 new 是内建函数,你可以从 http://gol ...
- [转] .htaccess实现www 与没有www之间的重定向
建站过程中有时候我们需要做这些设置 1.访问www 直接重定向到没有www上或者反过来,那么怎么通过.htaccess文件来实现呢. 1.首先服务器要支持Rewrite重写 2.创建.htaccess ...
- javascript es6 语法快速入门
1. let.const 作用:let 声明变量,const 声明常量 与 var 的区别:不能重复声明,且存在块级作用域,即只在代码块内生效 2. 箭头函数 使用: let show = funct ...
- USACO 2004 Open The Cow Lineup /// oj25965
题目大意: 输入n k,n头牛 k个品种 接下来n行描述每头牛的品种 输出无法找出的最短子序列的长度 Sample Input 14 515325134425123 Sample Output 3 H ...