图像傅里叶变换(二维离散傅里叶变换)
图像傅里叶变换
二维离散傅里叶变换是将图像从空间域转至频域,在图像增强、图像去噪、图像边缘检测、图像特征提取、图像压缩等等应用中都起着极其重要的作用。理论基础是任意函数都可以表示成正弦函数的线性组合的形式。公式如下
逆变换公式如下
令 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.介绍. DFT:(Discrete Fourier Transform)离散傅里叶变换是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样.在形式上,变换两端(时域 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换
目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...
- C++实现二维离散傅里叶变换
在上一篇文章<C++实现一维离散傅里叶变换>中,我们介绍了一维信号傅立叶变换的公式和C++实现,并阐述了频域幅值的意义. 一维傅立叶变换只适用于一维信号,例如音频数据.心脑电图等. 在图像 ...
- Python 二维离散傅里叶变换
Python 二维离散傅里叶变换 文章目录 Python 二维离散傅里叶变换 需要的库 计算两张图片的PSNR 二维离散傅里叶变换 二维离散傅里叶逆变换 频域平移 绘制频域图像 需要的库 import ...
- 对图像进行二维离散Fourier变换
用函数fft2对图像进行二维离散Fourier变换.用图像的形式分别显示清晰的频谱幅度和相位.对图像用窗函数加权,观察其Fourier变换,解释加窗前后的变化.对图像作Fourier变换和反变换.将图 ...
- 图像二维离散傅里叶变换、幅度谱、相位谱
clear, clc I = imread('...');F = fftshift(fft2(I)); % 对图像进行二维 DFT(fft2),并移至中心位置 magn = log(abs(F)); ...
- 二维离散傅里叶变换性质
1. 线性性质(加法定理): 2. 比例性质(相似性定理) 3. 可分离性: 4. 空间位移(位移定理): 5. 频率位移: 6. 周期性: 7. 共轭对称性: 8. 旋转不变性: 9. 平均值: 1 ...
- 在二维离散傅里叶变换中进行频谱平移(MATLAB::fft2shift)的作用
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 懒得自己敲文字描述了,直接摘取在一个资料上看到的 ...
- C++实现二维快速傅里叶变换(FFT)
上一篇文章里,我根据DFT公式用C++实现了二维离散傅里叶变换.但跑一张300*300的图片都要好几分钟,速度实在太慢了.我研究了下快速傅里叶变换,在网上找了一些资料,然后用C++实现了二维快速傅里叶 ...
最新文章
- TensorFlow 2.7 正式版上线,改进 TF/Keras 调试,支持 Jax 模型到 TensorFlow Lite转换
- 这个新方法,竟然能检测 Python 代码的好坏!
- php 面向对象开发 类的学习 一
- cordova最基本的热更新
- 1、SELECT:数据表查询语句
- 如何开发出优秀的APICloud应用
- [html] HTML全局属性(global attribute)有哪些(包含H5)?
- 关于科技创新,2021年政府工作报告这样说
- ngOnInit与constructor的区别
- eclipse添加或者绑定约束文件
- MoSE: 多任务混合序列专家模型
- 深入理解ob_flush和flush的区别(转)
- 打印html文件都是空白页,我打印时的额外空白页面(IE中除外) – 是我的打印css吗?...
- JavaScript巧学巧用
- slk文件转wma_什么是WMA文件(以及如何打开一个文件)?
- C语言equivalent用法,C语言相当于'setw'函数
- 儿童近视率攀升,什么原因容易导致近视呢?
- ES6-promise详解
- 医院导诊图怎么做,专业便捷、低成本的室内电子地图绘制平台!
- 高数值孔径(NA=0.68)聚焦透镜焦点区域激光光束的模拟