中值滤波算法
步骤:
(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);