首页 > 其他分享 >OpenCV(cv::idft())

OpenCV(cv::idft())

时间:2024-08-29 14:27:02浏览次数:10  
标签:idft DFT 频域 OpenCV 图像 傅里叶 cv

目录



cv::idft() 是 OpenCV 中用于计算逆离散傅里叶变换 (IDFT) 的函数,它将频域的数据转换回时域。它常与 cv::dft() 配合使用,例如在进行频域滤波后,需要使用 cv::idft() 将处理后的数据转换回图像的空间域。

1. 函数

void cv::idft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0);

参数:

  1. src:

    • 输入频域数据,可以是单通道或多通道的复数矩阵。复数矩阵通常表示为双通道矩阵,其中第一个通道是实部,第二个通道是虚部。
  2. dst:

    • 输出的时域数据,通常是复数图像(双通道)或者实数图像,取决于输入的类型以及设置的标志。如果输入是复数形式,输出将包含变换后的复数图像。
  3. flags:

    • 用于控制逆傅里叶变换的标志,可以是以下值的组合:
      • DFT_INVERSE:指定要执行逆变换。注意:对于 cv::idft() 这个标志是隐含的,不需要显式使用。
      • DFT_SCALE:对结果进行缩放,通常在执行反向变换时使用,确保输出和原始输入的尺度相匹配。
      • DFT_ROWS:仅对每一行进行一维逆傅里叶变换,而不是对整个二维矩阵进行变换。
      • DFT_REAL_OUTPUT:强制输出为实数,即使输入是复数形式。适用于大部分情况下只关心实部的图像恢复。
  4. nonzeroRows:

    • 指定非零行的数量,通常用于优化计算。如果图像中的某些行是全零,可以通过设置这个参数来加速计算。一般设置为 0

逆傅里叶变换的作用:

逆傅里叶变换的作用是将频域中的数据转换回时域。例如,如果在频域进行了滤波、卷积或其他操作,通过逆变换可以将修改后的频率数据恢复为原始图像。



2. 示例

下面的代码展示了如何使用 cv::idft() 将频域数据转换回时域:

#include <opencv2/opencv.hpp>

int main() {
    // 读取图像并将其转换为灰度图像
    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);

    // 将图像转换为浮点型
    cv::Mat floatImg;
    img.convertTo(floatImg, CV_32F);

    // 对图像进行傅里叶变换
    cv::Mat dftResult;
    cv::dft(floatImg, dftResult, cv::DFT_COMPLEX_OUTPUT);

    // 对傅里叶变换的结果进行逆变换
    cv::Mat idftResult;
    cv::idft(dftResult, idftResult, cv::DFT_SCALE | cv::DFT_REAL_OUTPUT);

    // 结果会保存在 idftResult 中,这里将其归一化到 0-255 并显示
    cv::normalize(idftResult, idftResult, 0, 255, cv::NORM_MINMAX);
    idftResult.convertTo(idftResult, CV_8U);

    // 显示图像
    cv::imshow("Reconstructed Image", idftResult);
    cv::waitKey(0);

    return 0;
}
  1. 傅里叶变换和逆变换的组合
    在上述代码中,首先对图像执行 cv::dft() 将其转换到频域。然后,通过 cv::idft() 将频域数据转换回原始图像。这在频域滤波、卷积加速等场景中非常常见。

  2. 使用标志 DFT_SCALE
    在逆傅里叶变换中,通常会使用 DFT_SCALE 标志以确保输出图像与输入图像的大小和范围相一致。如果不使用此标志,输出的值可能会相对于原始图像有所偏差。

  3. DFT_REAL_OUTPUT 标志:
    当我们不关心复数部分(虚部)时,通常会使用 DFT_REAL_OUTPUT 标志将结果输出为实数图像。这样有助于恢复原始的灰度图像。



3. 应用场景

cv::idft() 在频域操作中非常重要,常见的应用包括:

  1. 频域滤波:通过频域滤波去除图像中的噪声、增强边缘等操作后,通过 cv::idft() 恢复到空间域。
  2. 卷积加速:在频域进行卷积后,通过逆傅里叶变换返回到时域,恢复卷积后的图像。
  3. 图像重构:在分析图像的频率成分后,使用逆傅里叶变换可以将图像重构出来。


4. 注意事项

  1. 尺寸匹配:在使用 cv::idft() 时,输入的频域数据尺寸应与原始输入相匹配,否则会导致输出结果错误。
  2. 复数与实数:在逆傅里叶变换中,如果输入是复数矩阵,输出可能仍然包含复数成分。通过使用 DFT_REAL_OUTPUT 标志可以强制输出为实数图像。
  3. 缩放问题:如果在进行傅里叶变换时没有进行适当的缩放处理,恢复出的图像可能会出现亮度变化或失真,因此使用 DFT_SCALE 标志来保持结果与原图像一致非常重要。


