我正在尝试使用Python 2.6和PIL计算两个图像的相似度(即Levenshtein距离)。
我计划使用python-levenshtein库进行快速比较。
主要问题:
有什么好的比较图像的策略吗?我的想法是:
- 将图像转换为RGB格式(透明 -> 白色)(或者可能转换为单色?)
- 将较小的图像缩放到与较大的图像相同的大小
- 将每个通道(如果转换为单色,则只有一个通道)转换为序列(项值=像素的颜色值)
- 计算两个序列之间的Levenshtein距离
当然,这种方法无法处理镜像图像、裁剪图像等情况。但对于基本比较,这应该是有用的。
是否有更好的策略在某个地方有记录?
编辑:Aaron H关于速度问题是正确的。计算Levenshtein距离对于几百乘以几百像素以上的图像需要很长时间。然而,在将图像缩小到100x100和200x200后的结果之间的差异在我的示例中不到1%,因此可能明智地设置最大图像大小为~100px左右... 编辑:谢谢PreludeAndFugue,那个问题正是我在寻找的。顺便说一句,Levenshtein距离似乎可以进行优化,但它给我带来了一些非常糟糕的结果,也许是因为背景中有大量冗余元素。必须看一些其他算法。 编辑:均方根偏差和峰值信噪比似乎是另外两个选择,它们不太难实现,并且似乎不太耗费CPU。然而,似乎我需要某种上下文分析来识别形状等。
无论如何,感谢所有链接,还有指向NumPy/SciPy方向的指引。