繁体   English   中英

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

[英]Comparing (similar) images with Python/PIL

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

我计划用python-levenshtein库进行快速比较。

主要问题:

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

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

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

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

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

编辑:感谢PreludeAndFugue,这个问题就是我想要的。

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

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

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

看看imgSeek

imgSeek是一个免费的开源视觉相似性项目的集合。 查询(您要查找的图像)可以表示为用户绘制的粗略草图,也可以表示为您提供的其他图像(或集合中的图像)。 搜索算法利用查询和数据库图像的多分辨率小波分解。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM