1、任课教师:马文娟数字图像分析与艺术化处理(2012-2013 学年第 2 学期)实验报告学号:2011329700132姓名: 班级:数字媒体与技术 11(1)实验二 图像的空间域增强实验项目名称:图像的空间域增强实验项目性质:设计性实验所属课程名称:数字图像分析与艺术化处理实验计划学时:2一. 实验目的(1) 进一步理解图像的灰度均衡、图像平滑和图像锐化等空间域增强方法的原理。(2) 了解图像灰度均衡、图像平滑和图像锐化的效果和作用。(3) 掌握图像模板运算的流程。二. 实验内容和要求编程实现图像的灰度均衡、一种平滑处理和梯度锐化。三. 实验主要仪器设备和材料计算机,VS2012四. 实验原
2、理1、 图像的灰度均衡为了改变图像整体偏暗,或整体偏亮,或灰度层次不丰富的情况,可以将原图像的直方图通过变换函数修正为均匀的直方图,使直方图不再偏于低端,也不再偏于高端,而是变成比较均匀的分布,这种技术叫直方图均衡化。直方图是用来表达一幅图像灰度级分布情况的统计图表。直方图的横坐标是灰度,一般用 r 表示,纵坐标是灰度值为 ri 的像素个数或出现这个灰度值的概率 pr(ri)。其中()rii灰 度 为 r的 像 素 个 数图 像 像 素 总 个 数10()1Lriip式中 k 为一幅图像对应的灰度级数,k=0,1,2,L-1,这里,L 为灰度级的数目。对数字图像来说,灰度级看成是离散的,第 i
3、 个灰度级 ri 出现的频数用 ni表示,该灰度级像素对应的概率值 pr(ri)为:()irinpn 是帧内像素总数。可写出数字图像的变换函数表达式: 11r00()P()kkiiii inSTr式中,k 为灰度级数。此时,S i 是0,1区间内的值,将其变换到0,255区间,然后将 ri 对应的像素的灰度值变为 Si。2、图像平滑众所周知,实际获得的图像在形成、传输、接收和处理的过程中,不可避免地存在着外部和内部的噪声干扰。噪声恶化了图像质量,使图像模糊,给分析带来困难。因此,去除噪声,恢复原始图像时图像处理中的一个重要内容。消除图像噪声的工作称之为图像平滑或滤波。图像平滑方法包括空域法和频
4、域法两大类。在空域法中,图像平滑常用的方法是采用均值滤波或中值滤波。对于均值滤波,它是采用一个有奇数点的滑动窗口在图像上滑动,将窗口中心点对应的图像像素点的灰度值用窗口内的各个点的灰度值的平均值代替,在取均值过程中,如果窗口规定了各个像素点所占的权重,也就是各个像素点的系数,则称为加权均值滤波。对于中值滤波,窗口中心点所对应像素的灰度值用窗口内所有像素的中间值代替。实现均值或中值滤波时,为了简便编程工作,可以定义一个 n*n 的模板数组。另外,读者需要注意一点,在用窗口扫描图像过程中,对于图像四个边缘的像素点,可以不处理;也可以用灰度值为“0“的像素点扩展图像的边缘。3、图象锐化锐化处理的主要
5、目的是突出图像中的细节或者增强被模糊了的细节,这种模糊不是由于错误操作,就是特殊图像获取方法的固有影响。图像均值滤波器可以使图像变模糊,是因为均值处理与积分相类似,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。常常采用基于一阶或二阶微分的锐化滤波器实现图像的锐化处理。一阶微分是通过梯度法来实现的。对于图像 f(i,j),它在点(i,j)处的梯度是一个矢量,定义为: 122(,)()()ffGfijij利用差分法近似上述公式,得到: 12 2(,)(,)(1,)(,)(,)fijfijfijfijfij为了便于编程和提高运算,可进一步简化为: (,)(,)(,)(,)(,1)Gfij
6、fijfijfijfij利用差分运算时,图像的第一行和第一列的像素的梯度无法求得,一般用后一行或后一列的梯度值近似代替。微分运算可以增强图像高频分量(边缘等细节) ,但是仅仅微分处理后的图像非常暗,效果不理想,因此既要增强图像边缘,又要保持目标物体的内部灰度不变,常采用给边缘规定一个特定的灰度级的方法来完成梯度锐化处理。公式为: ,(,)(,)(),aLGfijTGijfij其 他La 为一指定的灰度值,它将边界的灰度值统一化,这样可以使其边界更加清晰明显。该方法基本上不破坏图像的背景,又可找到边缘,并根据需要增强边缘。基于二阶微分的锐化滤波器,即拉普拉斯增强算子。一个二元图像函数 f(x,
7、y)的拉普拉斯变换定义为: 22(1,)(,)(,1)(,)4(,)fxyffxfxyfxyfxy由于拉普拉斯是一种微分算子,它的应用强调图像中灰度的突变及降低灰度慢变化的区域,这将产生一幅把图像中的浅灰色边线和突变点叠加到暗背景中的图像。将原始图像和拉普拉斯图像叠加在一起的简单方法可以保护拉普拉斯锐化处理的效果,同时又能复原背景信息。这种方法可表示为:。2(,)(,)(,)fxyfxyg中中五. 实验设计步骤1、 图像的灰度均衡步骤一、按照实验一中的方法在“图像操作”菜单栏中新建“灰度均衡”菜单项。步骤二、添加“灰度均衡”的响应函数。步骤三、在响应函数中添加实现图像灰度均衡的功能代码。(1)
8、 统计直方图数组,用一个数组 p 记录 pi;(2) i 从 1 开始,令 Si=Si-1+pi,S0=p0 ;(3) 一个数组 L 记录新的 S 索引值,即令 Li=Si*(256-1);(4) 依次循环每一个像素,取原图的像素值作为数组 L 的下标值,取该下标对应的数组值为均衡化之后的像素值。步骤四、调试运行。2、 平滑处理步骤一、按照实验一中的方法在“图像操作”菜单栏中新建“平滑处理”菜单项。步骤二、添加“平滑处理”的响应函数。步骤三、在响应函数中添加实现图像平滑的功能代码,要求采用 33 的均值滤波器进行平滑,图像边界可不处理。步骤四、调试运行。3、锐化处理 梯度法步骤一、按照实验一中
9、的方法在“图像操作”菜单栏中新建“锐化处理”菜单项。步骤二、添加“锐化处理”的响应函数。步骤三、在响应函数中添加实现图像锐化的功能代码。(1) 获得原图像的首地址及图像的高和宽;(2) 开辟一块内存缓冲区,并初始化为 255;(3) 计算图像的像素的梯度,将结果保存在内存缓冲区;(4) 比较像素的梯度是否大于 30,是则将梯度值加 100,否则恢复该像素原来的灰度值,如果梯度加 100 大于 255,将其置为 255;(5) 将内存中的数据复制到图像数据区。步骤四、调试运行。六. 实验代码1.灰度均衡void CDIB:ZhiFangTu(float *tongji)int i; / 循环变量
10、int j;int huidu256; / 灰度计数int wide,height; /原图长、宽wide=this-GetDIBWidth(); height=this-GetDIBHeight();memset(huidu,0,sizeof(huidu); / 变量初始化LPBYTE temp1=new BYTEwide*height; /新图像缓冲区memcpy(temp1,m_pDIBData,wide*height ); /拷贝原图像到缓存图像for (j = 0; j GetDIBWidth(); /DIB 的宽度height=this-GetDIBHeight(); / DIB
11、的高度if(bih.biBitCountm_pDIBData, p_data, height*wide);2.图像平滑void CDIB:ThreeThreeAver()BYTE *p_data; /原图数据区指针int wide,height; /原图长、宽p_data = this-m_pDIBData;/取得原图的数据区指针wide = this-GetDIBWidth(); /取得原图的数据区宽height = this-GetDIBHeight(); /取得原图的数据区高BYTE* p_temp = new BYTEwide*height;int size = wide*height
12、;memset(p_temp, 255, size);/用 3*3 屏蔽窗口的 8 近邻均值进行滤波for(int j = 1; j m_pDIBData, p_temp, wide*height);delete p_temp;3.图像锐化void CDIB:RuiHuaChuLi()BYTE *p_data; /原图数据区指针int wide,height; /原图长、宽p_data = this-m_pDIBData;/取得原图的数据区指针wide = this-GetDIBWidth();height = this-GetDIBHeight();LPBYTE p_temp = new BYTE wide*height; /开辟图像一缓冲区memset(p_temp, 255, wide*height); /初始化为 255int temp;for(int j = 1; j =30)if(temp+100)255) p_tempwide*j+i=255;else p_tempwide*j+i=temp+100;if (tempm_pDIBData,p_temp,wide*height); /将缓冲区中的图像复制回原图数据区delete p_temp; /删除缓冲区七. 实验结果原始图像:灰度均衡:图像模糊:图像锐化:八. 实验心得: