您的当前位置:首页matlab 图像的傅立叶变换

matlab 图像的傅立叶变换

来源:锐游网


实验三 图像的傅立叶变换

熟悉傅里叶变换的基本性质;

掌握FFT方法及应用;

通过实验了解二维频谱的分布特点;

掌握利用MATLAB实现数字图像的傅立叶变换及滤波锐化的处理;

了解理想、巴特沃兹、高斯等不同滤波器的结构及滤波效果。

实验步骤

1. 启动MATLAB程序,读入一幅图像;对图像做FFT。使用’subplot’命令,同时显示原始图像其频谱图;

IenaImg=imread('lena.jpg'); %读入原图像文件

fftI=fft2(double(IenaImg)); %二维离散傅立叶变换

sfftI=fftshift(fftI); %直流分量移到频谱中心

RR=real(sfftI); %取傅立叶变换的实部

fftImg = log(RR);

subplot(1,2,1)

imshow(IenaImg); %显示原图像

subplot(1,2,2)

imshow(fftImg, [8,10]); %显示原图像的频谱

2. 读入一幅图像,分别为图像添加椒盐、高斯噪声,做FFT变换。使用’subplot’命令,将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出来。

lenaImg=imread('lena.jpg'); %读入原图像文件

fftI=fft2(double(lenaImg)); %二维离散傅立叶变换

sfftI=fftshift(fftI); %直流分量移到频谱中心

RR=real(sfftI); %取傅立叶变换的实部

fftLenaImg = log(RR);

加入椒盐躁声

saltImg=imnoise(lenaImg,'salt & pepper',0.02); %加入椒盐躁声

fftI=fft2(double(saltImg)); %二维离散傅立叶变换

sfftI=fftshift(fftI); %直流分量移到频谱中心

RR=real(sfftI); %取傅立叶变换的实部

fftSaltImg = log(RR);

subplot(2,2,1);

imshow(lenaImg);

subplot(2,2,2);

imshow(fftLenaImg , [8,10]);

subplot(2,2,3);

imshow(saltImg);

subplot(2,2,4);

imshow(fftSaltImg , [8,10]);

加入椒盐躁声

加入高斯躁声

gaussianImg =imnoise(lenaImg,'gaussian',0.02); %加入高斯躁声

fftI=fft2(double(gaussianImg)); %二维离散傅立叶变换

sfftI=fftshift(fftI); %直流分量移到频谱中心

RR=real(sfftI); %取傅立叶变换的实部

fftGaussianImg = log(RR);

subplot(2,2,1);

imshow(lenaImg);

subplot(2,2,2);

imshow(fftLenaImg , [8,10]);

subplot(2,2,3);

imshow(gaussianImg);

subplot(2,2,4);

imshow(fftGaussianImg , [8,10]);

加入高斯躁声

3. 读入一幅图像,对图像分别进行高斯低通、巴特沃兹低通、高斯高通和巴特沃兹高通频域滤波,比较其锐化和平滑效果;

%高斯低通滤波器

I = imread('lena.jpg');

imshow(I);

s=fftshift(fft2(I));

[M,N]=size(s);

n=2;

d0=30; %GLPF滤波,d0=5,15,30(程序中以d0=30为例)

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*exp(-1/2*(d^2/d0^2));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

gImg=uint8(real(ifft2(s)));

figure;

imshow(gImg);

%巴特沃思低通滤波器

l = imread('test.jpg');

s=fftshift(fft2(l));

[M,N]=size(s);

%5级巴特沃思

n=5;

d0=30; %BLPF滤波,d0=5,15,30(程序中以d0=30为例)

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));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

b5Img=uint8(real(ifft2(s)));

%15级巴特沃思

n=15;

s=fftshift(fft2(l));

[M,N]=size(s);

d0=30; %BLPF滤波,d0=5,15,30(程序中以d0=30为例)

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));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

b15Img=uint8(real(ifft2(s)));

%20级巴特沃思

n=20;

s=fftshift(fft2(l));

[M,N]=size(s);

d0=30; %BLPF滤波,d0=5,15,30(程序中以d0=30为例)

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));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

b20Img=uint8(real(ifft2(s)));

subplot(1,4,1);

imshow(l);

title('原图');

subplot(1,4,2);

imshow(b5Img);

title('阶数n=5');

subplot(1,4,3);

imshow(b15Img);

title('阶数n=15');

subplot(1,4,4);

imshow(b20Img);

title('阶数n=20');

如上图所示,巴特沃思低通滤波器在阶数n=5以上时会出现明显振铃(附件中的BLPF.PNG文件),高斯低通滤波器没有振铃。

%高斯高通滤波器

I = imread('test.jpg');

imshow(I);

s=fftshift(fft2(I));

[M,N]=size(s);

n=2;

d0=30; %GLPF滤波,d0=5,15,30(程序中以d0=30为例)

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*exp(-1/2*(d^2/d0^2));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

gImg=uint8(real(ifft2(s)));

figure;

imshow(gImg);

%巴特沃思高通滤波器

I = imread('lena.jpg');

imshow(I);

s=fftshift(fft2(I));

[M,N]=size(s);

n=2;

d0=30; %BLPF滤波,d0=5,15,30(程序中以d0=30为例)

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+(d0/d)^(2*n));

s(i,j)=h*s(i,j);

end

end

s=ifftshift(s);

bImg=uint8(real(ifft2(s)));

figure;

imshow(bImg);

高斯高通滤波器的结果比巴特沃思高通滤波器结果更平滑。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top