版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013146742/article/details/52942697
在频谱中低频主要对应图像在平滑区域的总体灰度级分布,而高频对应图像的细节部分,如边缘和噪声。因此图像平滑可以通过衰减图像频谱中的高频部分来实现,这就建立了空间域图像平滑和频域低通滤波之间的对应关系。
理论基础
最容易想到的衰减高频成分方法是在一个称为‘截止频率’的位置截断所有的高频成分,将图像频谱中所有高于这一截止的频谱 成分设为0,低于截止频率的成分设为保持不变。能够达到这种效果的滤波器我们称之为理想低通滤波器。如果图像的宽度为 M,高度为N,那么理想的低通频域滤波器可以形式化的描述为
其中D0表示理想低通滤波器的截止频率,滤波器的频率域原点在频谱图像的中心处,在以截止频率为半径的圆形区域 之内的滤镜元素值全部为1,而该圆之外的滤镜元素值全部为0.理想低通滤波器的频率特性在截止频率处十分陡峭,无法用硬件实现,这也是我们称之为理想的原因,但其软件编程的模拟实现较为简单。
理想低通滤波器可以在一定程度上去除图像噪声,但由此带来的图像边缘和细节的模糊效应也比较明显,其滤波之后的处理效果比较类似于平均模板的平均平滑,实际上,理想低通滤波器是一个与频谱图像同样尺寸的二维矩阵,通过将矩阵中对应较高频率的部分设为0,较低频率的部分设为1,可在与频谱图像相乘后有效去除频谱的高频部分,其中0和1的交界处即对应滤波器的截止频率。
我们用imidealflpf 函数可以得到截止频率为freq的理想低通滤波器。代码如下:
function out=imidealflpf(I, freq) %imidealflpf 函数 构造理想的频域低通滤波其 %I参数 输入的灰度图像 %freq 低通滤波器的截止频率 %返回值 out指定的理想低通滤波 [M,N]=size(I); out=ones(M,N); for i=1:M for j=1:N if (sqrt(((i-M/2)^2+(j-N/2)^2))>freq) out(i,j)=0; end end end
用imfreqfilt 函数表示频率滤波的基本步骤代码如下:
function out=imfreqfilt(I,ff) % imfreqfilt函数 对灰度图像进行频域滤波 %参数I 输入的空域图像 %参数ff 应用的与原图等大的频域滤镜 if (ndims(I)==3)&&(size(I,3)==3) %RGB图像 I=rgn2gray(I); end if (size(I)~=size(ff)) msg1=sprintf('%s: 滤镜与原图像不等大,检查输入',mfilename); msg2=sprintf('%s: 滤波操作已经取消',mfilename); eid=sprintf('Images:%s: ImagesSizeNotEqual',mfilename); error(eid,'%s',msg1,msg2); end %快速傅里叶变换 f=fft2(double(I)); %移动原点 s=fftshift(f); %应用滤镜及反变换 out=s.*ff;%对应元素相乘实现频域滤波 out=ifftshift(out); out=ifft2(out); %求模值 out=abs(out); %归一化以便显示 out=out/max(out(:));
用ditonglvbo 函数来进行图像处理代码
I=imread('lena.bmp'); I=rgb2gray(I); ff=imidealflpf(I,20);%生成滤镜 out=imfreqfilt(I,ff);%应用滤镜 figure(1); subplot(2,2,1); imshow(I); title('source'); %计算FFT并显示 temp=fft2(double(I)); temp=fftshift(temp); temp=log(1+abs(temp)); figure(2); subplot(2,2,1); imshow(temp,[]); title('source1'); figure(1); subplot(2,2,2); imshow(out); title('Ideal LPF ,freq=20'); %计算FFT并显示 temp=fft2(out); temp=fftshift(temp); temp=log(1+abs(temp)); figure(2); subplot(2,2,2); imshow(temp,[]); title('Ideal LPF ,freq=20'); ff=imidealflpf(I,40);%生成滤镜 out=imfreqfilt(I,ff);%应用滤镜 figure(1); subplot(2,2,3); imshow(out); title('Tdeal LPF,freq=40'); %计算FFT并显示 temp=fft2(out); temp=fftshift(temp); temp=log(1+abs(temp)); figure(2); subplot(2,2,3); imshow(temp,[]); title('Ideal LPF ,freq=40'); ff=imidealflpf(I,60);%生成滤镜 out=imfreqfilt(I,ff);%应用滤镜 figure(1); subplot(2,2,4); imshow(out); title('Tdeal LPF,freq=60'); %计算FFT并显示 temp=fft2(out); temp=fftshift(temp); temp=log(1+abs(temp)); figure(2); subplot(2,2,4); imshow(temp,[]); title('Ideal LPF ,freq=60');
效果如下:
function out=imfreqfilt(I,ff) % imfreqfilt函数 对灰度图像进行频域滤波 %参数I 输入的空域图像 %参数ff 应用的与原图等大的频域滤镜 if (ndims(I)==3)&&(size(I,3)==3) %RGB图像 I=rgn2gray(I); end if (size(I)~=size(ff)) msg1=sprintf('%s: 滤镜与原图像不等大,检查输入',mfilename); msg2=sprintf('%s: 滤波操作已经取消',mfilename); eid=sprintf('Images:%s: ImagesSizeNotEqual',mfilename); error(eid,'%s',msg1,msg2); end %快速傅里叶变换 f=fft2(double(I)); %移动原点 s=fftshift(f); %应用滤镜及反变换 out=s.*ff;%对应元素相乘实现频域滤波 out=ifftshift(out); out=ifft2(out); %求模值 out=abs(out); %归一化以便显示 out=out/max(out(:));
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013146742/article/details/52942697
转载请标明出处:频域低通滤波器1
文章来源: 频域低通滤波器1