利用DSP实现图像的灰度处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验17、利用DSP 实现图像的灰度处理
一、 实验目的
1. 了解图像灰度处理基本原理和方法。
2. 熟悉视频采集与显示的运行过程。
3. 掌握图像数据在内存中的存储方式,掌握内存地址与屏幕坐标的对应关系。
4. 掌握利用DM642实现图像的灰度处理的方法。
二、 实验内容
在实验16的基础上,自行设计图像灰度处理的算法程序,加入到视频显示程序中。要求实现灰度显示的区域为一个带黑框的矩形部分,该矩形在显示器屏幕中的位置为:X 坐标范围(190~530),Y 坐标范围(118~458);黑色边框为6个像素宽度。如图1所示。
图1 视频显示示意图 三、实验原理
1.灰度处理算法
灰度图(Gray-scale Image )是指将图像按照灰度等级的数目来划分后形成的图像。灰度模式最多使用256级灰度来表现图像,图像中的每一个像素有一个0~255之间的亮度值,0表示黑色,255表示白色。
在RGB 色彩空间中,当R 、G 、B 各分量相等时,即呈现为灰度图。
对YUV 编码的图像来说,转换为RGB 的表达式如下:
R=Y+1.370705*(V-0.5)
G=Y-0.698001*(V-0.5)-0.337633*(U-0.5)
灰度显示区域 X Y
184 184 112 112
(719,575)
彩色显示区域 6
B=Y+1.732446*(U-0.5)
从上式可以很容易得到,当V=U=0.5时,R=G=B。由于本实验中Y、U、V采用8位无符号数格式,所以0.5转换为8位无符号数格式即为128(0x80)。
因此,对YUV图像来说,将Cb、Cr分量设置为0x80,Y分量保留,即能实现灰度图。
2.数据在内存中的存放
为了保证DSP的数据处理速度,我们应在内存中开辟三个数据缓冲区:采集缓冲区、数据处理缓冲区、显示缓冲区。
我们在主程序中已经定义了这三个数据缓冲区,每个缓冲区的大小均为一帧图像的大小(720*576,每帧576行,每行720个像素)。
其中,采集缓冲区为:capChaAYSpace[720*576]、capChaACbSpace[360*576]、capChaACrSpace[360*576]
数据处理缓冲区为:
tempYbuffer[720*576]、tempCbbuffer[360*576]、tempCrbuffer[360*576]
显示缓冲区为:
disChaAYSpace[720*576]、disChaACbSpace[360*576]、disChaACrSpace[360*576]
从以上定义可以看出,每个数据缓冲区都包含了3个子缓冲区,分别存放Y、Cr、Cb,这是因为VP口自动地将解码器中的BT.656数据流分解为了Y、Cr、Cb三个单独数据流。同时,由于解码器中BT.656数据流采用了YUV4:2:2格式,数据流顺序为Cb-Y-Cr-Y-Cb-Y-Cr-Y-…,即每两个Y分量公用一个Cb和Cr分量。所以,Cb和Cr的缓冲区大小是Y的一半。
此外,还要特别提醒的是,图像的采集是分奇偶场采集的,即一帧图像包含两场数据。采集时,先采集奇场,奇场的数据存放在数据缓冲区的前半部,接下来采集的偶场数据存放在缓冲区的后半部。
3.屏幕坐标与内存地址的对应关系
在数据处理时,应特别注意数据显示在屏幕上的坐标与它们在内存中的地址之间的关系。
由于图像的采集分为奇偶场采集,因此对像素处理时一般需要分奇行和偶数行处理。注意:采集奇场图像时,对应的是偶数行;采集偶场图像时,对应的是奇数行。
假设某个数据显示在屏幕上的坐标为(PosX,PosY),其在某个数据缓冲区的地址为
YAddr、CbAddr、CrAddr,而该数据缓冲区的首地址为已知的YSpace、CbSpace、CrSpace,则屏幕坐标与内存地址之间的关系可以表示为:
当奇数场时,即PosY为偶数:
YAddr=(PosY>>1)*720+PosX+YSpace
CbAddr=(PosY>>1)*360+(PosX>>1)+CbSpace
CrAddr=(PosY>>1)*360+(PosX>>1)+CrSpace
当偶数场时,即PosY为奇数:
YAddr=((PosY>>1)+288)*720+PosX+YSpcace
CbAddr=((PosY>>1) +288)*360+(PosX>>1)+CbSpace
CrAddr=((PosY>>1) +288)*360+(PosX>>1)+CrSpace
四、程序设计
实验16已经给出了完整的图像采集与显示程序,本实验只需要将灰度处理算法子程序嵌入到dm642main.c中即可,而其他程序可以不作改动。
在视频采集时,图像数据通过EDMA从VP采集口的FIFO搬移到内存中,应存放在采集缓冲区capChaA*Space(对应三个分量Y、Cb、Cr,以下同);当对图像进行处理(如灰度显示、图像缩放等)时,需将采集缓冲区的图像数据用CSL函数DA T_copy复制至数据处理缓冲区temp*buffer,所有对图像的处理都应是对数据处理缓冲区中的数据进行相应运算;图像处理完毕,再次用CSL函数DAT_copy将数据转移至显示缓冲区disChaA*Space,最后由EDMA将显示缓冲区图像数据搬移到VP显示口的FIFO,进行显示。
灰度处理可分为两个子函数:一个是画黑色矩形框的子函数drawRectangle,另一个是实现灰度的子函数removeColor。这两个函数要求同学自行设计代码,注意奇偶场数据的分开处理。
五、实验设备
1.装有CCS3.3软件的PC计算机。
2.SEED-VPM642开发板。
3.SEED-XDS510PLUS仿真器。
4.摄像头。