频率域滤波与空间域滤波殊途同归,空间域图像增强与频率域图像增强是两种截然不同的技术,实际上在相当程度上说它们是在不同的领域做相同的事情,只是有些滤波更适合在空间域完成,而有些则更适合在频率域中完成。
- 傅里叶变换;
- 快速傅里叶变换;
- 频域滤波;
- 频域低通滤波;
- 频域高通滤波;
一说到傅里叶,这可是贯穿我们从高中数学1到大二,没有哪个受过数学的苦的人不知道得了。而傅里叶级数,就是正弦加上余弦函数的加权和来表示的。
2傅里叶变换基础知识
傅里叶级数:法国数学家傅里叶发现任何周期函数只要满足一定条件(狄利赫里条件),都可以用正弦函数和余弦函数构成无穷级数,却以不同频率的正弦和余弦函数的加权来表示,称为傅里叶级数。
傅里叶变换的实质——基的转换:对于给定函数f(x),关键是选择合适的基,使得f(x)在这组基下,表现出需要的特性。当某一组基不满足要求时,就需要通过变换函数转换到另一组基下
fft2()函数:该函数用于执行二维快速傅里叶操作,因此可以直接用于图像处理
Y=fft2(X)
Y=fft2(X,m,n)
X为输入图像,m和n分别用于将X的第一和第二维规整到指定的长度,当m和n均为2 的整数次幂时算法的执行速度要比m和n为素数时更快。
Y是计算得到的傅里叶频谱,是一个复数矩阵
注意:计算abs(Y)可以得到幅度谱,计算angle(Y)可以得到相位谱
fftshift()函数:利用了频谱的周期性特点,将输出图像的一半平移到另一端,从而使零频被移动到图像的中间。
Y=fftshift(X)
Y=fftshift(X,dim)
X为要平移的频谱,dim指出了在多维数组的哪个角度上执行平移操作。Y是经过平移的频谱
ifft2()函数:该函数用于对图像(矩阵)执行逆傅里叶变换。输出矩阵的大小与输入矩阵相同。
Y=ifft2(X)
Y=ifft2(X,m,n)
X为要计算反变换的频谱;m,n的意义与fft2()中相同;Y是反变换后得到的原始图像
matlab实现(幅度谱的意义示例)
I1=imread('cell.tif');%读入原图像
fcoef=fft2(I1);%做fft变换
spectrum=fftshift(fcoef);%将零点移到中心
temp=log(1+abs(spectrum));%对幅值做对数变换以压缩动态范围subplot(1,2,1);
imshow(temp,[]);
title('FFF');
subplot(1,2,2);
imshow(I1);
title('Source');I2=imread('circuit.tif');%读入原图像
fcoef=fft2(I2);%做fft变换
spectrum=fftshift(fcoef);%将零点移到中心
temp=log(1+abs(spectrum));%对幅值做对数变换以压缩动态范围figure;
subplot(1,2,1);
imshow(temp,[]);
title('FFF');
subplot(1,2,2);
imshow(I2);
title('Source');
美女与猫——交换两幅图像的相位谱
A=imread('beauty.jpg');
B=imread('cat.jpg');%求傅里叶变换
Af=fft2(A);
Bf=fft2(B);%分别幅度谱和相位谱
AfA=abs(Af);
AfB=angle(Af);BfA=abs(Bf);
BfB=angle(Bf);%交换相位谱并重建复数矩阵
AfR=AfA .*cos(BfB)+AfA .*sin(BfB) .*i;
BfR=BfA .*cos(AfB)+BfA .*sin(AfB) .*i;%傅里叶反变换
AR=abs(ifft2(AfR));
BR=abs(ifft2(BfR));%显示图像
subplot(2,2,1);
imshow(A);
title('美女原图像');subplot(2,2,2);
imshow(B);
title('猫的原图像');subplot(2,2,3);
imshow(AR,[]);
title('美女的幅度谱与猫的相位谱组合');subplot(2,2,4);
imshow(BR,[]);
title('猫的幅度谱与美女的相位谱组合');
4频域滤波基础
频域滤波与空间域滤波的关系:傅里叶变换可以将图像从空域变换到频域,而傅里叶反变换则可以将图像的频谱逆变换为空域图像,也即人可以直接识别的图像。
注意:将频谱原点移至图像中心,因此需要构造对应的原点在中心的滤波器,并在滤波之后使用iffshift()函数将原点移回以进行反变换
5频率域低通滤波器
理想低通滤波器:最容易想到的衰减高频成分的方法就是在一个称为“截止频率”的位置“截断”所有的高频成分,将图像频谱中所有高于这一截止频率的频谱成分设为0,低于截止频率的成分保持不变。
I=imread('baby_noise.bmp');
%生成滤镜
ff=imgaussflpf(I,20);
%应用滤镜
out=imfreqfilt(I,ff);
其他相关文章请点击:
图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值
图像算法三:【图像增强--空间域】图像平滑、中值滤波、图像锐化
图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波
图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波
图像算法六:【彩色图像处理】彩色模型、彩图处理
图像算法七:【形态学图像处理】二值运算、膨胀、腐蚀
图像算法八:【图像分割】边缘检测(Roberts,Sobel,canny)、霍夫变换(hough)、阈值分割、区域分割
图像算法九:【图像特征提取】特征降维、PCA人脸特征抽取、局部二进制
~~~~