[Digital Image Processing Matlab] Mean/Median Filter + Noise Recognition
Read in an image, and use mean filtering and median filtering for image smoothing, the former includes the noise identification part.
function F=filtering(image)
%调用代码-------------------------------
% imageR=imread('aa.jpg');
% image=rgb2gray(imageR); filtering(image);
%--------------------------------------
image=double(image);
[row,column]=size(image);
%均值滤波----------------------------
%平滑时忽略图像边界数据
Image1=zeros(row,column); %%%matlab读入图像的数据是uint8,数值一般采用double型存储和运算
for i=2:(row-1) %%%imshow 显示图像时对double认为在[0,1]之间,大于1的都为白色
for j=2:(column-1)
I=mean(mean([image(i-1,j-1),image(i-1,j),image(i-1,j+1);
image(i,j-1),image(i,j),image(i,j+1),
image(i+1,j-1),image(i+1,j),image(i+1,j+1)]));
Image1(i,j)=I;
%Image1(i,j)=mean(mean(I));
end
end
%含噪声识别
Image2=zeros(row,column);
for i=2:(row-1)
for j=2:(column-1)
I=[image(i-1,j-1),image(i-1,j),image(i-1,j+1);
image(i,j-1),image(i,j),image(i,j+1),
image(i+1,j-1),image(i+1,j),image(i+1,j+1)];
m=mean(mean(I)); %均值
s=std(std(I)); %标准差
if ((m-2*s<=image(i,j))&&(image(i,j)<=m+2*s))
Image2(i,j)=image(i,j);
else Image2(i,j)=m;
end
end
end
subplot(1,3,1);imshow(uint8(image));
title('原图')
subplot(1,3,2);imshow(uint8(Image1)); %类型转换!!!
title('均值滤波空间平滑')
subplot(1,3,3);imshow(uint8(Image2));
title('均值滤波空间平滑(进行判断)')
%中值滤波------------------------------------------
Image3=zeros(row,column);
for i=2:(row-1)
for j=2:(column-1)
I=[image(i-1,j-1),image(i-1,j),image(i-1,j+1);
image(i,j-1),image(i,j),image(i,j+1),
image(i+1,j-1),image(i+1,j),image(i+1,j+1)];
I=reshape(I,[1,9]);
Image3(i,j)=median(I);
end
end
figure,
subplot(1,2,1);imshow(uint8(image));
title('原图')
subplot(1,2,2);imshow(uint8(Image3));
title('中值滤波空间平滑后');
end
test: