【OpenCV4】图像的傅里叶变换 cv::dft() 和逆变换 cv::idft() 解析(c++)

article/2025/9/26 21:40:15

图像傅里叶变换的作用:

  • 频谱分析,获取图像中高频低频的分布情况
  • 快速卷积,两个矩阵的傅里叶变换结果相乘

案例代码:

cv::Mat TestOpencvDft()
{cv::Mat lena = cv::imread("lena.jpg", 0);cv::resize(lena, lena, cv::Size(501, 501));// 确定适合做傅里叶变换的图像最佳尺寸int rows = cv::getOptimalDFTSize(lena.rows);int cols = cv::getOptimalDFTSize(lena.cols);// 扩展图像cv::Mat lena_pad;int up = (rows - lena.rows) / 2;int down = rows - lena.rows - up;int left = (cols - lena.cols) / 2;int right = cols - lena.cols - left;cv::copyMakeBorder(lena, lena_pad, up, down, left, right, cv::BORDER_CONSTANT);// 构建输入cv::Mat channels[2], complex;channels[0] = cv::Mat_<float>(lena_pad); // 构建实数部分channels[1] = cv::Mat::zeros(lena_pad.size(), CV_32FC1); // 构建虚数部分cv::merge(channels, 2, complex); // 构建复数矩阵// 离散傅里叶变换cv::Mat lena_dft;cv::dft(complex, lena_dft);// 拆分实数部分和虚数部分,将复数转化为幅值cv::Mat result_channels[2];cv::split(lena_dft, result_channels);cv::Mat amplitude;cv::magnitude(result_channels[0], result_channels[1], amplitude);// 将幅值进行对数缩小,公式: amp = log(amp+1),这里 +1 是为了防止有小于 1 的值转换后形成负数amplitude += 1;log(amplitude, amplitude);// 截取和原图对应的区域amplitude = amplitude(cv::Rect(up, left, lena.cols, lena.rows));cv::normalize(amplitude, amplitude, 0, 1, cv::NORM_MINMAX);// 最值中心化int center_x = amplitude.cols / 2;int center_y = amplitude.rows / 2;// 分解成 4 个象限cv::Mat up_left = amplitude(cv::Rect(0, 0, center_x, center_y));cv::Mat up_right = amplitude(cv::Rect(center_x, 0, center_x, center_y));cv::Mat down_left = amplitude(cv::Rect(0, center_y, center_x, center_y));cv::Mat down_right = amplitude(cv::Rect(center_x, center_y, center_x, center_y));// 对角区域调换cv::Mat temp;temp = up_left.clone();down_right.copyTo(up_left);temp.copyTo(down_right);temp = up_right.clone();down_left.copyTo(up_right);temp.copyTo(down_left);// 傅里叶逆变换cv::Mat re;cv::idft(lena_dft, re, cv::DFT_SCALE);cv::Mat re_channels[2];cv::split(re, re_channels);cv::Mat result;re_channels[0].convertTo(result, CV_8UC1);return result;
}

输入图片:
请添加图片描述
读取灰度图:
请添加图片描述
修改宽高
请添加图片描述
按照最优的宽高扩展图像
请添加图片描述
傅里叶变换结果
在这里插入图片描述
转换成幅值图:

  • 四个角是低频部分,中心是高频部分
    在这里插入图片描述
    最值中心化:
  • 将低频部分移动到中心
    在这里插入图片描述
    傅里叶逆变换结果
    请添加图片描述

http://chatgpt.dhexx.cn/article/uHBt6iQK.shtml

相关文章

Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号

文章目录 1. 定义2. 变换和处理3. 函数4. 实例演示例1&#xff1a;单频正弦信号&#xff08;整数周期采样&#xff09;例2&#xff1a;含有直流分量的单频正弦信号例3&#xff1a;正弦复合信号例4&#xff1a;含有随机干扰的正弦信号例5&#xff1a;实际案例 5. 联系作者 1. 定…

离散傅里叶变换(DFT/IDFT、FFT/IFFT)运算量的讨论

