资源描述:
《数字图像处理实验03图像的平滑滤波》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、数字图像处理实验实验三图像的平滑滤波一、实验目的图像平滑主要目的是减少噪声。噪声有很多种类,不同的噪声有不同的抑制措施。本实验要求用平滑线性滤波和中值滤波2种最典型、最常用的处理算法进行程序设计,学习如何对已被噪声污染的图像进行“净化”。通过平滑处理,对结果图像加以比较,得出自己的实验结论。二、实验内容1.编写并调试窗口尺寸为m×m的平滑滤波函数。2.编写并调试窗口尺寸为m×m的中值滤波函数。三、实验原理图像平滑滤波可分为空间域和频率域两种方法。在空间域内可以用邻域处理来减少噪声。在频率域,因为噪声频谱多在高频段,可以
2、采用各种形式的低通滤波办法来减少噪声。空间域邻域处理包括:(1)定义中心点(x,y);(2)仅对预先定义的以(x,y)为中心点的邻域内的像素进行运算;(3)令运算结果为该点处处理的响应;(4)对图像中的每一点重复此步骤。移动中心点会产生新的邻域,而每个邻域对应于输入图像上的一个像素。通常邻域是远比图像尺寸小的一规则形状,如正方形m×m或近似表示圆等形状的多边形。若邻域的大小为m×n,则总共需要mn个系数。这些系数排列为一个矩阵,我们称其为滤波器、掩模、滤波掩模、模板或窗口。对于一个大小为m×n的模板,假定m=2a+1且n=
3、2b+1,其中a和b为非负整数。所有假设都是基于模板的大小应均为奇数的原则,处理奇数尺寸的模板会更加直观,因为它们都有唯一的一个中心点。若对邻域中像素的计算为线性运算时,则此运算称为线性空间滤波(也称为空间卷积);否则,我们称此运算为非线性空间滤波。1.平滑线性滤波空间域图像平滑线性滤波器是一种最常用的线性低通滤波器,其处理方法是在待处理图像f(x,y)中逐点地移动模板,在每个点(x,y)处的响应是模板系数与直接在模板下的相应像素的乘积之和,作为处理后图像g(x,y)的像素值。一般来说,在M×N的图像f上,用m×n大小的滤
4、波器模板进行线性滤波由下式给出:1abg(x,y)=∑∑f(x+m,y+n)h(m,n)(3.1)m=−−an=b式中:x=0,1,2,...,M−1和y=0,1,2,...,N−1a=(m−1)/2和b=(n−1)/2为了得到一幅完整的经过滤波处理的图像,必须对x=0,1,2,...,M−1和y=0,1,2,...,N−1依次应用公式(3.1)。这样,就保证了对图像中的所有像素进行了处理。下面是几种常用的用于噪声平滑的滤波器模板:⎡111⎤⎡111⎤⎡121⎤1⎢⎥1⎢⎥1⎢⎥h=111h=121h=24219⎢⎥210
5、⎢⎥316⎢⎥⎢⎣111⎥⎦⎢⎣111⎥⎦⎢⎣121⎥⎦(a)(b)(c)图1.53×3平滑滤波器模板。每一个模板前边的乘数等于它的系数值之和,以计算平均值在图1.5中,(a)是最简单的均值滤波器模板,将均值滤波器加以修正,可以得到加权平均滤波器模板(b)和(c)。线性空间滤波的机理如图1.6所示。2图像原点y模板hh(-1,-1)h(-1,0)h(-1,1)图像f(x,y)h(0,-1)h(0,0)h(0,1)xh(1,-1)h(1,0)h(1,1)f(x-1,y-1)f(x-1,y)f(x-1,y+1)f(x,y-1)
6、f(x,y)f(x,y+1)f(x+1,y-1)f(x+1,y)f(x+1,y+1图1.6空间域滤波的机理。显示了一个3×3模板和其覆盖的图像部分开始定义均值滤波器窗口hones()循环i,M循环j,N由平滑滤波公式(3.1)计算g(x,y)结束图1.7均值滤波编程框图2.中值滤波中值滤波器是一种非线性平滑滤波器。其基本原理是用一个含有奇数点的滑动窗口,将窗口中心像素的值用窗口内各像素排序后的中位象素(即排序后位置处于正中的那个像素值)来代替。g(i,j)=MED(i,j)(3.2)3F(i,j)S图1.8中值滤波原理设图
7、像为F,窗口为S,如上图所示,窗口内的象素为S(0,0)、S(0,m−1)、S(1,0)、…S(m−1,m−1),其中MED(i,j)为以(i,j)为中心的滤波窗口内象素的中值。窗口内象素的中值MED使(m×m−1)/2个象素小于等于MED,(m×m−1)/2个象素大于等于MED。(计算中值要求m×m为奇数)。经过中值后,图像中的随机噪声将被有效地消除。这是因为邻域中亮度值发生随机突变的象素,经过排序后,要么排在队列的队首,要么排在队列的队尾,而中心象素的新值是取自队列中位的那个象素值。开始循环i,M循环j,NC=1循环i
8、1,a循环j1,awinbuf(c)=oldbuf(i+i1,j+j1)c=c+1newbuf(i,j)=seekmid()结束图1.9中值滤波编程框图四、实验方法及程序1.均值滤波编程4根据编程参考框图1.7,编写相关函数:functionnewbuf=AverageFilter(oldbuf,M,N