我正在做一个项目,其中有一个小模板(T)和一个图像(imin)。目的是使用沿 fft 的卷积来找到 imin 中最相似模式的位置。为此,我想在 C++ 中使用 FFTW 代码。但是,我是 C++ 新手,不知道我应该如何使用这个工具箱来实现这个目标。
谢谢保罗。实际上,我想将 FFT 用于我的 3D 案例,其中我有一个大的 3D 矩阵并希望与一个小的 3D 矩阵匹配。这就是我想使用 FFT 的原因。既然我应该尽快完成,你知道任何用于此目的的 C++ 代码吗?2D 和 3D(通过 FFT)。
我正在做一个项目,其中有一个小模板(T)和一个图像(imin)。目的是使用沿 fft 的卷积来找到 imin 中最相似模式的位置。为此,我想在 C++ 中使用 FFTW 代码。但是,我是 C++ 新手,不知道我应该如何使用这个工具箱来实现这个目标。
谢谢保罗。实际上,我想将 FFT 用于我的 3D 案例,其中我有一个大的 3D 矩阵并希望与一个小的 3D 矩阵匹配。这就是我想使用 FFT 的原因。既然我应该尽快完成,你知道任何用于此目的的 C++ 代码吗?2D 和 3D(通过 FFT)。
我相信除了上一篇文章中概述的步骤之外,您还必须确保在计算 FFT 之前移动内核,否则结果中会出现一半内核大小的位移。
与其使用 FFTW,不如考虑使用OpenCV,它通常是用于计算机视觉和图像处理的更高级别的 API,并且比从 FFT 等低级构建块构建自己的例程更容易使用。OpenCV 已经有一个模板匹配函数cvMatchTemplate,它可以在需要的地方“在后台”使用高效的 FFT 实现,因此性能应该不是问题。
如果您确实必须使用 FFTW,那么请准备好大量阅读文档和最初陡峭的学习曲线。互相关的步骤(我假设这是您要用于模板匹配的步骤)通常是:
然后,您可以检查一个或多个峰值的结果,该峰值应对应于目标图像中模板图像的位置。
请注意,为了获得更好的结果,您应该考虑使用归一化互相关,但这在频域中实现起来相当复杂。