对一幅灰度图像f(x,y):
(1)对f(x,y)加高斯白噪声和椒盐噪声;
(2)分别画出原图和加噪后的图像及其各自对应的直方图;
(3)用几何均值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理,并进行比较;
(4)用自适应中值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理;并进行比较。
注:滤波窗口可根据需要自行设定。
1.对f(x,y)加高斯白噪声和椒盐噪声,并画出原图和加噪后的图像及其各自对应的直方图;
temp_image = imread('lena.jpg');
I = rgb2gray(temp_image);
figure()
subplot(2,3,1)
imshow(I),title('原图');
subplot(2,3,4)
imhist(I),title('原图直方图')%显示原始图像直方图
J = imnoise(I,'salt & pepper',0.02);%椒盐噪声
subplot(2,3,2)
imshow(J),title('椒盐噪声');
subplot(2,3,5)
imhist(J),title('椒盐直方图')%显示椒盐图像直方图
G = imnoise(I,'gaussian',0.02,0.02);%高斯噪声
subplot(2,3,3)
imshow(G);title('高斯噪声');
subplot(2,3,6)
imhist(G),title('高斯直方图')%显示高斯图像直方图
2.用几何均值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理,并进行比较;
几何均值滤波函数:
%gmean函数(几何均值滤波):
function f = gmean(g,m,n)
g = im2double(g);
f = exp(imfilter(log(g),ones(m,n),'replicate')).^(1/m/n);
end
3.用自适应中值滤波分别对加高斯噪声和椒盐噪声图进行滤波处理;并进行比较。
自适应中值滤波函数:
%RAMF函数(自适应中值滤波函数):
function f = RAMF(img)
[Im,In] = size(img);
nmin = 3;
nmax = 9;
Imf = img;
I_ex = [zeros((nmax-1)/2,In+(nmax-1));zeros(Im,(nmax-1)/2),img,zeros(Im,(nmax-1)/2);zeros((nmax-1)/2,In+(nmax-1))];
for x = 1:Im
for y = 1:In
for n = nmin:2:nmax
Sxy =
I_ex(x+(nmax-1)/2-(n-1)/2:x+(nmax-1)/2+(n-1)/2,y+(nmax-1)/2-(n-1)/2:y+(nmax-1)/2+(n-1)/2);
Smax = max(max(Sxy));%求出窗口内像素的最大值
Smin = min(min(Sxy));%求出窗口内像素的最小值
Smed = median(median(Sxy));%求出窗口内像素的中值
%判断中值是否是噪声点
if Smed > Smin && Smed < Smax
%若中值既大于最小值又小于最大值,则不是
%是,则退出该if语句,增大窗口尺寸,再次判断
%不是,则判断该点的原值是不是噪声点
if Imf(x,y) <= Smin || Imf(x,y) >= Smax
%若该点的原值既大于最小值又小于最大值,则不是
%不是,则输出原值,即不作处理
%是,则输出中值
Imf(x,y) = Smed;
end
break%有输出则不再进行循环判断
end
end
%当n=max时,输出中值
Imf(x,y) = Smed;
end
end
f = Imf;
end
4.滤波并比较显示:
I_1 = gmean(I,3,3);J_1 = gmean(J,3,3);G_1 = gmean(G,3,3);%3*3几何均值滤波
figure()
subplot(3,2,1)
imshow(I_1);title('原图几何滤波');
subplot(3,2,3)
imshow(J_1);title('椒盐几何滤波');
subplot(3,2,5)
imshow(G_1);title('高斯几何滤波');
I_2 = RAMF(I);J_2 = RAMF(J);G_2 = RAMF(G);%自适应中值滤波
subplot(3,2,2)
imshow(I_2);title('原图自适应中值滤波');
subplot(3,2,4)
imshow(J_2);title('椒盐自适应中值滤波');
subplot(3,2,6)
imshow(G_2);title('高斯自适应中值滤波');