图像平滑与锐化Word文档下载推荐.docx
《图像平滑与锐化Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像平滑与锐化Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
即在图像上对待处理的像素给一个模板,该模板包括了其周围的邻近像素,将模板中的全体像素的均值来替代原来的像素值。
(其中,x,y=0,1,…,N-1;
S为
点的领域中心点的坐标集合(不包括点
);
M是S内坐标点的总数)。
所用的领域半径越大,则平均后图像的模糊程度也越大。
如果图像中的噪声是随机不相关的加性噪声,窗口内各点的噪声是独立等分布的,那么经过上述平滑后,性噪比可以提高
倍,但它的主要缺点是在降低图像噪声的同时使图像产生模糊,特别是在边缘和细节处,领域越大,模糊越厉害。
中值滤波法
如果既要消除噪声又要保持图像的细节可以使用中值滤波器,它是一种非线性平滑滤波器。
中值滤波在一定条件下可以克服线性滤波器带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。
但对于一些细节多,特别是点、线、尖顶多的图像不宜采用中值滤波。
中值滤波的算法步骤为:
将模板在图像范围内漫游,并将模板中心与图中某个像素位置重合
读取模板中各对应像素的灰度值
将得到的灰度值从小到大排成一列
找到这些值中排在中间的那个值
将这个中间值赋给对应模板中心位置的像素。
中值滤波器的主要功能是使与周围像素灰度级相差比较大的像素取与周围像素灰度值接近的值,从而消除孤立噪声点。
由于这种方法并不是简单地取平均值,所以产生的模糊度较小。
图像锐化
图像锐化的目的是使模糊的图像变得更加清晰。
图像模糊的实质是图像受到平均或积分运算,因此为实现图像的锐化,必须用它的逆运算,如微分法,来使图像清晰化。
从频谱角度来看,图像模糊的实质是其高频分量受到了衰减。
能够进行锐化的图像必须要有较高的信噪比,否则,锐化后的图像信噪比反而更低,从而使噪声的增加比信号还要多,因此,一般是先滤除或抑制噪声后再进行锐化处理。
(1)梯度法:
(矢量
指向函数
最大变化率的方向;
矢量
的幅度表示在
的方向上每单位距离
的最大增加率,
的幅度定义为
)。
对于数字图像,微分运算一般用差分来代替。
常用的差分形式有两种,分别表示幅度为:
。
利用差分运算时,图像的最后一行和最后一列的像素的梯度无法求得,一般用前一行和前一列的梯度值近似代替。
由梯度的计算可知,在图像中灰度变化较大的的边缘区域其梯度值大,在图像灰度变化平缓的区域其梯度值较小,而在灰度均匀区域其梯度值为零。
(2)Sobel算子
由于引入平均,对图像中随机噪声有一定的平滑作用,边缘两侧元素得到加强,故边缘显得粗而亮。
三、实验内容及步骤
1、打开菜单编辑器,在主菜单中添加一菜单项,选中弹出式选项,修改菜单名称为“图像平滑”。
然后建立一下级菜单,打开属性给菜单一个ID号,修改标明为“均值滤波”,打开类向导,建立消息响应函数,实现图像均值滤波。
添加的函数代码:
voidCGsmView:
:
OnJunzhilvbo()
{
//TODO:
Addyourcommandhandlercodehere
longw,h;
longi,j;
w=m_DibHead->
biWidth;
h=m_DibHead->
biHeight;
unsignedchar*lpdst=newunsignedchar[w*h];
memset(lpdst,0,w*h);
for(i=1;
i<
h-1;
i++)
for(j=1;
j<
w-1;
j++)
inttemp=*(m_Image+i*w-w+j-1)+*(m_Image+i*w-w+j)+*(m_Image+i*w-w+j+1)+
*(m_Image+i*w+j-1)+*(m_Image+i*w+j)+*(m_Image+i*w+j+1)+
*(m_Image+i*w+w+j-1)+*(m_Image+i*w+w+j)+*(m_Image+i*w+w+j+1);
temp/=9;
*(lpdst+i*w+j)=(unsignedchar)(temp);
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
delete[]lpdst;
滤波前后
添加一个:
mysort函数
在下拉菜单再建立一个新的菜单,打开属性给菜单一个ID号,修改标明为“中值滤波”,打开类向导,建立消息响应函数,实现图像中值滤波。
mysort(inta[],intn)
inti,j;
inttemp;
for(i=0;
n;
for(j=0;
n-i;
if(a[j]>
a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
OnZhongzhilvbo()
longw,h;
longi,j;
w=m_DibHead->
h=m_DibHead->
unsignedchar*lpdst=newunsignedchar[w*h];
memset(lpdst,0,w*h);
intarr[9]={0};
for(i=1;
for(j=1;
{
intm,n;
for(m=-3/2;
m<
=3/2;
m++)
for(n=-3/2;
n<
n++)
{
arr[(m+3/2)*3+(n+3/2)]=*(m_Image+(i+m)*w+j+n);
}
mysort(arr,9);
*(lpdst+i*w+j)=arr[3*3/2];
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
中值滤波前后
2、打开菜单编辑器,在主菜单中添加一菜单项,选中弹出式选项,修改菜单名称为“图像锐化”。
然后建立一下级菜单,打开属性给菜单一个ID号,修改标明为“梯度法”,打开类向导,建立消息响应函数,实现图像锐化。
OnTidu()
*(lpdst+i*w+j)=3*(abs(*(m_Image+i*w+j)-*(m_Image+i*w+w+j+1))+
abs(*(m_Image+i*w+w+j)-*(m_Image+i*w+j+1)));
memcpy(m_Image,lpdst,w*h);
Invalidate();
锐化前后对比
在下拉菜单再建立一个新的菜单,打开属性给菜单一个ID号,修改标明为“sobel算法”,打开类向导,建立消息响应函数,实现图像锐化。
OnSobel()
intsx,sy;
sx=abs(*(m_Image+i*w+w+j-1)-*(m_Image+i*w-w+j-1)+
2*(*(m_Image+i*w+w+j)-*(m_Image+i*w-w+j))+
*(m_Image+i*w+w+j+1)-*(m_Image+i*w-w+j+1));
sy=abs(*(m_Image+i*w-w+j+1)-*(m_Image+i*w-w+j-1)+
2*(*(m_Image+i*w+j+1)-*(m_Image+i*w+j-1))+
*(m_Image+i*w+w+j+1)-*(m_Image+i*w+w+j-1));
*(lpdst+i*w+j)=(sx+sy);
思考题
1、说明各种平滑方法对图像的操作结果有什么不同?
均值滤波基本思想是用几个像素灰度的平均值来代替每个像素的灰度,对抑制噪声是有效,但会产生模糊效应。
中值滤波的特点是保护图象边缘的同时去除噪声。
2、说明哪一种锐化方法最好?
为什么?
Sobel算子法的锐化方法最好,因为在锐化的方法中,Sobel算子法由于引入平均,对图像中随机噪声有一定的平滑作用,边缘两侧元素得到加强,故边缘显得粗而亮。
相比其它的方法,它对图形的边缘和灰度跳变部分有很好的加强效果。