实验二:数字图像频域增强实验指导书一、实验目的(1)了解离散傅立叶变换的基本原理及其性质;(2)掌握应用MATLAB语言进行FFT及逆变换的方法;(3)了解图象在频域中处理方法,应用MATLAB语言作简单的低通及高通滤波器。
二、实验要求(1)读入数字图像,并利用MATLAB对其进行傅立叶变换,并显示其频谱图像;对该图像进行平移、旋转和放大(或缩小)操作,记录其频谱图像并分析。
实验用图像自行选择。
实验1数据记录可类似下表输入图像FFT变换频谱图像(2)读入数字图像,为该图像添加高斯以及椒盐噪声,利用巴特沃斯低通滤波器,高斯低通滤波器对一受噪声污染图像做处理,记录滤波后的频谱图像,再作反变换,记录处理后的新图像。
设定不同截止频率参数,重复一次实验。
(3)读入数字图像,设计实现巴特沃斯高通滤波器和高斯高通滤波器,记录滤波后的频谱图像,再作反变换,记录处理后的新图像。
设定不同截止频率参数,重复一次实验。
实验2,3数据记录可类似下表:输入图像滤波器截至频率处理后频谱图像反变换后图像三、提交作业要求内容包括:实验1~3记录的数据(格式见如上实验要求),对应的matlab代码,以及对实验过程和结果进行分析及总结。
参考MATLAB代码:clear;I1=imread('eight.tif');figure;subplot(2,2,1);imshow(I1);title('原始图像');I2=imnoise(I1,'salt & pepper');subplot(2,2,2);imshow(I2);title('噪声图像');f=double(I2);g=fft2(f); %执行fft变换g=fftshift(g); %移相[N1,N2]=size(g);n=5;d0=50; %截至频率n1=fix(N1/2);n2=fix(N2/2);for i=1:N1for j=1:N2d=sqrt((i-n1)^2+(j-n2)^2);h=1/(1+(d/d0)^(2*n)); % d0即为截至频率result(i,j)=h*g(i,j); %相乘endendresult1=ifftshift(result); %反移相X2=ifft2(result1); %反变换X3=uint8(real(X2));figure();subplot(2,2,1);imshow(X3);title('巴特沃斯滤波器图像');subplot(2,2,2);result=log(0.000001+abs(result));imshow(result,[]),colorbar;title('巴特沃斯滤波函数');figure();subplot(2,2,1);g=log(0.000001+abs(g));imshow(g,[]),colorbar;title('原始图像的傅立叶变换');实验原理1、傅立叶变换的基本知识在图像处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图像分析、图像增强及图像压缩等方面。
假设f (x , y )是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:11(2/)(2/)00(,)(,)M N j M pm j N qn m n F p q f m n e e ππ----===∑∑ p=0,1…M -1 q=0,1…N -1 (1)或 12111201(,)(,)M N j m j n m n F f m n e e ωωωω----===∑∑ p=0,1…M -1 q=0,1…N -1 (2)离散傅立叶反变换的定义如下:11(2/)(2/)001(,)(,)M N j M pm j N qn p q f m n F p q e e MN ππ--===∑∑m=0,1…M -1 n=0,1…N -1 (3) F (p , q )称为f (m , n )的离散傅立叶变换系数。
这个式子表明,函数f (m , n )可以用无数个不同频率的复指数信号和表示,而在频率(w 1,w 2)处的复指数信号的幅度和相位是F (w 1,w 2)。
2、MATLAB 提供的快速傅立叶变换函数(1) fft2fft2函数用于计算二维快速傅立叶变换,其语法格式为:B = fft2(I)B = fft2(I)返回图像I 的二维fft 变换矩阵,输入图像I 和输出图像B 大小相同。
例如,计算图像的二维傅立叶变换,并显示其幅值的结果,如图所示,其命令格式如下load imdemos saturn2imshow(saturn2)B = fftshift(fft2(saturn2));imshow(log(abs(B)), [ ], ‘notruesize’)(2)fftshiftMATLAB提供的fftshift函数用于将变换后的图像频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:B = fftshift(I)对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。
(3)ifft2ifft2函数用于计算图像的二维傅立叶反变换,其语法格式为:B = ifft2(I)B = ifft2(I)返回图像I的二维傅立叶反变换矩阵,输入图像I和输出图像B大小相同。
其语法格式含义与fft2函数的语法格式相同,可以参考fft2函数的说明。
平移图像:I=imread('number.png');I=rgb2gray(I);subplot(2,2,1);imshow(I);title('原始图像');F1=fftshift(abs(fft2(I)));subplot(2,2,2);imshow(log(abs(F1)),[]);title('原始图像频谱'); se=translate(strel(1),[20 20]);I2=imdilate(I,se);subplot(2,2,3);imshow(I2);title('平移后图像');F2=fftshift(abs(fft2(I2)));subplot(2,2,4);imshow(log(abs(F2)),[]);title('平移图像频谱');旋转图像:f=imread('number.png');f=rgb2gray(f);subplot(2,2,1);imshow(f);title('原始图像');F=fftshift(abs(fft2(f)));subplot(2,2,2);imshow(log(abs(F)),[]);title('原始图像频谱');fm=imrotate(f,45,'bilinear','crop'); %%对其进行旋转subplot(2,2,3);imshow(fm);title('图像正向旋转45度');Fc=fftshift(abs(fft2(fm)));subplot(2,2,4);imshow(log(abs(Fc)),[]);title('旋转后图像的频谱');图像放大和缩小:f=imread('number.png');f=rgb2gray(f);subplot(2,3,1);imshow(f);title('原始图像');F=fftshift(abs(fft2(f)));subplot(2,3,2);imshow(log(abs(F)),[]);title('原始图像频谱');fa=imresize(f,2,'bilinear');subplot(2,3,3);imshow(fa);title('图像放大两倍');Fc=fftshift(abs(fft2(fa)));subplot(2,3,4);imshow(log(abs(Fc)),[]);title('放大后图像的频谱'); fb=imresize(f,0.5,'bilinear');subplot(2,3,5);imshow(fb);title('图像缩小一半');Fd=fftshift(abs(fft2(fb)));subplot(2,3,6);imshow(log(abs(Fd)),[]);title('缩小后图像的频谱');加入椒盐噪声:I=imread('rice.png');subplot(2,3,1);imshow(I);title('原始图像');F1=fftshift(abs(fft2(I)));subplot(2,3,2);imshow(log(abs(F1)),[]);title('原始图像频谱');J1 = imnoise(I,'salt & pepper',0.02); % 加入椒盐噪声subplot(2,3,3);imshow(J1);title('椒盐噪声图像');F1=fftshift(abs(fft2(J1)));subplot(2,3,4);imshow(log(abs(F1)),[]);title('椒盐噪声图像频谱') [M, N]=size(fftshift(fft2(double(J1))));nn = 2;d0 = 20;m = fix(M/2);n = fix(N/2);for i = 1:Mfor j = 1:Nd = sqrt((i-m)^2+(j-n)^2);h = 1/(1+(d/d0)^(2*nn)); % 计算低通滤波器传递函数result(i,j) = h*g(i,j);endendresult = ifftshift(result);J2 = ifft2(result);J3 = uint8(real(J2));% 显示滤波处理后的图像subplot(2, 3, 5); imshow(J3); title('滤波结果')F2=fftshift(abs(fft2(J3)));subplot(2,3,6);imshow(log(abs(F2)),[]);title('滤波后图像频谱')加入高斯噪声:I=imread('rice.png');subplot(2,3,1);imshow(I);title('原始图像');F1=fftshift(abs(fft2(I)));subplot(2,3,2);imshow(log(abs(F1)),[]);title('原始图像频谱');J1 =imnoise(I,'gaussian',0.02);%加入高斯噪声subplot(2,3,3);imshow(J1);title('高斯噪声图像');F1=fftshift(abs(fft2(J1)));subplot(2,3,4);imshow(log(abs(F1)),[]);title('高斯噪声图像频谱') [M, N]=size(fftshift(fft2(double(J1))));nn = 2;d0 = 20;m = fix(M/2);n = fix(N/2);for i = 1:Mfor j = 1:Nd = sqrt((i-m)^2+(j-n)^2);h = 1/(1+(d/d0)^(2*nn)); % 计算低通滤波器传递函数result(i,j) = h*g(i,j);endendresult = ifftshift(result);J2 = ifft2(result);J3 = uint8(real(J2));% 显示滤波处理后的图像subplot(2, 3, 5); imshow(J3); title('滤波结果')F2=fftshift(abs(fft2(J3)));subplot(2,3,6);imshow(log(abs(F2)),[]);title('滤波后图像频谱')利用巴特沃斯低通滤波器对高斯噪声图像进行处理:clear all; close all;A=imread('coins.png');I =imnoise(A,'gaussian',0.02);I=im2double(I);M=2*size(I,1);N=2*size(I,2);u=-M/2:(M/2-1);v=-N/2:(N/2-1);[U,V]=meshgrid(u, v);D=sqrt(U.^2+V.^2);D0=50;n=6;H=1./(1+(D./D0).^(2*n));J=fftshift(fft2(I, size(H, 1), size(H, 2)));K=J.*H;L=ifft2(ifftshift(K));L=L(1:size(I,1), 1:size(I, 2));figure;subplot(131);imshow(I);title('高斯噪声图像');subplot(132);imshow(L);title('巴特沃斯低通滤波后的图像');F2=fftshift(abs(fft2(L)));subplot(1,3,3);imshow(log(abs(F2)),[]);title('滤波后图像频谱’) 截止频率为50:截止频率为80:利用高斯低通滤波器对椒盐噪声图像进行处理:clear all; close all;A=imread('coins.png');I= imnoise(A,'salt & pepper',0.02);I=im2double(I);M=2*size(I,1);N=2*size(I,2);u=-M/2:(M/2-1);v=-N/2:(N/2-1);[U,V]=meshgrid(u, v);D=sqrt(U.^2+V.^2);D0=80;H=exp(-(D.^2)./(2*(D0^2)));J=fftshift(fft2(I, size(H, 1), size(H, 2))); K=J.*H;L=ifft2(ifftshift(K));L=L(1:size(I,1), 1:size(I, 2));figure;subplot(131);imshow(I);title('椒盐噪声图像');subplot(132);imshow(L);title('高斯低通滤波后的图像');F2=fftshift(abs(fft2(L)));subplot(1,3,3);imshow(log(abs(F2)),[]);title('滤波后图像频谱') 截止频率为80:截止频率为30:利用巴特沃斯高通滤波器对高斯噪声图像进行处理:clear all; close all;A=imread('coins.png');I =imnoise(A,'gaussian',0.02);M=2*size(I,1);N=2*size(I,2);u=-M/2:(M/2-1);v=-N/2:(N/2-1);[U,V]=meshgrid(u, v);D=sqrt(U.^2+V.^2);D0=30;n=6;H=1./(1+(D0./D).^(2*n));J=fftshift(fft2(I, size(H, 1), size(H, 2)));K=J.*H;L=ifft2(ifftshift(K));L=L(1:size(I,1), 1:size(I, 2));figure;subplot(131);imshow(I);title('高斯噪声图像');subplot(132);imshow(L);title('巴特沃斯高通滤波后的图像');F2=fftshift(abs(fft2(L)));subplot(1,3,3);imshow(log(abs(F2)),[]);title('滤波后图像频谱') 截止频率为30:截止频率为10:利用高斯高通滤波器对椒盐噪声图像进行处理:clear all; close all;A=imread('coins.png');I= imnoise(A,'salt & pepper',0.02);I=im2double(I);M=2*size(I,1);N=2*size(I,2);u=-M/2:(M/2-1);v=-N/2:(N/2-1);[U,V]=meshgrid(u, v);D=sqrt(U.^2+V.^2);D0=20;H=1-exp(-(D.^2)./(2*(D0^2)));J=fftshift(fft2(I, size(H, 1), size(H, 2))); K=J.*H;L=ifft2(ifftshift(K));L=L(1:size(I,1), 1:size(I, 2));figure;subplot(131);imshow(I);title('椒盐噪声图像');subplot(132);imshow(L);title('高斯高通滤波后的图像');F2=fftshift(abs(fft2(L)));subplot(1,3,3);imshow(log(abs(F2)),[]);title('滤波后图像频谱') 截止频率为20:截止频率为10:。