图像比较-快速算法

米德

我正在寻找创建图像的基本表,然后将其与任何新图像进行比较,以确定新图像是否与基础完全相同(或近似)。

例如:如果您想减少同一图像的存储100次,则可以存储它的一个副本并提供指向它的参考链接。输入新图像后,您想与现有图像进行比较,以确保它不是重复的...点子?

我的一个想法是缩小到小缩略图,然后随机选择100个像素位置并进行比较。

凯尔·西梅克(Kyle Simek)

以下是解决此问题的三种方法(还有许多其他方法)。

  • 第一种是计算机视觉,关键点匹配的标准方法。这可能需要一些背景知识来实施,并且可能很慢。

  • 第二种方法仅使用基本图像处理,并且可能比第一种方法更快,并且易于实现。但是,它在可理解性上获得的东西却缺乏鲁棒性-在缩放,旋转或变色的图像上匹配失败。

  • 第三种方法既快速又健壮,但可能是最难实现的方法。

关键点匹配

比选择100个随机点好得多,而是选择100个重要点。图像的某些部分比其他部分(尤其是在边缘和角落)具有更多信息,而这些正是您要用于智能图像匹配的部分。Google的“关键点提取”和“关键点匹配”,您会发现很多关于该主题的学术论文。如今SIFT关键点可以说是最受欢迎的,因为它们可以匹配不同比例,旋转和光照下的图像。一些SIFT实现可以在这里找到

关键点匹配的一个缺点是天真的实现的运行时间:O(n ^ 2m),其中n是每个图像中关键点的数量,m是数据库中图像的数量。一些聪明的算法可能会更快地找到最接近的匹配项,例如四叉树或二进制空间分区。


替代解决方案:直方图方法

另一个不那么健壮但可能更快的解决方案是为每个图像构建特征直方图,并选择直方图最接近输入图像直方图的图像。我将其实现为本科生,我们使用了3个颜色直方图(红色,绿色和蓝色)以及两个纹理直方图(方向和比例)。我将在下面提供详细信息,但我应该注意,这仅适用于非常类似于数据库图像的匹配图像。重新缩放,旋转或变色的图像可能会因这种方法而失败,但是裁剪等微小变化不会破坏算法

计算颜色直方图非常简单-只需选择直方图桶的范围,然后为每个范围计算该范围内颜色的像素数即可。例如,考虑“绿色”直方图,并假设我们为直方图选择4个存储桶:0-63、64-127、128-191和192-255。然后,对于每个像素,我们查看绿色值,然后将计数添加到适当的存储桶中。完成计数后,我们将每个存储桶总数除以整个图像中的像素数,以获得绿色通道的归一化直方图。

对于纹理方向直方图,我们首先对图像进行边缘检测。每个边缘点都有一个法线向量,指向垂直于边缘的方向。我们将法线向量的角度量化为0和PI之间的6个桶中的一个(由于边具有180度对称性,我们将-PI和0之间的角度转换为0和PI之间的角度)。在计算了每个方向上的边缘点数量之后,我们得到了代表纹理方向的未归一化直方图,我们通过将每个存储桶除以图像中的边缘点总数来对其进行归一化。

为了计算纹理比例直方图,对于每个边缘点,我们测量了到具有相同方向的下一个最近边缘点的距离。例如,如果边缘点A的方向为45度,则算法会沿该方向行走,直到找到具有45度方向(或在合理偏差内)的另一个边缘点。在计算完每个边缘点的距离之后,我们将这些值转储到直方图中,并通过除以边缘点的总数对其进行归一化。

现在,每个图像都有5个直方图。要比较两个图像,请获取每个直方图桶之间的差的绝对值,然后对这些值求和。例如,要比较图像A和B,我们将计算

|A.green_histogram.bucket_1 - B.green_histogram.bucket_1| 

对于绿色直方图中的每个存储桶,对其他直方图重复上述操作,然后将所有结果相加。结果越小,匹配越好。对数据库中的所有图像重复上述操作,结果最小的比赛获胜。您可能希望有一个阈值,在该阈值之上算法将得出结论,未找到匹配项。


第三选择-关键点+决策树

第三种方法可能比其他两种方法快得多,这是使用语义文本森林(PDF)。这涉及提取简单的关键点并使用收集决策树对图像进行分类。这比简单的SIFT关键点匹配要快,因为它避免了昂贵的匹配过程,并且关键点比SIFT简单得多,因此关键点提取要快得多。但是,它保留了SIFT方法对旋转,缩放和照明的不变性,这是直方图方法缺少的一个重要功能。

更新

我的错误-Semantic Texton Forests论文不是专门针对图像匹配,而是针对区域标签。进行匹配的原始论文是:使用随机树进行关键点识别此外,以下论文继续发展这些思想并代表了最先进的技术(c。2010):

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章