python - 使用 Python/PIL 比较(相似)图像

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

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

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

主要问题:

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

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

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

是否有更好的策略记录在某处?

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

编辑:谢谢 PreludeAndFugue,这个问题正是我要找的。

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

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

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

最佳答案

查看 imgSeek :

imgSeek is a collection of free open source visual similarity projects. The query (image you are looking for) can be expressed either as a rough sketch painted by the user or as another image you supply (or an image in your collection). The searching algorithm makes use of multiresolution wavelet decomposition of the query and database images.

关于python - 使用 Python/PIL 比较(相似)图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2603713/

相关文章:

python - PIL.Image模块中各种图像缩放算法有什么区别?

python-2.7 - 如何在 python 中实现 ImageMagick 中可用的 textcleaner 函数?

java - java中的模糊逻辑

artificial-intelligence - 如何应用梳子法?

Python for 循环操作列表并删除曾经使用过的元素

python - SymPy 表达式包含被函数的反函数取消的函数

python - 在 Python 中执行多个连续的正则表达式替换。效率低下?

python - 无法从图像中提取单词

java - 使用mysql的模糊逻辑

python - 根据意思比较句子