我的问题是我有一张详细的街道地图的图像。在这张地图上,可以有一个标志(如红绿灯图标)的某个小图像以任意角度旋转,也可以调整大小。我有一个位图中的小图像。有没有什么算法或技术可以用来定位这个位图,如果它的副本存在,旋转或调整大小,在大的拼贴图像中?
这类似于增强现实和定位标记图像的问题,但我的图像只是2D的,没有透视失真。
编辑:我想要匹配的拼贴图像中的小位图和它的副本大小大致相同,最大可能相差30%。旋转是纯2D的,没有剪切或任何变形。
发布于 2010-04-26 10:40:29
这是一个非常棘手的问题。
首先:旋转/调整大小的分辨率是什么?如果你有足够的像素来避免混叠效果,那么你可能是可以的,但如果符号的一个或另一个表示非常小(即,它在拼贴画中很小或在样本照片中很小),旋转到任意角度可能会很糟糕。
另外,你确定你没有剪切或其他类型的影响吗?我假设是纯2D旋转,旋转轴穿过相机的中心(即,停止标志将只是一个八角形,旋转,而不是剪切的八角形)。
如果您有耐心和样本数据,您可以尝试的一件事是实现Viola and Jones' face matching algorithm,但这是为了符号。基本上,你需要一堆训练数据,其中你已经从背景中屏蔽了你感兴趣的像素/不感兴趣的像素。然后,算法从训练数据中随机选择像素(“示例”),并为每个示例计算几百到几千个统计量(“特征”)。特征可以是从红色通道中的当前像素强度到蓝色通道中5x5邻域的总和强度的任何值。然后,为每个像素构建一个直方图,并尝试在直方图上找到前景像素与背景像素分离的特征(即,前景都在直方图的左侧,背景在右侧)。然后为作业选择最好的特征,并运行它们来查找拼贴中的标志。
这是我的一位朋友的学位论文研究的简要总结。这类问题很难解决,也很容易给出一个糟糕的解决方案。
如果你只有一个符号和一个拼贴画,并且只想有一个解决方案,你基本上可以将符号与拼贴画进行卷积。取每个图像的FFT,用零填充较小的图像,使其与较大的图像大小相同,然后进行逐点乘法。然后,对结果执行逆fft。根据旋转和缩放的严重程度(如果您认为它们非常不同,则可能需要尝试各种不同的缩放和旋转技术),您应该在拼贴图中看到标志位置的尖峰。
第二种方法在matlab中很容易实现;否则,您将需要一个像fftw这样的库来完成它。
https://stackoverflow.com/questions/2710799
复制相似问题