APP下载

基于DSP的数字图像处理实验的探究

2014-03-25鲁亿方蓝金辉迟健男

实验技术与管理 2014年3期
关键词:代码灰度边缘

鲁亿方, 蓝金辉,迟健男

(北京科技大学 自动化学院,北京 100083)

随着电子科学与计算机科学的发展与进步,数字图像处理技术在各个领域应用越来越广泛,日益成为教学热点。数字图像处理的内容包括:图像变换 、图像编码 、图像增强 、图像恢复、图像分割和图像识别等。目前,数字信号处理器(digital signal processer,DSP)芯片在图像处理领域应用得十分广泛,因此将DSP实验平台引入“数字图像处理”课堂,利用DSP进行数字图像处理,让学生自己设计图像处理的算法,自己在DSP平台上对比图像处理效果,进而引导他们进行创新[1]。

为了满足学生的需要,本文介绍了以DM642为核心的DSP平台,并以此为基础进行一系列的数字图像处理实验,为学生以后的实验课程学习进行了探索。

在课堂大纲的指导下,针对学生所学的知识点、学生的实际情况,适时地选择有代表性、难度适中的数字图像处理实例作为学生的实验项目,让学生能够独立自主地进行设计、编程、调试,通过自己的实践来发现问题、解决问题,在实践过程中不断学习。学生在实践过程中既能在CCS环境实验中加深掌握数字信号处理的基础知识,又能培养学生调试程序的能力。为了配合理论教学,实验内容安排仍从认识性和验证性入手,逐步增加设计性和工程应用性内容,使学生在掌握数字信号处理基本理论和方法的基础上,可以更多地了解和掌握数字信号处理的仿真、开发、实现工具和方法,达到训练实验技能和积累工程实际应用经验的目的[2-4]。

1 DSP芯片介绍

1.1 DSP介绍

DSP是针对数字信号处理需要而设计的一种可编程的超高速单片计算机系统,是现代电子技术、计算机技术和信号处理技术相结合的产物。在过去的20多年里,DSP芯片的性能得到了很大的改善,软件和开发工具也得到了相应的发展,且价格大幅下降,采用DSP器件来实现数字信号处理系统已成了当前的发展趋势,其在电子信息、通信、软件无线电、自动控制、仪器仪表、信息家电等高科技领域获得了越来越广泛的应用。在数字图像处理领域,DSP也扮演着不可替代的重要角色。为了应对人才市场对DSP相关人才日益增长的需求,越来越多的工科学校开始重视和大力发展DSP教学,因此研究DSP应用教学有着重要的现实意义[5-6]。

1.2 TMS320DM642介绍

TMS320DM642(以下简称为DM642)是TI公司2003年推出的一款针对多媒体处理领域应用的高速DSP处理器,基于C64X核心架构,集成了丰富的外围设备和接口,最高主频达到了720 MHz,并行处理指令的能力可达每个指令周期处理8条32位指令,因此最大指令处理速度为5760MIPS。超长指令字(VLIW)的DM642核具64个32位字长的通用寄存器,8个独立的功能单元(L1,L2,S1,S2,D1;D2,M1和M2),2个寄存器文件(A和B)和2个数据交叉通道(1X和2X)。这些硬件资源对等分配为2个相同的组,每组占用一个数据交叉通道。DM642每周期能够提供4个16位MAC,两级缓存:一级程序缓存L1P是一个128 Kbit的直接映射缓存,另一级数据缓存L1D是一个128 Kbit的双路结合设置缓存。L2缓存器能被配置成映射存储器、高速缓存或者两者结合。DM642的一个很重要的外设就是VideoPort,它可以很方便地读写外部的视频解码器,TI公司提供了针对DM642的视频解码器的驱动程序,用户只需开发应用程序即可,为系统的开发带来极大的方便。DM642的结构框图如图1 所示[7]。

图1 DM642结构图

