Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用fftw软件包编写计算模板(T)和二维图像(imin)之间二维卷积的函数?_C++_Image Processing_Signal Processing_Fft_Fftw - Fatal编程技术网

C++ 如何使用fftw软件包编写计算模板(T)和二维图像(imin)之间二维卷积的函数?

C++ 如何使用fftw软件包编写计算模板(T)和二维图像(imin)之间二维卷积的函数?,c++,image-processing,signal-processing,fft,fftw,C++,Image Processing,Signal Processing,Fft,Fftw,我正在做一个项目,其中我有一个小模板(T)和一个图像(imin)。目的是使用沿fft的卷积来找到imin中最相似模式的位置。为了这个目的,我想用C++中的FFTW代码。但是,我是C++新手,不知道我应该如何使用这个工具箱。 谢谢你,保罗。实际上,我想用FFT来处理我的3D例子,在这个例子中,我有一个大的3D矩阵,我想匹配一个小的3D矩阵。这就是为什么我想使用FFT。既然我应该尽快做这件事,你知道这个目标的C++代码吗?2D和3D(FFT)。而不是使用FFTW,您可能需要考虑使用,这是计算机视觉

我正在做一个项目,其中我有一个小模板(T)和一个图像(imin)。目的是使用沿fft的卷积来找到imin中最相似模式的位置。为了这个目的,我想用C++中的FFTW代码。但是,我是C++新手,不知道我应该如何使用这个工具箱。

谢谢你,保罗。实际上,我想用FFT来处理我的3D例子,在这个例子中,我有一个大的3D矩阵,我想匹配一个小的3D矩阵。这就是为什么我想使用FFT。既然我应该尽快做这件事,你知道这个目标的C++代码吗?2D和3D(FFT)。

而不是使用FFTW,您可能需要考虑使用,这是计算机视觉和图像处理的高级API,比从FFT等低级别构建块构建自己的例程要容易得多。OpenCV已经有了一个模板匹配功能,并且它可以在需要的地方“在引擎盖下”使用高效的FFT实现,所以性能应该不会有问题

如果您确实必须使用FFTW,那么请准备好广泛阅读文档和开始时陡峭的学习曲线。交叉相关的步骤(我假设这是您希望用于模板匹配的步骤)通常为:

  • 为较大的图像大小创建正向/反向FFT计划
  • 使用前向FFT计划对目标图像进行FFT
  • 用零将模板图像填充到目标图像的大小
  • 使用前向FFT方案对填充模板图像进行FFT
  • 对填充图像模板进行复共轭FFT输出
  • 将目标图像FFT输出乘以填充图像模板FFT输出的复共轭
  • 使用反向FFT计划获取产品的IFFT
然后,您可以检查一个或多个峰值的结果,这些峰值应与模板图像在目标图像中的位置相对应


<>请注意,为了获得更好的结果,你应该考虑使用归一化互相关,但是,在频域中实现这一点要复杂得多。

我认为,除了上一篇文章中概述的步骤外,在计算FFT之前,您必须确保移动内核,否则结果中会出现半内核大小的位移。

您是指卷积还是相关?对于模板匹配,通常使用互相关或归一化互相关。