资源描述:
《灰度图像的锐化处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验五灰度图像的锐化处理一、实验目的1.了解图像锐化的基本原理;2.掌握图像空域锐化处理的方法;3.利用VC编写图像空域锐化处理的程序;4.在微机上调试程序。二、实验原理图像平滑处理可以减弱噪声的影响,但窗口增大后将会产生图像边缘不清的问题。图像在传输和转换过程中,一般来讲,质量都会降低,除了噪声的因素之外,图像一般都要变得模糊一些,这主要因为图像的传输或转换系统的传递函数对高频成分的衰减作用,造成图像的细节轮廓不清晰。图像锐化的作用就是补偿图像的轮廓,增强图像的边缘级灰度跳变部分,使图像较清晰。图像锐化是一种能加强图像轮廓的处
2、理方法,因此,从增强的目的来看它是与图像平滑相反的一类处理,图像锐化同样也可分为频域和空域处理两类实现方法。本实验要求完成空域中图像的锐化处理。1.图像空域锐化处理的方法微分处理可加强高频成分,例如对正弦信号sin(Nx),其微分为余弦函数Ncos(Nx),经微分处理后,信号的频率不变,幅度增大N倍,且频率越高,增幅越大。对图像进行微分处理后:Df/DxG[(x,y)]=Df/DyG[(x,y)]是点(x,y)的梯度,其方向指向f(x,y)最大变化方向。对连续图像:G[(x,y)]=[(Df/Dx)2+(Df/Dy)2]1/2对
3、离散图像:G[(x,y)]常采用下列几种算法:(1)典型的差分算法G[(x,y)]=[[f(x,y)-f(x+1,y)]2+[f(x,y)-f(x,y+1)]2]1/2(2)罗伯茨算法G[(x,y)]=[[f(x,y)-f(x+1,y+1)]2+[f(x+1,y)-f(x,y+1)]2]1/2(3)绝对差算法相对于典型的差分算法和罗伯茨算法有:G[(x,y)]=
4、f(x,y)-f(x+1,y)
5、+
6、f(x,y)-f(x,y+1)
7、G[(x,y)]=
8、f(x,y)-f(x+1,y+1)
9、+
10、f(x+1,y)-f(x,y+1)
11、在实
12、际处理一幅图像时,最后一行(列)梯度的值一般可以用前一行(列)的梯度的值来代替。如果背景与目标都是慢变的,且它们的灰度值相差较大,则用这种基于微分的处理方法可得较好的边界,该方法的缺点是在f(x,y)中所有较平滑的区域经变换处理后就变成了暗区。2.图像空域锐化处理算法流程(1)纵横方向微分运算纵横方向微分运算功能是生成输入图像的纵方向和横方向的微分图像。本程序流程对输入灰度图像f(x,y)在纵方向(df/dx)和横方向(df/dy)进行微分,从而求得输出图像g(x,y)。在进行数字处理时,微分用差分近似,并按下式求得:纵方向:g
13、(x,y)=f(x,y)-f(x-1,y);横方向:g(x,y)=f(x,y)-f(x1,y-1)。进行纵方向微分还是横方向微分可由输入参数选择(1:纵方向微分,0:横方向微分)。流程图如图5-1所示,N为方向选择参数。图5-1纵横方向微分运算(2)双方向一次微分运算双方向一次微分运算完成对输入图像f(x,y)的纵横两个方向的一次微分图像。本程序对灰度图像f(x,y)在纵方向和横方向两个方向进行微分,程序中同样是用差分来求得微分。流程图如图5-2所示。本算法按典型的差分算法来求得输出图像g(x,y):g(x,y)=[[f(x,y
14、)-f(x+1,y)]2+[f(x,y)-f(x,y+1)]2]1/2图5-2双方向一次微分运算三、实验前准备1.预习本实验中关于图像锐化处理的基本原理;2.了解本实验的目的和实验内容。四、实验内容1.根据图像空域锐化处理的方法和流程,利用VC编写图像双方向一次微分运算(典型的差分算法)的程序;2.给定一幅BMP图像,用所编程序对给定图像进行操作,对图像处理后另存为(*.bmp)文件,并用Photoshop验证所编程序的正确性;3.本实验要求完成图像双方向一次微分运算,如有时间再做纵横方向微分运算。五、实验报告要求1.总结图像锐
15、化处理的原理和方法;2.总结对图像双方向一次微分运算编程的过程;3.总结用Photoshop验证所编写程序的过程。4.对实验结果进行分析。六、参考程序在BIBAPI.h中声明梯度锐化函数BOOLWINAPIGradSharp(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,BYTEbThre);,在DIBAPI.cpp中定义如下BOOLWINAPIGradSharp(LPSTRlpDIBBits,LONGlWidth,LONGlHeight){//梯度锐化unsignedchar*lpSrc1,*lp
16、Src2,*lpSrc;LONGi;LONGj;LONGlLineBytes;LONGfTemp;LONGfBiex=20;lLineBytes=WIDTHBYTES(lWidth*8);for(i=0;i