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

本章的知识点快速查看:

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

~~~~

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

  1. c++ opencv数字图像处理:频率域滤波--低通滤波--理想低通滤波

    文章目录 前言 一.理想低通滤波器(ILPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.理想低通滤波器(ILPF) 通过设置频率半 ...

  2. 数字图像处理学习笔记5:频率域滤波1(傅里叶频谱图,低通滤波-平滑,高通滤波-锐化)

    文章目录 前言 一.傅里叶变换:傅里叶频谱图 二.低通滤波 1.理想低通滤波 2.布特沃斯低通滤波 3.高斯低通滤波 4.小结 三.高通滤波 1.理想高通滤波 2.布特沃斯高通滤波 3.高斯高通滤波 ...

  3. 数字图像处理 空间域高斯低通滤波 MATLAB实验

    一.原理_空间域高斯低通滤波 高斯低通滤波是一种使用的去噪滤波,可用于去除高斯噪声,且几乎没有振铃现象. 二.步骤 (1)读入原图像lena.bmp并显示: (2)对原图像分别添加高斯噪声,并显示加噪 ...

  4. 图像频率域分析之傅里叶变换

    Overview 欢迎访问 持续更新:https://cgabc.xyz/posts/bcb5a7d3/ 傅里叶变换基础 傅里叶级数 法国数学家傅里叶发现,任何周期函数都可以用正弦函数和余弦函数构成的 ...

  5. 数字图像处理——第四章 频率域图像增强

    文章目录 频率域图像增强 1. 傅里叶变换 1.1 一维傅里叶变换 1.2 二维傅里叶变换 2. 频率域滤波 2.1 陷波滤波器及其性质 2.2 空间域滤波与频率域滤波之间的对应关系 2.2.1 空间 ...

  6. 数字图像处理——第四章 频率域滤波

    数字图像处理--第4章 频率域滤波 文章目录 数字图像处理--第4章 频率域滤波 频率域 1.傅里叶级数原理 1.1.一维傅里叶变换 1.2.二维傅里叶变换 2.python×傅里叶级数 2.1.傅里 ...

  7. 【OpenCV 例程200篇】83. 频率域低通滤波:印刷文本字符修复

    [OpenCV 例程200篇]83. 频率域低通滤波案例:印刷文本字符修复 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更 ...

  8. python低通滤波器_[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波

    [Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波 发布时间:2019-04-28 20:35, 浏览次数:2739 , 标签: Python 该系列文章是讲解Python OpenCV ...

  9. opencv学习笔记22:傅里叶变换,高通滤波,低通滤波

    傅里叶变换原理 任何连续的周期信号,都可以由一组适当的正弦曲线组合而成. 下列左上图由其他三图构成. 左图经过傅里叶变换,由时域图转换到频域图.相互可逆 相位:不是同时开始的一组余弦函数,在叠加时要体 ...

最新文章

  1. 学python买什么书好-学python3什么书好
  2. 微服务架构可视化平台实践
  3. oracle语句mysql数据库名称_查询oracle数据库中当前数据库所有表的名称
  4. Flex学习的利器《Hello Flex4》
  5. 暂时放在首页,因为需要大家帮忙!!
  6. linux的vim显示E172,Linux命令:vim
  7. python numpy.random模块中提供啦大量的随机数相关的函数
  8. 十年再出发!阿里云智能总裁张建锋演讲全记录
  9. css中属性设置成百分比
  10. SIP(Session Initiation Protocol,会话初始协议)
  11. 【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)
  12. VBA 自动关闭 弹出的对话框 + VBA错误捕捉
  13. feign整合sential_Sentinel 和 Feign 集成时,方法名称写错
  14. gitgithub 的使用
  15. web 前端签名插件_10款前端开发神器,助你成前端高手?
  16. Spring Boot中自动注入没有生效,报NullPointer的问题
  17. mysql数据库的字符集设置
  18. 算法帝国:华尔街交易怪兽的核武器缔造史
  19. 如何基于 RISC-V CPU 集成一个 RISC-V SoC 呢?(上)
  20. ArcGIS(ESRI)的发展历史和版本历史(简介)

热门文章

  1. git 删除和复制远程分支
  2. MVP 模式实例解析
  3. bzoj1691/luogu2869 [USACO07DEC]挑剔的美食家 (STL::set)
  4. IE webDriver 驱动下载地址
  5. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
  6. [manacher] hdu 3294 Girls#39; research
  7. 转载 漫谈机器学习中的距离和相似性度量方法
  8. 装了xcode3.2 后再装xcode4.1 出现的问题 永远build不过
  9. Linux0.11 kernel/exit.c中的free_page_tables()
  10. 【python】for..range练习 与函数的练习题