%%%%中值滤波 实验
%%filename 是要进行中值滤波的带噪声图像
% function med(filename)
clc;clear;
% seis=read_segy_file();
% iang=seis.traces;
% [m,n]=size(iang);
% iang_med=iang(:,:);
% % iang_gry=mat2gray(iang_med);
% iang_gry=uint8(iang_med);
%
% figure;
% imagesc(iang_med);colormap(gray)
% return;
[filename,pathname]=uigetfile({'*.png';'*,jpg'});
% filename='coins.png'
% file=filename;
I=imread([pathname filename]); %读图像
I=rgb2gray(I);
% I=imnoise(I,'salt & pepper',0.1); %加噪音
% imagesc(I)
% return;
% I=iang_gry;
[row col]=size(I);
A_f=medfilt2(I,[3 3]); %matlab自带的中值滤波程序
% subplot(1,2,1),imshow(A_f) %成图
A_sf=zeros(size(I)); %行列值
w=3;
%%%% 自适应中值滤波程序
for i=1:1:row;
for j=1:1:col;
W=I(max(i-w,1):1:min(i+w,row),max(j-w,1):1:min(j+w,col));
A_med=median(median(W));
A_max=max(max(W));
A_min=min(min(W));
if A_min<A_med<A_max;
if I(i,j)==A_min|I(i,j)==A_max;
A_sf(i,j)=A_med;
else
A_sf(i,j)=I(i,j);
end
else
w=w+2;
continue;
end
end
end
%%%自适应中值滤波 end
%%效果对比图
% subplot(1,2,2),A_sf=uint8(A_sf);
% imshow(A_sf)
% figure;
% imshow(A_sf-A_f)