例4.11 使用中值滤波降低图象噪声。
%上例的Matlab实现程序的如下:
I=imread('eight.tif'); I=imread('eight.tif');
J=imnoise(I,'salt & pepper',0.02);
subplot(231),imshow(I);title('原图象');
subplot(232),imshow(J);title('添加椒盐噪声图象') k1=medfilt2(J);
k2=medfilt2(J,[5 5]); k3=medfilt2(J,[7 7]); k4=medfilt2(J,[9 9]);
subplot(233),imshow(k1);title('3*3模板中值滤波') subplot(234),imshow(k2);title('5*5模板中值滤波') subplot(235),imshow(k3);title('7*7模板中值滤波') subplot(236),imshow(k4);title('9*9模板中值滤波')
例4.12 梯度锐化实例.
%Matlab实现程序如下:
I=imread('cameraman.tif'); subplot(131),imshow(I) H=fspecial('Sobel');
H=H'; %Sobel垂直模板 TH=filter2(H,I);
subplot(132),imshow(TH,[]);
H=H'; %Sobel水平模板 TH=filter2(H.I);
subplot(133),imshow(TH,[])
%为了使垂直模板对垂直边缘有较强的响应, % filter2中对模板B进行了转置操作.
例4.13 频域低通滤波所产生的模糊.
%Matlab程序的如下:
%理想低通多滤波器所产生的模糊和振铃现象 J=imread('tire.tif'); subplot(331);imshow(J); J=double(J);
%采用傅里叶变换 f=fft2(J);
%数据矩阵平衡 g=fftshift(f);
subplot(332);imshow(log(abs(g)),[]),color(jet(64)); [M,N]=size(f); n1=floor(M/2); n2=floor(N/2); % d0=5,15,45,65 d0=5; for i=1:M for j=1:N
d=sqrt((i-n1)^+(j-n2)^2); if d<=d0 h=1; else h=0; end
g(i,j)=h*g(i,j); end end
g=ifftshift(g);
g=uint8(real(ifft2(g))); subplot(333); imshow(g);
例4.14 用巴特沃斯低通滤波器去除图像中的椒盐噪声。
%实现巴特沃斯低通滤波器 I=imread('saturn.png');
J=imnoise(I,'salt & pepper',0.02); %给原图像加入椒盐噪声
subplot(121);imshow(J); tilte('含有椒盐噪声图像'); J=double(J);
%采用傅里叶变换 f=fft2(J);
%数据规陈平衡 g=fftshift(f) [M,N]=size(f); n=3; d0=20
n1=floor(M/2) n2=floor(N/2) for i=1:M for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2) h=1/(1+(d/d0)^(2*n)); g(i,j)=h*g(i,j); end end
g=ifftshift(g);
g=uint8(real(ifft2(g))); subplot(122); imshow(g);
例4.15 频域高通滤波增强示例.
J=imread('lena.bmp');
imshow(uint8(J));title('模糊图像') J=double(J);
f=fft2(J); %采用傅里叶变换 g=fftshift(f); %数据局陈平衡
[M,N]=size(f); n1=floor(M/2); n2=floor(N/2); d0=20; for i=1:M for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); if d>=d0 h1=1; h2=1+0.5; else
h1=0; h2=0.5; end
g1(i,j)=h1*g(i,j); g2(i,j)=h2*g(i,j); end end
g1=ifftshift(g1);
g1=uint8(real(ifft2(g1))); %显示理想高通滤波结果 subplot(221);imshow(g1); title('理想高通滤波结果'); g2=ifftshift(g2);
g2=uint8(real(ifft2(g2)));
subplot(222);imshow(g2); %显示理想高通加强滤波结果 title('理想高通加强滤波结果'); n=2; d0=20;
for i=1:M %进行巴特沃斯高通滤波和巴特沃斯高通加强滤波 for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); if d==0 h1=0; h2=0.5; else
h1=1/(1+(d0/d)^(2*n)); h2=1/(1+(d0/d)^(2*n))+0.5; end
gg1(i,j)=h1*g(i,j); gg2(i,j)=h2*g(i,j);