用于比较数组相似性的最佳比较算法是什么?

时间:2016-12-11 04:28:39

标签: c++ arrays image algorithm image-processing

我正在构建一个程序,它接受2个数组并返回一些显示它们相似程度的值。例如,差异很小的图像会有很好的分数,而差异很大的图像会得分较差。

到目前为止,我遇到的这个问题的唯一两个算法是平方差和和归一化相关的总和。

这两个实现起来都相当简单,但我想知道是否还有其他算法我无法找到我可以使用的?

此外,前面提到的哪种方法最好?很高兴知道它们的准确性和效率。

谢谢,

2 个答案:

答案 0 :(得分:1)

比较图像通常取决于您正在处理的应用程序。通常,使用的距离函数取决于图像描述符。

查看距离函数

  1. 欧几里德距离
  2. 平方欧几里德距离
  3. 余弦距离或相似度[这应该很精细]
  4. 绝对差异总和
  5. 平方差异之和
  6. 相关距离
  7. Hellinger Distance
  8. 网格距离

    1. 曼哈顿距离
    2. 切比雪夫距离
    3. 统计距离函数

      1. Wasserstein Metric
        1. 马哈拉诺比斯距离
        2. 布雷柯蒂斯距离
        3. 堪培拉距离
      2. 二进制距离函数

        1. L0 Norm
        2. 雅加德的相似性
        3. 汉明距离
        4. 当您直接比较图像时,采用余弦相似性应该适合您。

答案 1 :(得分:0)

很好地比较图像相当非常重要。

仅举一例,要获得有意义的结果,您需要考虑被比较图像之间的错位。如果你只是比较(例如)一个图像中的左上角像素和另一个图像中的左上角像素,两者之间相当小的不对齐可以使这些像素完全不同,即使看着图像的人会有很难看到任何差异。

处理这种情况的一种方法是从类似于MPEG 4使用的运动补偿开始。即,将每个图像分成小块(例如,使用16×16像素块的MPEG)并将块中的块比较为块在另一个。这可以消除(或至少大幅减少)图像之间未对准的影响。