10

从 OpenCV 用于以下问题的最明智的算法或算法组合是什么:

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

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

我尝试过手动搜索,似乎效果更好,并且可以包含 alpha 通道,但速度很慢。

谢谢你的帮助。

4

2 回答 2

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

你需要的是像 SIFT 或 SURF 这样的东西。

于 2011-01-01T03:05:41.213 回答