在opencv中查找相位相关矩阵中的所有峰值

finding all peaks in phase correlation matrix in opencv

本文关键字:opencv 查找      更新时间:2023-10-16

我正在用OpenCv用C++编写一个程序,该程序需要找到两个图像之间的相位相关矩阵,并找到高于响应阈值的所有峰值。我确实找到了一个名为phaseCorres()的函数,但它只使用minMaxLoc()返回最高峰。如何修改此函数以检索所有峰值?

如果该函数对您没有用处,我认为您应该使用其他方法来解决您的问题。我建议您采取以下步骤:

  1. 使用DFT(离散傅立叶变换)将图像变换到频域
  2. 由结果得到复矩阵的相位
  3. 计算相关性
  4. 应用一些阈值

对于这些步骤,您需要:

  1. dft()
  2. phase()
  3. matchTemplate()method = CV_TM_CCORR_NORMED
  4. threshold()type = THRESH_TOZERO

希望这对你有帮助。

最好按照phaseCorres()中提到的顺序进行。我们可以在执行FFTShift()之后再添加两个步骤,即归一化和阈值。现在,如果我们只是将使用minMaxLoc()提取的每个峰值附近和峰值处的像素更改为0(即黑色),我们就可以使用minMaxLoc()迭代地找到所有峰值。但是,只需通过在程序中而不是在原始源代码中创建函数的副本来更改函数即可。