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

时间:2013-11-25 05:30:26

标签: c++ opencv correlation

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

2 个答案:

答案 0 :(得分:3)

我认为如果该功能对您没用,我会用其他方式来解决您的问题。我建议您执行以下步骤:

  1. 使用DFT(离散傅里叶变换)将图像转换为频域。
  2. 从结果复数矩阵得到阶段。
  3. 计算相关性。
  4. 应用一些阈值。
  5. 您需要执行以下步骤:

    1. dft()
    2. phase()
    3. matchTemplate()method = CV_TM_CCORR_NORMED
    4. threshold()type = THRESH_TOZERO
    5. 希望这会对你有所帮助。

答案 1 :(得分:1)

最好遵循phaseCorrRes()中提到的顺序。我们可以在携带FFTShift()之后再添加两个步骤,这些步骤是规范化和阈值。现在,如果我们只是将使用minMaxLoc()提取的每个峰值附近和每个峰值的像素更改为0(即黑色),我们可以使用minMaxLoc()迭代地找到所有峰值。但是,只需通过在程序中创建函数的副本而不是在原始源代码中更改函数。