C++ 如何使用fftw软件包编写计算模板(T)和二维图像(imin)之间二维卷积的函数?
我正在做一个项目,其中我有一个小模板(T)和一个图像(imin)。目的是使用沿fft的卷积来找到imin中最相似模式的位置。为了这个目的,我想用C++中的FFTW代码。但是,我是C++新手,不知道我应该如何使用这个工具箱。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,您可能需要考虑使用,这是计算机视觉
谢谢你,保罗。实际上,我想用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之前,您必须确保移动内核,否则结果中会出现半内核大小的位移。您是指卷积还是相关?对于模板匹配,通常使用互相关或归一化互相关。