Open CV中的2D子图像检测

时间:2010-12-31 12:06:45

标签: opencv image-processing template-matching

对于以下问题,OpenCV使用哪种最明智的算法或算法组合:

  • 我有一组小的2D图像。我想在更大的图像中检测这些子图像的位置。
  • 子图像通常约为32x32像素,较大的图像约为400x400。
  • 子图像并不总是正方形,因此包含alpha通道。
  • 可选 - 较大的图像可能是颗粒状的,压缩的,3D旋转的,或者稍微扭曲的

我尝试过cvMatchTemplate,结果很差(很难正确匹配,大量误报,所有匹配方法)。一些问题来自OpenCV似乎无法处理alpha通道模板匹配的事实。

我尝试过手动搜索,看起来效果更好,并且可以包含Alpha通道,但速度非常慢。

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

  1. cvMatchTemplate使用MSE(SQDIFF / SQDIFF_NORMED)类型的度量标准进行匹配。这种度量将严重地惩罚不同的α值(由于等式中的平方)。您是否尝试过规范化的互相关?众所周知,可以更好地模拟像素强度的线性变化。
  2. 如果NCC不能完成这项工作,您需要将图像转换为强度差异没有太大影响的空间。例如计算边缘强度图像(canny,sobel等)并在这些图像上运行cvMatchTemplate。
  3. 考虑到图像尺度的巨大差异(~10x)。必须使用图像金字塔来确定匹配的正确比例。建议你从一个比例开始(2 ^ 1 / x:x是正确的比例)并将估算值传播到金字塔上。

答案 1 :(得分:2)

您需要的是SIFT或SURF。

相关问题