图像傅里叶变换

二维离散傅里叶变换是将图像从空间域转至频域,在图像增强、图像去噪、图像边缘检测、图像特征提取、图像压缩等等应用中都起着极其重要的作用。理论基础是任意函数都可以表示成正弦函数的线性组合的形式。公式如下

逆变换公式如下

令 R(u,v) 和 I(u,c) 分别表示 F(u,v) 的实部和虚部。
幅度谱为

相位谱为

指数表示

功率谱为

示例演示

首先我们演示下,从一幅图像得到其的幅度谱和相位谱,然后再根据幅度谱和相位谱还原图像。代码如下。

void MainWindow::dftTransform(cv::Mat &image)
{image.convertTo(image, CV_32F);std::vector<cv::Mat> channels;split(image, channels);  //分离图像的RGB通道,cv::Mat image_B = channels[0]; //OpenCV:BGR//expand input image to optimal sizeint m1 = cv::getOptimalDFTSize(image_B.rows);  //选取最适合做fft的宽和高int n1 = cv::getOptimalDFTSize(image_B.cols);cv::Mat padded;//填充0cv::copyMakeBorder(image_B, padded, 0, m1 - image_B.rows, 0, n1 - image_B.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));cv::Mat planes[] = { cv::Mat_<float>(padded), cv::Mat::zeros(padded.size(), CV_32F) };cv::Mat complexI;cv::merge(planes, 2, complexI);  //planes[0], planes[1]是实部和虚部cv::dft(complexI, complexI, cv::DFT_SCALE | cv::DFT_COMPLEX_OUTPUT);cv::split(complexI, planes);//定义幅度谱和相位谱cv::Mat ph, mag, idft;cv::phase(planes[0], planes[1], ph);cv::magnitude(planes[0], planes[1], mag);  //由实部planes[0]和虚部planes[1]得到幅度谱mag和相位谱phcv::imshow("phase", ph);cv::imshow("magnitude", mag);/*如果需要对实部planes[0]和虚部planes[1],或者幅度谱mag和相位谱ph进行操作,在这里进行更改*/cv::polarToCart(mag, ph, planes[0], planes[1]);  //由幅度谱mag和相位谱ph恢复实部planes[0]和虚部planes[1]cv::merge(planes, 2, idft);cv::dft(idft, idft, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT);image_B = idft(cv::Rect(0, 0, image.cols & -2, image.rows & -2));image_B.copyTo(channels[0]);merge(channels, image);image.convertTo(image, CV_8U);cv::imshow("idft", image);
}

运行结果

图像傅里叶变换(二维离散傅里叶变换)相关推荐

  1. 傅里叶变换 二维离散傅里叶变换

    1.介绍. DFT:(Discrete Fourier Transform)离散傅里叶变换是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样.在形式上,变换两端(时域 ...

  2. 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换

    目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...

  3. C++实现二维离散傅里叶变换

    在上一篇文章<C++实现一维离散傅里叶变换>中,我们介绍了一维信号傅立叶变换的公式和C++实现,并阐述了频域幅值的意义. 一维傅立叶变换只适用于一维信号,例如音频数据.心脑电图等. 在图像 ...

  4. Python 二维离散傅里叶变换

    Python 二维离散傅里叶变换 文章目录 Python 二维离散傅里叶变换 需要的库 计算两张图片的PSNR 二维离散傅里叶变换 二维离散傅里叶逆变换 频域平移 绘制频域图像 需要的库 import ...

  5. 对图像进行二维离散Fourier变换

    用函数fft2对图像进行二维离散Fourier变换.用图像的形式分别显示清晰的频谱幅度和相位.对图像用窗函数加权,观察其Fourier变换,解释加窗前后的变化.对图像作Fourier变换和反变换.将图 ...

  6. 图像二维离散傅里叶变换、幅度谱、相位谱

    clear, clc I = imread('...');F = fftshift(fft2(I)); % 对图像进行二维 DFT(fft2),并移至中心位置 magn = log(abs(F)); ...

  7. 二维离散傅里叶变换性质

    1. 线性性质(加法定理): 2. 比例性质(相似性定理) 3. 可分离性: 4. 空间位移(位移定理): 5. 频率位移: 6. 周期性: 7. 共轭对称性: 8. 旋转不变性: 9. 平均值: 1 ...

  8. 在二维离散傅里叶变换中进行频谱平移(MATLAB::fft2shift)的作用

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 懒得自己敲文字描述了,直接摘取在一个资料上看到的 ...

  9. C++实现二维快速傅里叶变换(FFT)

    上一篇文章里,我根据DFT公式用C++实现了二维离散傅里叶变换.但跑一张300*300的图片都要好几分钟,速度实在太慢了.我研究了下快速傅里叶变换,在网上找了一些资料,然后用C++实现了二维快速傅里叶 ...

最新文章

  1. TensorFlow 2.7 正式版上线,改进 TF/Keras 调试,支持 Jax 模型到 TensorFlow Lite转换
  2. 这个新方法,竟然能检测 Python 代码的好坏!
  3. php 面向对象开发 类的学习 一
  4. cordova最基本的热更新
  5. 1、SELECT:数据表查询语句
  6. 如何开发出优秀的APICloud应用
  7. [html] HTML全局属性(global attribute)有哪些(包含H5)?
  8. 关于科技创新,2021年政府工作报告这样说
  9. ngOnInit与constructor的区别
  10. eclipse添加或者绑定约束文件
  11. MoSE: 多任务混合序列专家模型
  12. 深入理解ob_flush和flush的区别(转)
  13. 打印html文件都是空白页,我打印时的额外空白页面(IE中除外) – 是我的打印css吗?...
  14. JavaScript巧学巧用
  15. slk文件转wma_什么是WMA文件(以及如何打开一个文件)?
  16. C语言equivalent用法,C语言相当于'setw'函数
  17. 儿童近视率攀升,什么原因容易导致近视呢?
  18. ES6-promise详解
  19. 医院导诊图怎么做,专业便捷、低成本的室内电子地图绘制平台!
  20. 高数值孔径(NA=0.68)聚焦透镜焦点区域激光光束的模拟

热门文章

  1. CAD图片怎么转成PDF格式?这些方法轻松转换
  2. 在Three.js中玩纹理投影
  3. java装饰模式实例解析
  4. “阿里新零售技术”天团闪耀硅谷 淘系技术推动线上新零售业产业革命
  5. 测听hl和nhl的区别_播放NHL曲棍球的最便宜方法(无电缆)
  6. 不动点求数列通项原理_不动点求数列通项的原理
  7. 英语思维导图大全 语态(十一)
  8. 在中国,把区块链玩得转的公司有这几家
  9. 【最佳实践】携程服务注册中心架构演进
  10. 财务自由第一步:如何实现家庭现金流自由化