将旋转的位图与拼贴图像匹配

时间:2010-04-26 02:25:24

标签: bitmap pattern-matching

我的问题是我有一张详细街道地图的图片。在此地图上,可能会有一个特定的小图像(例如交通灯图标)以任何角度旋转,可能会调整大小。我在位图中有这个小图像。是否存在任何算法或技术,如果在大拼贴图像中存在,旋转并调整大小的副本,我可以找到该位图?

这类似于增强现实和定位标记图像的问题,但我的只是2D而没有透视失真。

编辑:我要匹配的拼贴图像中的小位图及其副本的大小大致相同,最大大小差异可能为30%。旋转是纯2D,没有剪切或任何扭曲。

1 个答案:

答案 0 :(得分:3)

这是一个非常棘手的问题。

第一:旋转/调整大小的解决方案是什么?如果你有足够的像素来避免混叠效果,那么你可能没问题,但是如果符号的一个或另一个表示非常小(例如,它在拼贴中很小或在你的样本镜头中很小),旋转到一个任意角度都可能不好。

另外,你确定没有剪切或其他类型的效果吗?我假设一个纯粹的2D旋转,其中旋转轴穿过相机的中心(即,停止标志将只是一个八角形,旋转,而不是剪切的八边形)。

如果你有耐心和样本数据,你可以尝试的一件事是实施Viola and Jones' face matching algorithm,但是对于标志。基本上,你需要一堆训练数据,你可以从背景/像素中掩盖你感兴趣的像素。然后,该算法是从该训练数据('示例')中随机选择像素,并且对于每个示例,计算几百到几千个统计('特征')。特征可以是从红色通道中的当前像素强度到蓝色通道中的5×5邻域的总强度的任何值。然后,为每个像素构建直方图,并尝试在直方图上找到与背景像素分开的前景像素的特征(即,前景全部在直方图的左侧,背景在右侧)。然后,您可以为作业选择最佳功能,然后运行它们以在拼贴中找到符号。

这是我的一位朋友的论文研究的简短摘要。这种问题很难轻易解决,而且很容易解决问题。

如果你只有一个标志和一个拼贴画而且只想要一个解决方案,你基本上可以用拼贴画卷积标志。取每个FFT,用零填充较小的图像,使其与较大的图像大小相同,然后进行逐点乘法。然后,对结果执行逆fft。您应该看到拼贴中标志位置的峰值,具体取决于旋转和缩放的严重程度(如果您认为它们非常不同,那么您可能需要尝试各种不同的缩放和旋转技术)。

第二种方法很容易在matlab中完成;否则,你需要一个像fftw这样的库才能把它拉下来。