当前位置: 首页 > 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;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/527347.html

相关文章:

  • 耗时十分钟,做了一个 uniapp 灵感泡泡机
  • 【QT】一个界面中嵌入其它界面(三)
  • DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成
  • 系统安全及应用学习笔记
  • MySQL数据库基础 -- SQL 语句的分类,存储引擎
  • 系统安全应用
  • 【C++】map和multimap的常用接口详解
  • flask蓝图的导入与注册
  • VS2017编译librdkafka 2.1.0
  • 【语音克隆Open Voice的使用】
  • mysql的安装方式
  • 【成品设计】基于STM32的环境监控系列
  • labview硬件开发板——LED流水灯
  • 微服务项目->在线oj系统(Java版 - 4)
  • 【Windows系统】向量数据库Milvus安装教程
  • MySQL - 如何突破单库性能瓶颈
  • vue Element-ui对图片上传和选用时的比例控制
  • C+++STL(一)
  • 自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)
  • Flink概述
  • 问题 | 代码审查:函数是否包含返回语句
  • C++11特性
  • 计算机视觉设计开发工程师学习路线
  • 远程数据采集智能网关支持下的雨洪资源分布式监测网络搭建实践
  • 【每天一个知识点】embedding与representation
  • 关于 Web 漏洞原理与利用:2. XSS(跨站脚本攻击)
  • Scala 访问修饰符
  • java基础-关键字:static、单例模式
  • JDBC指南
  • 【线下沙龙】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!