空域滤波之中值滤波

中值滤波器是一种非线性平滑滤波器,他的主要功能是让与周围像素灰度值的差比较大的像素改变,并且与周围像素相近的值,从而消除孤立的噪声点。他的主要步骤如下:

(1)将模板在图像中移动,并将模板中心与图像中的某个像素位置重合

(2)读取模板下各对应像素的灰度值

(3)将这些灰度值从小到大排成一列

(4)找出这些值里排在中间的一个

(5)将这些值赋值给对应模板中心位置的像素

对应程序如下:

clear
%读入原始图像,添加椒盐噪声,并显示
A=imread('pic8.jpg');
A=imnoise(A,'salt & pepper',0.04);
subplot(1,2,1)
imshow(A)
title('添加噪声后的图像')

%转换图像类型
A=rgb2gray(A);
image=double(A);
[m,n]=size(A);
%进行中值滤波并将滤波后的结果显示
u=zeros(1,9);
for i=2:m-1,
   for j=2:n-1,
      u(1)=image(i,j);u(2)=image(i,j+1);u(3)=image(i-1,j+1);
      u(4)=image(i-1,j);u(5)=image(i-1,j-1);u(6)=image(i,j-1);
      u(7)=image(i+1,j-1);u(8)=image(i+1,j);u(9)=image(i+1,j+1);
      for p=1:8,
           for q=1:8-p,
              if u(q)>u(q+1)
                  k=u(q);u(q)=u(q+1);u(q+1)=k;
              end,
          end,
      end,
      rimage(i,j)=u(5);
   end,
end, 
subplot(1,2,2)
rimage=uint8(rimage);
imshow(rimage)
title('中值滤波后的图像')

工具箱提供了medfilt2()函数来实现图像的二维中值滤波,其用法如下

%读入原始图像,添加椒盐噪声
I=imread('pic10.jpg');
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.04);
%进行中值滤波
K=medfilt2(J,[3,3]);
subplot(121), imshow(J)
subplot(122), imshow(K)

 

posted on 2015-04-29 23:04  nataliebky  阅读(508)  评论(0)    收藏  举报

导航