实验截图:
- 均值滤波和中值滤波处理后的结果
实验代码:
代码(1):
img=imread('microchip.png');
img=rgb2gray(img);
subplot(1,3,1);
imshow(img);
title('原图');img_ave=fspecial('average',[3 3]);
img_f=filter2(img_ave,img)/512;
subplot(1,3,2);
imshow(img_f);
title('均值滤波处理后');img_med = medfilt2(img,[3,3]);
subplot(1,3,3);
imshow(img_med);
title('中值滤波处理后');
代码(2):
img = imread('microchip.png');
ratio = 3;%设定滤波系数为3
[m,n,c] = size(img);%得到高宽和通道数
subplot(1,3,1);
imshow(img);
title('原图');
img_ave = img;
for k = 1:cfor i = 1:m - ratio + 1for j = 1:n - ratio + 1img_ave(i,j,k) = sum(sum(img_ave(i:i+ratio-1,j:j+ratio-1,k))) ./ (ratio * ratio);%根据滤波系数开始求平均,得出当前像素点新值 ,这里运用了sum函数
endend
end
subplot(1,3,2);
imshow(img_ave);
title('均值滤波处理后的图片');
img_mid = img;
for k = 1:cfor i = 1:m - ratio + 1for j = 1:n - ratio + 1img_mid(i,j,k) = median(median(img_mid(i:i+ratio-1,j:j+ratio-1,k)));%根据滤波系数开始得出当前像素点新中位值,这里运用了median函数 endend
end
subplot(1,3,3);
imshow(img_mid);
title('中值滤波处理后的图片');
结果分析:
-
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m m为该模板中包含当前像素在内的像素总个数。
-
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为33,55区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。