前言&#xff1a;关于为什么要写这个博客 最近在重新看《合成孔径雷达成像 算法与实现》这本书&#xff0c;看到“离散傅里叶变换记其逆变换的运算量级为”这句话&#xff0c;就想起当初在学《数字信号处理》中FFT那章节时&#xff0c;书中有对比DFT和FFT的运算量的一些文字&am…

OpenCV-离散傅里叶变换cv::dftcv::idft

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 函数原型 void dft(InputArray src, OutputArray dst, int flags 0, int nonzeroRows 0); void idft(InputArray src, Output…

12点的idft c语言,【整理】用IDFT实现UF-OFDM和OFDM的模拟调制

cooperate with Liu Lei 用IDFT实现OFDM的代码如下&#xff1a; N32; xrandint(1,N,[0 3]); x1qammod(x,4); f1:N; t0:0.001:1-0.001; w2*pi*f.*t; % w12*pi*(f0.2).*t; y1x1*exp(j*w);%子载波调制 x2ifft(x1,N); %ifft figure(1); plot(t,abs(y1)); hold on; stem(0:1/N:1-1/N…

离散傅立叶变换推导(DF、IDFT)

mazonex离散傅立叶变换视频笔记 需要先了解傅里叶变换推导(FT、IFT) 本文仅作为笔记&#xff0c;推导思想和图片来自视频 周期为 2 π 2\pi 2π的函数的复数形式展开(傅里叶级数) 在上一篇文章中part4中提到周期 T 2 L T2L T2L函数的复数形式展开为&#xff1a; f ( t ) ∑…

浅谈傅里叶——8. 一维iDFT的实现

这是本系列的最后一章&#xff0c;原先计划是把这部分内容一并挪到上一章里的&#xff0c;不过喜欢凑一个整数&#xff0c;而且想骗一点流量&#xff0c;所以把它们拆成了两部分。我们在前面的内容中&#xff0c;通过使用不同的频率信号对原始信号进行采样&#xff0c;从而分析…

idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现

根据定义式&#xff0c;可写出DFT的MATLAB代码如下[从玉良&#xff0c;2009&#xff0c;p72]&#xff1a; function [f, Xk] mydft(xn, fs, N) % DFT n [0:1:N-1]; k n; WN exp(-j*2*pi/N); nk n * k; % N^2 times multiply Xk xn(1:N) * WN.^nk; % N^3 times multiply f …

FT,DTFT,DFT,IDFT,FFT含义

1.傅立叶变换FT(Fourier Transform) 性质&#xff1a;时域连续&#xff0c;频域连续 周期信号只有傅立叶级数&#xff0c;严格意义上讲&#xff0c;没有傅立叶变换&#xff1b;但可以令周期信号的周期趋于无穷大&#xff0c;这样&#xff0c;将周期信号变为非周期信号&#x…

DFT与IDFT

DFT与IDFT 一.方法简介 序列x(n)(n0,1,…N-1)的DFT定义为 X &#xff08; k &#xff09; ∑ n 0 N − 1 x ( n ) e − j 2 π n k N X&#xff08;k&#xff09;\sum_{n0}^{N-1}x(n)e^{-j\frac{2\pi nk}{N}} X&#xff08;k&#xff09;n0∑N−1​x(n)e−jN2πnk​ 设 x …

IDFT的python实现

IDFT IDFT(Inverse Discrete Fourier Transform), 傅里叶逆变换&#xff0c;可以将频域信号转换到时域中, 它的公式非常简单&#xff1a; x [ n ] 1 N ∑ k 0 N − 1 X [ k ] e j 2 π k n / N x[n] \frac{1}{N} \sum_{k0}^{N-1} X[k] e^{j2\pi kn/N} x[n]N1​k0∑N−1​X…

一文搞懂:FT、DTFT、DFT、IDFT

一文搞懂&#xff1a;FT、DTFT、DFT、IDFT 写在前面一切为了计算机的处理推导步骤 总结 写在前面 近期重温了一下可爱的数字信号处理&#xff0c;又回想起当初被 FT、DTFT、DFT、IDFT 这几兄弟折腾的傻傻分不清的日子&#xff0c;今天特地在此对它们进行一个梳理。 珠玉在前&a…

LDUOJ spj 修改

特判使用教程 感谢涛巨 记录一下&#xff0c;省的以后忘记了。 /* Utility functions for writing output validators for the Kattis* problem format.** The primary functions and variables available are the following.* In many cases, the only functions needed are …

noip 2022 第二题 喵了个喵 meow 在 Lemon LemonLime 中 SPJ Special Judge 测评 配置 设置

noip 2022 第二题 喵了个喵 meow 在 Lemon LemonLime 中 SPJ Special Judge 测评配置设置 比赛目录如下&#xff1a; 用户程序(meow.cpp)如下&#xff1a; #include <bits/stdc.h> using namespace std;template<typename T> inline void read(T &x) {x 0; …

数据库例题(创建数据库SPJ包含S、P、J和SPJ表)

目录 运行说明 例题 例题解答 运行说明 1、运行环境&#xff1a;win10 2、所需步骤&#xff1a; &#xff08;1&#xff09; 通过PowerDesigner软件创建逻辑数据模型(CDM)&#xff0c;再将其转换为物理数据模型(PDM)&#xff0c;再导出为SQL语句。 &#xff08;2&#xff…

Lemon LemonLime 中 SPJ Special Judge 使用 实践 入门 a

精度需要SPJ 入门&#xff1a; 题目&#xff0c;以整数形式给定圆的半径&#xff0c;输出该圆的周长&#xff0c;该圆的面积。 比赛目录如下&#xff1a; 标准输入输出数据如下&#xff1a; circle1.in 1 circle1.ans 6.283185 3.141593 circle2.in 2 circle2.ans 12.566370 12…

数据库---[复习2]---数据查询---设有一个SPJ数据库,包括S、P、J及SPJ4个关系模式··· ···

文章目录 问题重述数据表S表&#xff1a;P表&#xff1a;J表&#xff1a;SPJ表&#xff1a; 问题解析1. 找出所有供应商的姓名和所在城市2. 找出所有零件的名称&#xff0c;颜色&#xff0c;重量3. 找出使用供应商S1所供应零件的工程号码4. 找出工程项目J2使用的各种零件的名称…

Lemon LemonLime 中 SPJ Special Judge 使用 实践 入门 c

多解需要SPJ 入门&#xff1a; 题目&#xff1a;输出 Hello, World!&#xff0c;大小写不限。 比赛目录如下&#xff1a; 标准输入输出数据如下&#xff1a; string1.in(空文件&#xff0c;里面没有任何内容) string1.ans Hello, World! 用户程序(string.cpp)如下&#xff1a; …

Lemon LemonLime 中 SPJ Special Judge 使用 实践 入门 b

多解需要SPJ 入门&#xff1a; 题目&#xff1a;给出一个不小于12的正整数n&#xff0c;请你输出两个合数&#xff0c;使他们的和等于n,注意&#xff0c;每个测试&#xff0c;有多组测试数据. 比赛目录如下&#xff1a; 标准输入输出数据如下&#xff1a; sum1.in 2 12 13 sum1…

如何配置luogu,codeforces的spj(special judge)

洛谷的spj配置很资瓷啊&#xff0c;以下部分引用来自luogu官方链接 codeforces同理 https://www.luogu.org/wiki/show?name%E5%B8%AE%E5%8A%A9%EF%BC%9Aspecial%20judge 搞了一上午1020导弹拦截的spj step1 先从链接中下载那个testlib-master文件解压后&#xff0c;在那个…

SPJ数据库例题(数据库实验)

题目内容&#xff1a; 设有一个SPJ数据库&#xff0c;包括S&#xff0c;P&#xff0c;J&#xff0c;SPJ四个关系模式&#xff1a; S&#xff08;SNO&#xff0c;SNAME&#xff0c;STATUS&#xff0c;CITY&#xff09;&#xff1b; P&#xff08;PNO&#xff0c;PNAME&#xff0…