使用Python / PIL比较(类似)图像

时间:2010-04-08 21:53:41

标签: python python-imaging-library fuzzy-logic fuzzy-comparison

我正在尝试使用Python 2.6和PIL计算两个图像的相似性(读取: Levenshtein距离)。

我打算给我们 用于快速比较的python-levenshtein库。

主要问题:

比较图像的好策略是什么?我的想法是这样的:

  • 转换为RGB(透明 - >白色)(或者可能转换为单色?)
  • 将较小的一个放大到较大的一个
  • 将每个频道(=唯一频道,如果转换为单色)转换为序列(项目值=像素的颜色值)
  • 计算两个序列之间的Levenshtein距离

当然,这不会处理镜像图像,裁剪图像等情况。但是对于基本比较,这应该是有用的。

在某处记录了更好的策略吗?

编辑: Aaron H对速度问题是正确的。对于大于几百乘几百像素的图像,计算Levelshtein需要永远。但是,在我的示例中,缩小到100x100和200x200之后的结果之间的差异小于1%,因此将最大图像大小设置为~100px左右可能是明智的...

编辑:感谢PreludeAndFugue,我正在寻找这个问题。

顺便说一句,Levenshtein距离似乎可以优化,但它给了我一些非常糟糕的结果,也许是因为背景中有很多冗余元素。要看一些其他算法。

EIDT:均方根偏差和峰值信噪比似乎是另外两个选项,这些选项并不是很难实现,而且看起来并不是非常昂贵的CPU。但是,似乎我需要某种形式的上下文分析来识别形状等。

无论如何,感谢所有链接,并指出了朝向NumPy / SciPy的方向。

2 个答案:

答案 0 :(得分:5)

结帐imgSeek

  

imgSeek是一个免费的开源视觉相似度的集合   项目。可以表达查询(您正在寻找的图像)   或者作为用户绘制的粗略草图,或者作为另一个图像   供应(或您收藏中的图像)。搜索算法   使用多分辨率小波分解查询和数据库   图像。

答案 1 :(得分:2)

您可以查看stsci库,它可用于比较和分析图像。它应该给你你想要的东西,但可能有点矫枉过正。

如果你想保持简单,你可以先减少颜色和分辨率,然后计算距离。