我正在构建一个程序,它接受2个数组并返回一些显示它们相似程度的值。例如,差异很小的图像会有很好的分数,而差异很大的图像会得分较差。
到目前为止,我遇到的这个问题的唯一两个算法是平方差和和归一化相关的总和。
这两个实现起来都相当简单,但我想知道是否还有其他算法我无法找到我可以使用的?
此外,前面提到的哪种方法最好?很高兴知道它们的准确性和效率。
谢谢,
答案 0 :(得分:1)
比较图像通常取决于您正在处理的应用程序。通常,使用的距离函数取决于图像描述符。
查看距离函数
网格距离
统计距离函数
二进制距离函数
当您直接比较图像时,采用余弦相似性应该适合您。
答案 1 :(得分:0)
很好地比较图像相当非常重要。
仅举一例,要获得有意义的结果,您需要考虑被比较图像之间的错位。如果你只是比较(例如)一个图像中的左上角像素和另一个图像中的左上角像素,两者之间相当小的不对齐可以使这些像素完全不同,即使看着图像的人会有很难看到任何差异。
处理这种情况的一种方法是从类似于MPEG 4使用的运动补偿开始。即,将每个图像分成小块(例如,使用16×16像素块的MPEG)并将块中的块比较为块在另一个。这可以消除(或至少大幅减少)图像之间未对准的影响。