清晰化算法在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 ...
随机推荐
- 在DELPHI中显示GIF动画
想没想过在DELPHI中显示GIF动画?Delphi的用户是非常幸运的,因为有免费控件可以使用.最著名的控件是Anders Melander编写的TGifImage,并提供完整的源程序.它原来的主页是 ...
- luoguP5162 WD与积木
我怎么这么zz啊.... 法一: 枚举最后一层的方案:没了... 法二: 生成函数:没了. k*F^k(x),就是错位相减. 法三: 我的辣鸡做法:生成函数 求方案数,用的等比数列求和....多项式快 ...
- 执行SQL语句---INSERT/UPDATE/DELETE
1.执行SQL语句函数: int mysql_query(MYSQL* mysql, const char * query); query:所有的sql语句 2.例子: 向children表插入一条语 ...
- 牛客多校第九场 D Knapsack Cryptosystem 背包
题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...
- C++输入cin详解
输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据 ...
- LeetCode 197. Rising Temperature (上升的温度)
题目标签: 题目给了我们一个 温度表格,让我们找到 所有温度比之前一天高的,返回id. 建立 Weather w1, Weather w2,找到当w1 的温度 大于 w2 的时候,而且 w1 的日期是 ...
- JVM常用命令行工具1
1.jps [options][hostid]:查看虚拟机进程状况 -l 输出主类全名,如果进程执行的是jar包,输出jar包路径.-q 只输出LVMID. -m输出虚拟机进程启动时传递给主类main ...
- Typora--终于找到一个能够解决将csdn文章同步到hexo的完美编辑器(解决csdn图片防盗链导致无法直接复制文章的问题)。
文章目录 需求 背景 新宠 告诉我,我的名字叫什么?大声点我听不见~ 页面 神奇之处 看得见的优点 如何设置项目根目录 如何显示图片? 于是最终操作流程 个人博客:https://mmmmmm.me ...
- python爬取文件时,内容为空
解决方式: img_res = requests.get(src,headers=header)在header中加上referer防盗链加上防盗链header的例子: header = {" ...
- 牛客练习赛26 A 平面(结论题)
题目链接:https://ac.nowcoder.com/acm/contest/907/A 思路:结论题,当做2n条直线,参考资料https://blog.csdn.net/qq_34131212/ ...