中值滤波算法

步骤:

(1)对窗内的每行像素按降序排序,得到最大值、中间值和最小值。

(2)把三行的最小值即第三列相比较,取其中的最大值。

(3)把三行的最大值即第一列相比较,取其中的最小值。

(4)把三行的中间值即第二列相比较,再取一次中间值。

(5)把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。

代码:

close all;
clear all;
clc;

I=imread('C:\Users\luoqi\Desktop\图片\影院\file.jpg');
if ndims(I)==3
    I=rgb2gray(I);
end
[m,n]=size(I);
%%
%添加高斯白噪声
J=zeros(m,n);
simd=20*rand(1);

% for i=1:m
%    for j=1:2:n
%        t1=rand(1);
%        t2=rand(1);
%        z1=simd*cos(2*pi*t1)*sqrt(-2*log(t2));
%        z2=simd*sin(2*pi*t1)*sqrt(-2*log(t2));
%        J(i,j)=I(i,j)+z1;
%        if j+1<=n
%            J(i,j+1)=I(i,j+1)+z2;
%        end
%    end
% end

% for i=1:m
%    for j=1:n
%        if J(i,j)>255
%            J(i,j)=255;
%        elseif J(i,j)<0
%            J(i,j)=0;
%        end
%    end
% end
%J=uint8(J);
%figure(1);
%imshow(J);

%%
%添加椒盐噪声
J=imnoise(I,'salt & pepper',0.02);
figure(1);
imshow(J);
%%
%中值滤波
% for i=2:m-1
%    for j=2:n-1
%        median3x3=[J(i-1,j-1),J(i-1,j),J(i-1,j+1);
%                   J(i,j-1),J(i,j),J(i,j+1);
%                   J(i+1,j-1),J(i+1,j),J(i+1,j+1);];
%        sort1=sort(median3x3,2,'descend');
%        sort2=sort([sort1(1),sort1(4),sort1(7)],'descend');
%        sort3=sort([sort1(2),sort1(5),sort1(8)],'descend');
%        sort4=sort([sort1(3),sort1(6),sort1(9)],'descend');
%        mid_num=sort([sort2(3),sort3(2),sort4(1)],'descend');
%        J(i,j)=mid_num(2);
%    end
% end

%%
%matlab自带函数
J=medfilt2(J);

figure(2)
imshow(J);

 

posted @ 2020-08-06 09:43  luoqi123456  阅读(3967)  评论(0编辑  收藏  举报