当前位置: 首页 > news >正文

OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

mulSpectrums()是OpenCV CUDA 模块中用于在频域中执行两个复数频谱的逐元素乘法的函数。

该函数实现了以下运算:
d s t = s r c 1 ⋅ ( c o n j B ? c o n j ( s r c 2 ) : s r c 2 ) dst=src1⋅(conjB ? conj(src2) : src2) dst=src1(conjB?conj(src2):src2)

即:

  • 对两个复数频谱(CV_32FC2)进行逐元素相乘
  • 可选地对 src2 进行共轭,用于图像配准、互相关等操作

与 mulAndScaleSpectrums 的区别

函数名是否支持缩放因子 scale典型用途
cv::cuda::mulSpectrums❌ 不带缩放简单频域乘法
cv::cuda::mulAndScaleSpectrums✅ 带缩放更通用,适合需要归一化或缩放的场景

参数

参数名类型是否必需默认值描述
src1InputArray第一个输入频谱(复数形式,CV_32FC2
src2InputArray第二个输入频谱(复数形式,CV_32FC2
dstOutputArray输出结果,也是复数形式(CV_32FC2
flagsint标志位,通常设为 0,也可与 DFT 标志一致
conjBboolfalse是否对 src2 取共轭(用于相关计算或匹配)
streamStream&Stream::Null()CUDA 流对象,用于异步执行

代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/cudaarithm.hpp>int main() {// 创建测试图像cv::Mat h_imgA = cv::Mat::zeros(512, 512, CV_32F);cv::rectangle(h_imgA, cv::Rect(100, 100, 100, 100), cv::Scalar(255), -1);cv::Mat h_imgB = h_imgA.clone();cv::warpAffine(h_imgB, h_imgB, cv::getRotationMatrix2D(cv::Point2f(256, 256), 10, 1.0), h_imgB.size());// 上传到 GPUcv::cuda::GpuMat d_imgA, d_imgB;d_imgA.upload(h_imgA);d_imgB.upload(h_imgB);// 执行 DFT(使用 OpenCV 4.9 推荐的命名空间)cv::cuda::GpuMat d_fftA, d_fftB;cv::cuda::dft(d_imgA, d_fftA, d_imgA.size(), 0);cv::cuda::dft(d_imgB, d_fftB, d_imgB.size(), 0);// 频域乘法 + 共轭(用于图像配准 / 互相关)cv::cuda::GpuMat d_corr;cv::cuda::mulSpectrums(d_fftA, d_fftB, d_corr, 0, true); // conjB=true for correlation// 逆变换得到空间域互相关图cv::cuda::GpuMat d_icorr;cv::cuda::dft(d_corr, d_icorr, d_corr.size(), cv::DFT_INVERSE | cv::DFT_SCALE);// 下载并显示结果cv::Mat h_icorr;d_icorr.download(h_icorr);// 处理逆变换后的结果std::vector<cv::Mat> planes;cv::split(h_icorr, planes); // 分离出实部和虚部// 计算幅度谱(sqrt(real^2 + imag^2))cv::Mat magnitude;cv::magnitude(planes[0], planes[1], magnitude);// 归一化幅度谱以便可视化cv::normalize(magnitude, magnitude, 0, 1, cv::NORM_MINMAX);cv::imshow("Cross Correlation", magnitude);cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 多商户1.8.1版本前端问题优化集合指南
  • 可视化图解算法41:搜索二维矩阵(二维数组中的查找)
  • OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution
  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • Linux 判断是否有未挂载的盘 分区挂载 (挂载所有大小的盘,包括挂载超过2T的盘)
  • Qt框架核心组件完全指南:从按钮交互到定时器实现
  • Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
  • 基于STM32的光照测量报警Proteus仿真设计+程序设计+设计报告+讲解视频
  • 供应链风险管理中,企业如何识别关键风险因素?
  • 【C++】模版(1)
  • 机器学习--特征工程具体案例
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(4)
  • WPF Data Binding 及经典应用示例
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
  • 【占融数科-注册/登录安全分析报告】
  • Kotlin Compose Button 实现长按监听并实现动画效果
  • Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
  • 深度学习---模型预热(Model Warm-Up)
  • 【实战】GPT-SoVITS+内网穿透:3分钟搭建可公网访问的语音克隆系统
  • 苍穹外卖 - Day03
  • 确诊前列腺癌后,拜登首次发声
  • 俄乌上周在土耳其直接谈判,外交部回应
  • 520、521婚登预约迎高峰?上海民政:将增派力量,新人可现场办理
  • 倒计时1天:走进“中国荔乡”茂名,探寻农交文旅商融合发展新模式
  • 水果预包装带来的环境成本谁来分担?
  • 茅台总经理到访五粮液:面对白酒行业周期性调整,需要团结一心的合力