DM642属于TI公司的C64x系列DSP。DM642 与其他芯片比较,主要有以下几方面的优势:第一,它具有通用性,可以实现很多功能;第二,用户开发自由度更大,支持多种个性化开发,可以满足市场不断提出的新的要求,在第一时间提升产品性能,增强产品的竞争能力;第三,处理能力强,可以在一个DM642上同时实现多路音视频信号的压缩处理,同时为了及时满足应用的需要,还提供了很多视频专用功能,比如视频滤波、高分辨显示输出功能等,使进一步大幅度降低产品的成本成为可能(这一点很重要);第四,开发周期短,实现快速技术更新和产品换代;第五,芯片功耗低,为提高产品的稳定性提供可靠保障。因此我们选择DM642作为核心搭建数字图像处理实验平台,来进行接下来的数字图像处理实验探索[8]。

2 实验平台硬件构成

实验平台采用高性能的DSP芯片DM642作为核心处理器,扩展了SDRAM和Flash存储器,分别用于程序的运行和存储,通过视频编解码器完成视频的采集和输出[9]。集成了CCD、TV、JTAG仿真接口等外设,充分利用了片上资源。系统既可以脱机工作,也可以通过接口进行二次开发。系统硬件组成如图2所示。

图2 系统硬件组成结构图

3 CCS集成开发环境及开发流程

3.1 CCS集成开发环境

软件的质量可以从代码长度、执行速度以及代码是否可重复利用等方面进行评价,而开发工具的好坏对代码的长度、代码的执行速度起着关键的作用。另外,开发工具的功能是否齐全、使用是否方便,在很大程度上影响DSP系统的开发周期以及产品的上市时间。为此1999年,TI公司针对TMS320C6000系列的数字信号处理器,推出了一种CCS(code composer studio),它是一个集成性的DSP软件开发工具。CCS的出现是DSP开发软件的一次革命性的变化。

CCS 主要包含如下功能:

(1) 集成了可直接编写 C、汇编、.H 文件、.cmd 文件等的可视化代码编辑界面;

(2) 集成了包括汇编器、优化 C 编译器、连接器等的代码生成工具;

(3) 集成了各种调试工具,如装入执行代码后,即可查看寄存器、存储器、反汇编、变量窗口等的相应信息,还支持 C 源代码级调试;

(4) 断点工具包括硬件断点、数据空间读/写断点,条件断点等;

(5) 集成了可绘制眼图、星座图、时域/频域波形、图像等的数据图形显示工具,并可自动刷新;

(6) 支持 RTDX(real time data exchange)技术,实现在不中断 DSP 系统运行的情况下与其他应用程序的数据交换;

(7) 提供 DSP/BIOS 工具,增强对代码的实时分析能力、调度程序执行的优先级、方便管理和使用系统资源,减少了开发人员对硬件资源熟悉程度的依赖[10]。

3.2 CCS开发工具

代码生成工具奠定了CCS所提供的开发环境的基础,CCS使用到的主要开发工具如下:

(1) 汇编优化器。汇编优化器允许用户在写线性汇编代码时不用考虑流水线结构和寄存器分配。汇编优化器的输入是线形汇编代码,这种汇编代码没有进行寄存器分配,也不考虑指令流水延迟。汇编优化器分配寄存器利用循环优化技术把线性汇编转化为高度并行和软件流水的汇编代码。

(2) C/C++编译器。C/C++编译器的输入为C/C++源代码,输出为 C6000 汇编源代码。编译器、优化器和交叠工具是 C/C++编译器的组成部分,编译器使用户能一步完成编译、汇编和连接。如果输入文件中有.sa文件,编译器执行汇编优化器。优化器调整和修改代码以提高了C程序的效率。交叠工具把C/C++语句和对应的汇编语句交叠列出。

(3) 汇编器。汇编器把汇编源文件翻译为机器语言目标文件。

(4) 连接器。连接器连接目标文件,生成一个可执行的目标文件。由于连接器生成可执行目标文件,它要完成地址的重分配和解析外部引用,连接器的输入是可重分配地址的目标文件和目标库。

