检测较大图像中图像的位置

roo*_*ook 12 python image image-processing gdlib

如何在较大的图像中检测图像的位置?我有一个未经修改的图像副本.然后将该图像改变为任意分辨率并随机放置在任意大小的更大图像内.没有对结果图像进行其他变换.Python代码是理想的,它可能需要libgd.如果您知道解决此问题的好方法,您将获得+1.

use*_*973 7

有一个快速而肮脏的解决方案,只需在目标图像上滑动窗口并计算每个位置的一些相似度,然后选择具有最高相似度的位置.然后将相似度与阈值进行比较,如果得分高于阈值,则得出图像在那里,那就是位置; 如果分数低于阈值,则图像不存在.

作为相似性度量,您可以使用归一化相关或平方差的和(也称为L2范数).正如人们所提到的,这不会涉及规模变化.因此,您还要多次重新缩放原始图像,并使用每个缩放版本重复上述过程.根据输入图像的大小和可能的比例范围,这可能足够好,并且易于实现.

一个合适的解决方案是使用仿射不变量.尝试查找"宽基线立体匹配",人们在那个环境中查看了这个问题.使用的方法通常是这样的:

预处理原始图像

  • 运行"兴趣点检测器".这将在图像中找到易于定位的几个点,例如角落.有许多探测器,一个名为"harris-affine"的探测器运行良好并且很受欢迎(因此可能存在实现).另一个选择是使用高斯差分(DoG)检测器,它是为SIFT开发的,也可以很好地工作.
  • 在每个兴趣点,提取一个小的子图像(例如30x30像素)
  • 对于每个子图像,计算"描述符",该窗口中图像内容的一些表示.同样,存在许多描述符.要查看的内容是描述符描述图像内容的程度(您希望两个描述符仅在它们相似时才匹配)以及它是多么不变(您希望它在缩放后仍然相同).在您的情况下,我建议使用SIFT.它不像其他描述符一样不变,但可以很好地应对规模,在你的情况下,规模是唯一改变的.

在此阶段结束时,您将拥有一组描述符.

测试(使用新的测试图像).

  • 首先,您运行与步骤1中相同的兴趣点检测器并获得一组兴趣点.如上所述,您为每个点计算相同的描述符.现在,您还有一组目标图像的描述符.
  • 接下来,你寻找匹配.理想情况下,对于原始图像中的每个描述符,目标图像中将存在一些非常相似的描述符.(由于目标图像较大,也会有"剩余"描述符,即与原始图像中的任何内容都不对应的点.)因此,如果足够的原始描述符与足够的相似性匹配,那么您就知道目标是那里.此外,由于描述符是特定于位置的,因此您还将知道原始图像在目标图像中的位置.