图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波

        频率域滤波与空间域滤波殊途同归,空间域图像增强与频率域图像增强是两种截然不同的技术,实际上在相当程度上说它们是在不同的领域做相同的事情,只是有些滤波更适合在空间域完成,而有些则更适合在频率域中完成。

本章的知识点快速查看:

  1. 傅里叶变换;
  2. 快速傅里叶变换;
  3. 频域滤波;
  4. 频域低通滤波;
  5. 频域高通滤波;

傅里叶变换

    一说到傅里叶,这可是贯穿我们从高中数学1到大二,没有哪个受过数学的苦的人不知道得了。而傅里叶级数,就是正弦加上余弦函数的加权和来表示的。

快速傅里叶变换

频域滤波

频域低通滤波

频域高通滤波

 

2傅里叶变换基础知识

傅里叶级数:法国数学家傅里叶发现任何周期函数只要满足一定条件(狄利赫里条件),都可以用正弦函数和余弦函数构成无穷级数,却以不同频率的正弦和余弦函数的加权来表示,称为傅里叶级数。

傅里叶变换的实质——基的转换:对于给定函数f(x),关键是选择合适的基,使得f(x)在这组基下,表现出需要的特性。当某一组基不满足要求时,就需要通过变换函数转换到另一组基下

 

3快速傅里叶变换及其实现

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人脸特征抽取、局部二进制

~~~~

你可能感兴趣的:(图像算法,MATLAB)