(5) 文档管理器。文档管理器允许用户把一组文件放入一个称为库的文档文件内。此外,文档管理器允许用户删除、替换、提取或添加库中的成员。

(6) 建库工具。用户可以利用建库工具生成自己的运行时支持库。

(7) 十六进制转换工具。十六进制转换工具把通用目标文件格式(COFF)目标文件转化为 TI-Tagged、ASCII-hex、Intel、Mortorala-S 和 Tektronix 等目标文件格式,然后用户就可以把转换后的文件烧写到 Flash 中,实现 Flash 自举。

本系统使用了CCS集成开发环境,程序的编写、编译、链接以及下载调试都在同窗口下完成。程序调试完成后,生成COFF 格式的可执行代码文件(*.out),通过专门的烧写程序可将文件写入Flash中固化;然后通过DSP独立自主的对图像进行处理;最后将处理过后的图片输出到显示屏。

4 数字图像处理实验

本节针对DSP平台做一组数字图像处理实验,并对实验结果给与分析。首先连接好DSP数字图像处理平台与上位机及显示液晶屏;然后打开DSP数字图像处理平台的开关,给其上电并开启液晶屏;设置CCS在硬件仿真下运行,启动CCS,所有的算法,并通过CCS环境下进行编译、连接、下载并运行程序,然后在液晶显示屏观察运行结果[11]。

4.1 灰度图显示

数字图像在计算机上以位图的形式存在,位图是一个矩形点阵,其中每个点称为一个像素,像素是数字图像中的基本单位。一幅图像的大小是由n个明暗度不等的像素组成,数字图像中各个像素所具有的明暗程度是由灰度值所标志,灰度是描述灰度图像内容的最直接的视觉特征,它指黑白图像中点的颜色深度,范围一般从0~255,白色为255,黑色为0,故黑白图片也称灰度图像。灰度图像矩阵元素的取值通常为[0,255],因此其数据类型一般为8位无符号整数(int8),这就是人们通常所说的256级灰度。0表示纯黑色,255表示纯白色,中间的数字从小到大表示由黑到白的过渡色,即可以表示不同的灰度等级。

在CCS中编译取灰度图程序,部分程序如下:

void gray()

{

int i,j;

for(i=intALines;i

{

for(j=intAPixels/2;j

{

*(Uint8 *)(tempCbbuffer +i * (numPixels >> 1) + j) = 0x80;

*(Uint8 *)(tempCrbuffer + i * (numPixels >> 1) + j) = 0x80;

} } }

图3即所得灰度图。

图3 灰度图显示实验结果

4.2 二值化实验

一幅图像包括目标物体、背景,还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化。图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。

于是在得到灰度图像的基础上继续利用DSP平台计算并获取其原始图像的二值化图像。部分程序如下:

void threshold()

{

int i,j;

for(i=intALines;i

{

for(j=intAPixels;j

{

*(Uint8 *)(tempYbuffer + i*numPixels + j) =

*(Uint8 *)(tempYbuffer + i*numPixels + j)

}

}

}

在经过DSP平台处理之后所得的图像如图4所示。

图4 二值化实验结果

4.3 边缘检测实验

图像的边缘是图像的最基本特征。所谓边缘(或边沿)是指其周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。因此,它是图像分割所依赖的重要特征。物体的边缘是由灰度不连续性所反映的。经典的边缘提取方法是考察图像的每个像素在某个邻域内灰度的变化,利用边缘临近一阶或二阶方向导数变化规律,用简单的方法检测边缘,这种方法称为边缘检测局部算子法。

在本次实验里,使用Sobel边缘算子来进行边缘检测。Sobel边缘算子:图5所示的2个卷积核形成了sobel边缘算子,图像中的每个点都用这2个核做卷积,一个核对通常的垂直边缘相应最大,而另一个对水平边缘相应最大,2个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像[12]。

图5 Sobel边缘检测算子

部分程序如下:

/*Sobel边缘检测处理*/

void sobelEdge()

{

int i,j;

int d1,d2,intTemp;

for(i=intALines;i

{

for(j=intAPixels;j

{

d1 = (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + j)) +

(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j-1))) -

2*(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + j)) -

(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j+1)));

d2 = (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j+1))) -

(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j-1))) +

