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

OpenCV(cv::dft())

时间:2024-08-29 14:28:15浏览次数:3  
标签:变换 dft OpenCV magnitude 图像 傅里叶 cv

目录



cv::dft() 是 OpenCV 中用于计算离散傅里叶变换 (DFT) 的函数。傅里叶变换是一种重要的数学工具,用于将信号从时域转换到频域。这在图像处理和信号处理领域非常有用,例如滤波、卷积、图像频率分析等。

1. 函数定义

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

参数:

  1. src:

    • 输入图像或矩阵。可以是实数图像(单通道或多通道),也可以是复数图像(双通道)。图像的大小必须是 2 的幂次,或者要用特定的标志来处理非 2 的幂次图像。
  2. dst:

    • 输出结果图像或矩阵,结果的类型取决于输入数据类型。对于实数输入,输出通常为双通道图像,其中第一个通道是实部,第二个通道是虚部。
  3. flags:

    • 用于指定傅里叶变换的操作方式的标志。常用的标志包括:
      • DFT_INVERSE:进行反向傅里叶变换,而不是正向傅里叶变换。
      • DFT_SCALE:对结果进行缩放,使其符合原始输入的大小。
      • DFT_ROWS:对每一行进行一维傅里叶变换,而不是对整个图像进行二维变换。
      • DFT_COMPLEX_OUTPUT:强制输出为复数图像,即使输入为实数图像。
      • DFT_REAL_OUTPUT:强制输出为实数图像,仅在输入是复数图像时有效。
  4. nonzeroRows:

    • 指定非零行的数量。这个参数一般用于优化处理,如果知道图像的某些行是全零,可以加速计算。大多数情况下为 0。


2. 示例

以下是 cv::dft() 函数的一个简单使用示例:

#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 planes[2];
    cv::split(dftResult, planes); // 将复数图像分离为实部和平部

    // 计算幅值 (magnitude = sqrt(re^2 + im^2))
    cv::Mat magnitude;
    cv::magnitude(planes[0], planes[1], magnitude);

    // 进行对数尺度变换 (为了可视化,取log)
    magnitude += cv::Scalar::all(1);  // 避免log(0)
    cv::log(magnitude, magnitude);

    // 将结果归一化到 [0, 1] 范围
    cv::normalize(magnitude, magnitude, 0, 1, cv::NORM_MINMAX);

    // 显示结果
    cv::imshow("Magnitude Spectrum", magnitude);
    cv::waitKey(0);

    return 0;
}


3. 使用场景

cv::dft() 主要用于频域操作,以下是一些常见应用场景:

  1. 频域滤波:通过傅里叶变换将图像转换到频域后,可以很容易地进行低通或高通滤波。
  2. 卷积加速:利用卷积定理,通过傅里叶变换将卷积操作加速(即在频域进行点乘,再通过反向傅里叶变换回到时域)。
  3. 频率分析:对图像的频率成分进行分析,检测图像中的周期性结构或噪声。


4. 注意事项

  • 傅里叶变换的输入大小最好是 2 的幂次,这样可以提高效率。如果不是 2 的幂次,OpenCV 会自动对图像进行填充(zero-padding)。
  • cv::dft() 的输出结果是复数形式,通常需要进行幅值和相位的计算。
  • 对于图像可视化时,需要对结果进行适当的缩放和对数变换。


5. 总结

cv::dft() 是一个功能强大的函数,允许用户将图像从时域转换到频域,从而可以在频域进行更高效的图像处理操作。它不仅可以用于滤波,还可以加速卷积运算,处理周期性信号等。在使用时,需考虑输入的大小、输出类型以及是否需要缩放结果。



标签:变换,dft,OpenCV,magnitude,图像,傅里叶,cv
From: https://www.cnblogs.com/keye/p/18386594

相关文章

  • OpenCV(cv::mulSpectrums())
    目录1.函数定义2.工作原理3.示例4.典型应用5.总结cv::mulSpectrums()是OpenCV中用于频域信号处理的一个函数,它可以将两个频域的傅里叶变换结果相乘。通常用于频域滤波、卷积、相关性计算等任务。1.函数定义voidcv::mulSpectrums(InputArraya,InputArrayb,Out......
  • OpenCV(cv::idft())
    目录1.函数2.示例3.应用场景4.注意事项5.总结cv::idft()是OpenCV中用于计算逆离散傅里叶变换(IDFT)的函数,它将频域的数据转换回时域。它常与cv::dft()配合使用,例如在进行频域滤波后,需要使用cv::idft()将处理后的数据转换回图像的空间域。1.函数voidcv::idft(......
  • 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均值聚类进行自动像素分配以及后......