中值和均值滤波论文(附代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MATLAB 的带噪图像的中值和均值滤波
摘要:图像是一种重要的信息源,通过图像处理可以帮助人们了解信息的内涵。本文将纯净的图像加入椒盐噪声,然后采用中值和均值滤波的方法对其进行去噪。在图像处理中,中值和均值滤波对滤除脉冲干扰噪声都很有效。文章阐述了中值和均值滤波的原理、算法以及在图像处理中的应用。MATLAB 是一种高效的工程计算语言,在数据处理、图像处理、神经网络、小波分析等方面都有广泛的应用。 关键词:图像,中值滤波,均值滤波,去噪,MATLAB
1. 引言
20世纪20年代,图像处理首次得到应用。上个世纪60年代中期,随着计算机科学的发展和计算机的普及,图像处理得到广泛的应用。60年代末期,图像处理技术不断完善,逐渐成为一个新兴的学科。图像处理中输入的是质量低的图像,输出的是改善质量后的图像。
为了改善图像质量,从图像中提取有效信息,必须对图像进行去噪预处理。根据噪声频谱分布的规律和统计特征以及图像的特点,出现了多种多样的去噪方法。经典的去噪方法有:空域合成法,频域合成法和最优合成法等,与之适应的出现了许多应用方法,如均值滤波器,中值滤波器,低通滤波器,维纳滤波器,最小失真法等。这些方法的广泛应用,促进数字信号处理的极大发展,显著提高了图像质量。
2. 中值滤波
中值滤波是一种典型的低通滤波器,属于非线性滤波技术,它的目的是保护图像边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y )为中心的小窗口内的所有象素的灰度按从大到小的顺序排列,若窗口中的象素为奇数个,则将中间值作为(x ,y)处的灰度值。若窗口中的象素为偶数个,则取两个中间值的平均值作为(x ,y)处的灰度值。中值滤波对去除椒盐噪声很有效。中值滤波器的缺点是对所有象素点采用一致的处理,在滤除噪声的同时有可能改变真正象素点的值,引入误差,损坏图像的边缘和细节。该算法对高斯噪声和均匀分布噪声就束手无策。
设有一个一维序列1f ,2f ,…,n f ,取窗口长度为m(m 为奇数),对此序列
进行中值滤波,就是从输入序列中相继抽出m 个数,v i f -,…,1-i f ,…,1f ,…,1+i f ,…,v i f +,其中i 为窗口的中心位置,2
1-=m v ,再将这m 个点按其数值大小排列,取其序号为正中间的那作为输出。用数学公式表示为: {}v i i v i i f f f Med Y +-=,,,, 21,-=
∈m v Z i (2.1) 例如:有一个序列为{0,3,4,0,7},则中值滤波为重新排序后的序列{0,0,3,4,7}中间的值为3。此例若用平均滤波,窗口也是取5,那么平均滤波输出为()8.25
70430=++++。因此平均滤波的一般输出为: ()m f f f f Z v i i v i v i i ++--+++++= 1 Z i ∈ (2.2)
对于二维序列{}ij X 进行中值滤波时,滤波窗口也是二维的,但这种二维窗口
可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维数据的中值滤波可以表示为:
为滤波窗口A X Med Y ij A
j i },{,= (2.3) 在实际使用窗口时,窗口的尺寸一般先用33⨯再取55⨯逐渐增大,直到其滤波效果满意为止。对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗口为宜,对于包含尖顶角物体的图像,适宜用十字形窗口。使用二维中值滤波最值得注意的是保持图像中有效的细线状物体。与平均滤波器相比,中值滤波器从总体上来说,能够较好地保留原图像中的跃变部分。
3. 均值滤波
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。
邻域平均法是一种局部空间域处理的算法。设一幅图像f(x,y)为N ×N 的阵列,处理后
的图像为g(x,y),它的每个像素的灰度级由包含(x,y)领域的几个像素的灰度级的平均值所
决定,即用下式得到处理后的图像:
(3.1)
式中x,y=0,l,2,…,N-1;S 是以(x,y)为中心的邻域的集合,M 是S 内坐标点的总数。图像邻域平均法的处理效果与所用的邻域半径有关。半径愈大,则图像的模糊程度也度大。外,图像邻域平均算法简单,计算速度快,但它的主要缺点是在降低噪声的同时使图像产生模糊,特别在边沿和细节处,邻域越大,模糊越厉害。
4. 算法流程
本文给定的图像为二维信号,在信号中加入指定的椒盐噪声,然后利用中值滤波进行去噪。虽然有关中值滤波的函数是在matlab 函数库中已经提供,但在图像处理中利用中值滤波去除图像中的椒盐噪声噪声却是一种有效的方法,利用中值和均值滤波函数去除图像中的噪声过程如下:
(1)使用imread()读入原始的彩色图像。
(2)因为使用中值滤波器只能对灰度图像进行处理,所以利用rgb2gray()将彩色图像转化为灰度图像。
(3)用imnoise()在灰度图像中加入椒盐噪声。
(4)根据滤波原理编写算法进行中值和均值滤波,并在matlab 环境下运行。
相应的MATLAB 主程序如下:
clear all;
close all;
clc;
a = imread('D:\my zone\download\滤波经典.png');%读取图像
b = rgb2gray(a); %转化为灰度图像
%给图像加入噪声
I = imnoise(b,'salt & pepper')%椒盐噪声
%扩展矩阵,生成待处理矩阵
∑∈=
S j i j i f M y x g ),(),(1),(
n = 3;%模板阶数
m = (n-1)/2;
[p,q] = size(I);
PI = zeros(p+2*m,q+2*m);%待处理矩阵for i = 1:p
for j = 1:q
PI(i+m,j+m) = I(i,j);
end
end
for i = 1:p
for ii = 1:m
PI(i+m,ii) = I(i,1);
PI(i+m,q+m+ii) = I(i,q);
end
end
for j = 1:q
for jj = 1:m
PI(jj,j+m) = I(1,j);
PI(p+m+jj,j+m) = I(p,j);
end
end
for ii = 1:m
for jj = 1:m
PI(ii,jj) = I(1,1);
PI(q+m+ii,jj) = I(p,1);
PI(ii,p+m+jj) = I(1,q);
PI(q+m+ii,p+m+jj) = I(p,q); end
end
%中值滤波&均值滤波