2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) -2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j+1))) -(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j-1)));

intTemp = d1>d2 d1:d2;

if(intTemp<0)

{

intTemp = 0;

}

if(intTemp>255)

{

intTemp = 255;

*(Uint8 *)(tempDisYbuffer + i*numPixels + j) = intTemp;

}

}

}

}

图6就是经过用边缘检测(Sobel边缘算子)处理后的图像。

图6 边缘检测(Sobel边缘算子)实验结果

在数字图像处理的实验教学中,突出强调理论知识和实践的结合,切实使实验课程成为学习和应用之间的纽带,从而有效地提高学生解决问题的综合能力。为此在实验课程中要筛选图像处理中最重要的算法作为实验课程的主要教学内容,涵盖了图像的点运算、图像的几何变换、图像的增强、图像的边缘检测和视频处理等重要部分。除此外,重点培养学生的动手能力,让每个学生都能熟悉DSP实验平台的使用,通过编写调试程序使学生熟练地掌握使用CCS集成开发环境和数字图像处理的DSP编程实现[13-14]。

5 结束语

在本实验平台里,基于CCS开发环境可以促进学生对数字图像处理知识的理解,并通过实践来巩固课堂里学到的知识,让学生对数字信号处理理论知识掌握得更深刻,同时对硬件实验产生很大的兴趣,并看到了自己的不足之处,从而使学生更加努力、认真地学习理论课上的知识。

[1] 李小红.基于DSP图像处理实验系统的开发与应用[J].合肥学院学报, 2009,19(4):38-41.

[2] 贾永红.现代化教学手段在数字图像处理教学中的应用研究[J].测绘通报, 2006(1):62-64.

[3] 刘洋, 刘嘉.数字图像处理课程教学方法研究[J].教研, 2011(8):70-71.

[4] 杨达亮.DSP课程实验教学分析[J].广西大学学报,2007(29):184-186.

[5] 廉小亲,张晓力,方平,等.DSP 技术应用综合实训课程的构建[J].中国现代教育装备,2009(3):116-118.

[6] 刘党辉,沈兰荪.DSP芯片及其在图像技术中的应用[J].测控技术,2001,20(5):16-23.

[7] 刘源,朱善安,叶旭东.基于DM642的嵌入式视频监控系统硬件设计[J].电子器件,2006,26(3):905-908.

[8] 李方慧,王飞.何佩琨,等.TMS320C6000 系列 DSPs 原理与应用[M].北京:电子工业出版社,2003.

[9] 张炜,胡云龙,吴镇扬.DM642的性能及其在视频处理实验中的应用[J].电气电子教学学报,2005,27(5):82-85.

[10] 何伟,陈彬,张玲.DSP/BIOS在基于DM642的视频图像处理中的应用[J].信息与电子工程,2006,4(1):60-62.

[11] 张建平, 戴咏夏.CCS在数字信号处理实验教学中的探究[J].高等理科教育, 2009(1):92-94.

[12] 章世秀,高天武,邹修国.基于CCS的边缘检测算子实验[J].高校实验室工作研究,2012(3):56-57.

[13] 韩智, 张振虹.“数字图像处理”实验课教学改革与实践[J].实验室研究与探索,2008,27(9):102-104.

[14] 田秀玲.DSP应用教学的探索和实践[J].中国电力教育,2010(28):76-77.

猜你喜欢

代码灰度边缘
采用改进导重法的拓扑结构灰度单元过滤技术
创世代码
创世代码
创世代码
创世代码
基于最大加权投影求解的彩色图像灰度化对比度保留算法
一张图看懂边缘计算
基于灰度线性建模的亚像素图像抖动量计算
全彩LED驱动芯片的S-PWM优化
在边缘寻找自我