遥感图像处理实验报告(2013 —2014 学年第1学期)实验名称:图像的频率域滤波处理实验时间:实验地点:指导教师:专业班级:姓名:学号:一:实验目的1:掌握滤波器在程序语言中的定义算法2:理解图像的频率域与空间域之间的区别与联系3:在频率域对图像进行处理,达到平滑(低通滤波)与锐化(高通滤波)的目的二:实验内容1:在Matlab中定义滤波器2:对图像进行频率域处理3:对频率域的处理结果,结合第3次实验(空间域处理)结果进行对比,给出评价三:实验代码及Matlab使用心得(注释中)%清屏,清除工作空间,关闭所有绘图窗口clc;clear all;close all;%读取图像,并建立一个窗口,显示原始图像I = imread('C:\Users\浮生\Desktop\大三\Matlab\data\lena.png', 'png')figure(1)imshow(I)title('原始图像')%图像傅立叶变换%fft(X)函数的作用是,返回矩阵X的【二维离散傅立叶变换】结果%fft()函数采用快速傅立叶变换算法,运算结果的行列数与被变换矩阵的规格相同F = fft2(I);%fftshift()函数的功能则是把FFT的DC分量移动到频谱矩阵的中心%在直观上,就是把低频信息移到矩阵中心,便于直观观看图像的频谱F = fftshift(F);%由于FFT的运算结果的数值跨幅过大%直接显示的话只能看到一个小亮点%为了显示的直观,我们需要自行定义灰度显示幅度%在本例中,我们定义显示幅度为0-50000figure(2);imshow(abs(real(F)), [0 50000]);title('频率域图像')%%%%%%定义滤波器之前的准备工作%%%%%[m n] = size(I);%读取图像的规格p = m/2;%定义两个计数器p和qq = n/2;%用以控制滤波器的遍历过程image = zeros(m,n);%%%%%%截止频率为50的理想低通滤波器%%%%%%%低通滤波器,即让频率高于阈值的信号值为0,而在阈值之下的所有信号保持原样%反映在图像操作中,将去除高频信息,达到平滑的效果lowpass_50 = F;for u = 1:mfor v = 1:nif sqrt((u-p)^2 + (v-q)^2) < 50%什么也不做;elselowpass_50(u, v) = 0;endendend%显示频率域图像figure(3);imshow(abs(real(lowpass_50)), [0 50000]);title('频率域图像截止频率为50的理想低通滤波器');%傅立叶逆运算反算图像image = ifftshift(lowpass_50);%还原矩阵image = ifft2(image);%傅立叶逆运算image = abs(real(image));%复数取实部%显示处理结果图像figure(4);imshow(image, []);title('处理结果截止频率为50的理想低通滤波器')%%%%%%截止频率为100的理想低通滤波器%%%%%%lowpass_100 = F;for u = 1:mfor v = 1:nif sqrt((u-p)^2 + (v-q)^2) < 100%什么也不做;elselowpass_100(u, v) = 0;endendend%显示频率域图像figure(5);imshow(abs(real(lowpass_100)), [0 50000]);title('频率域图像截止频率为100的理想低通滤波器'); %傅立叶逆运算反算图像image = ifftshift(lowpass_100);%还原矩阵image = ifft2(image);%傅立叶逆运算image = abs(real(image));%复数取实部%显示处理结果图像figure(6);imshow(image, []);title('处理结果截止频率为100的理想低通滤波器')%%%%%%截止频率为50的理想高通滤波器%%%%%% highpass_50 = F;for u = 1:mfor v = 1:nif sqrt((u-p)^2 + (v-q)^2) < 50highpass_50(u, v) = 0;else%什么也不做;endendend%显示频率域图像figure(7);imshow(abs(real(highpass_50)), [0 50000]);title('频率域图像截止频率为50的理想高通滤波器');%傅立叶逆运算反算图像image = ifftshift(highpass_50);%还原矩阵image = ifft2(image);%傅立叶逆运算image = abs(real(image));%复数取实部%显示处理结果图像figure(8);imshow(image, []);title('处理结果截止频率为50的理想高通滤波器')%%%%%%截止频率为100的理想高通滤波器%%%%%% highpass_100 = F;for u = 1:mfor v = 1:nif sqrt((u-p)^2 + (v-q)^2) < 100highpass_100(u, v) = 0;else%什么也不做;endendend%显示频率域图像figure(9);imshow(abs(real(highpass_100)), [0 50000]);title('频率域图像截止频率为100的理想高通滤波器');%傅立叶逆运算反算图像image = ifftshift(highpass_100);%还原矩阵image = ifft2(image);%傅立叶逆运算image = abs(real(image));%复数取实部%显示处理结果图像figure(10);imshow(image, []);title('处理结果截止频率为100的理想高通滤波器')%%%%%%截止频率为50的巴特沃斯低通滤波器%%%%%% for u = 1:m,for v = 1:nD=sqrt((u-p)^2 + (v-q)^2);Butterworth(u,v)=1/(1+D/50)^(2*2);endend%显示频率域图像figure(11);imshow(abs(real(Butterworth)), []);title('频率域图像截止频率为50的巴特沃斯低通滤波器'); %傅立叶逆运算反算图像image = F.*Butterworth;image = ifftshift(image);image = abs(ifft2(image));%显示处理结果图像figure(12);imshow(image, []);title('处理结果截止频率为50的巴特沃斯低通滤波器')%%%%%%截止频率为50的高斯低通滤波器%%%%%%for u=1:m,for v=1:nD=sqrt((u-p)^2 + (v-q)^2);Gaussian(u,v)=exp(-D^2/(2*50^2));endend%显示频率域图像figure(13);imshow(abs(real(Gaussian)), []);title('频率域图像截止频率为50的高斯低通滤波器'); %傅立叶逆运算反算图像image = F.*Gaussian;image = ifftshift(image);image = abs(ifft2(image));%显示处理结果图像figure(14);imshow(image, []);title('处理结果截止频率为50的高斯低通滤波器');四:实验结果(仅列一例)五:实验心得1:相较空域滤波,频率域滤波的算法复杂度更高。
相较标准的傅立叶变换,快速傅立叶变换节省了更多时间与空间,大大降低了算法的复杂度。
2:空域滤波是领域+算子->新像素灰度值的运算模式,而频率域滤波则是原始图像+傅立叶变换->频谱信号频谱信号+滤波器->新的频谱信号新的频谱信号+傅立叶逆变换->新的图像这样的运算方式。
空域滤波处理中,新图像某一像素的灰度值,取决于该位置上以原像素为中心的领域的所有像素的灰度值,而在频率域滤波处理中,新图像上任何一个像素的灰度值,与原图像的所有像素的灰度值,都有关系。
3:把图像抽象成频谱信号,可以从频谱信号上统计出在空域上难以发现的一些周期性变动,如在空域看起来杂乱无章的椒盐噪声等。
也能更好的界定出一些在空域滤波上难以准确界定的边缘,例如条带噪声等。
总的来说,频域处理的结果要比空域处理的结果要好,也更灵活,但其相对于空域的运算代价十分巨大。