5. 总结

cv::idft() 是 OpenCV 中用于将频域数据转换回时域的重要函数。它在进行频域处理后恢复图像的过程中起着至关重要的作用。通过与 cv::dft() 配合使用,它可以帮助实现滤波、卷积加速等操作,同时保持数据的完整性。在使用中需要关注输入类型、标志设置以及数据缩放处理,以确保输出图像的质量。



标签:idft,DFT,频域,OpenCV,图像,傅里叶,cv
From: https://www.cnblogs.com/keye/p/18386595

相关文章

  • OpenSSH 存在输入验证错误漏洞(CVE-2019-16905) 解决
    1、下载文件:zlib-1.2.11.tar.gzopenssh-8.3p1.tar.gzopenssl-1.1.1g.tar.gz 2、解压升级包tar--no-same-owner-zxvfzlib-1.2.11.tar.gztar--no-same-owner-zxvfopenssh-8.3p1.tar.gztar--no-same-owner-zxvfopenssl-1.1.1g.tar.gz 3、编译安装zlibcdzli......
  • Clion\+OpenCV(C\+\+版)开发环境配置教程Win/Mac
    合集-环境配置(2)1.最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!08-282.最简最速!C++版OpenCV安装配置教程Win/Mac!!!08-28收起Clion+OpenCV(C++版)开发环境配置教程Win/Mac平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定......
  • Datawhale AI 夏令营 CV方向 Task 1
    一、赛事背景        城市治理赛道——随着城市化进程的加快,城市管理面临着前所未有的挑战。占道经营、垃圾堆放和无照经营游商等问题对城市管理提出了更高的要求。本赛道聚焦城市违规行为的智能检测,要求选手研究开发高效可靠的计算机视觉算法,提升违规行为检测识别的......
  • OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141561865长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…OpenCV开发专栏......
  • Datawhale AI 夏令营 CV方向 Task 2
    一、YOLO模型简介        YOLO模型是在图像和视频中识别感兴趣物体对象,通常通过边界框形式来识别物体。以下是物体检测的一些关键概念和步骤:输入:物体检测算法的输入通常是一张图像或视频帧。特征提取:算法使用深度学习模型(如卷积神经网络CNN)来提取图像的特征。这些......
  • SciTech-BigDataAIML-CV+CG-Digital Image/Signal Processing- RGB图片转换成 RGBA格
    RGBA与RGBRGB是Color(颜色)数值化为R(红色)、G(绿色)、B(蓝色)**三Channel(分量),每分量数值的取值范围为0-255。通过组合这三个ColorChannel(颜色分量)的不同数值,可以得到各种各样的颜色。RGBA是RGB颜色模型的一种扩展,只增加了一个表示透明度(Alpha)的透明分量(A)。A代......
  • RFFT:数据与代码已开源,京东推出广告图生成新方法 | ECCV 2024
    论文将多模态可靠反馈网络(RFNet)结合到一个循环生成图片过程中,可以增加可用的广告图片数量。为了进一步提高生产效率,利用RFNet反馈进行创新的一致条件正则化,对扩散模型进行微调(RFFT),显著增加生成图片的可用率,减少了循环生成中的尝试次数,并提供了高效的生产过程,而不牺牲视觉吸引力。......
  • PCSR:已开源,三星提出像素级路由的超分辨率方法 | ECCV 2024
    基于像素级分类器的单图像超分辨率方法(PCSR)是一种针对大图像高效超分辨率的新方法,在像素级别分配计算资源,处理不同的恢复难度,并通过更精细的粒度减少冗余计算。它还在推断过程中提供可调节性,平衡性能和计算成本而无需重新训练。此外,还提供了使用K均值聚类进行自动像素分配以及后......
  • EasyCVR视频汇聚平台中的H.265技术:助力实现大规模高效流畅的视频监控应用
    随着视频监控技术的不断发展和用户对视频质量要求的不断提高,高效能、低延迟的视频编码技术成为视频监控系统中的重要支撑。TSINGSEE青犀视频旗下的EasyCVR视频汇聚平台凭借其强大的视频处理能力和对H.265技术的支持,在视频监控系统中展现出显著的应用优势。本文将详细探讨EasyCVR平......
  • 守护夏日清凉:EasyCVR+AI视频管理方案为水上乐园安全保驾护航
    随着夏季的来临,水上乐园成为了人们避暑消夏、亲子互动的理想去处。然而,随着游客量的激增,如何确保水上乐园的安全与秩序,提升游客体验,成为了管理者亟待解决的问题。为此,引入一套高效、智能的视频监控方案显得尤为重要。本文将详细介绍一种专为夏季水上乐园设计的视频智能监控方案,旨......