我正在尝试计算相似 (read: 编辑距离)的两个图像,使用 Python 2.6 和 PIL。
我计划使用python-levenshtein http://pypi.python.org/pypi/python-Levenshtein/0.10.1用于快速比较的库。
主要问题:
比较图像的好策略是什么?我的想法是这样的:
- 转换为 RGB(透明 -> 白色)(或者可能转换为单色?)
- 将较小的尺寸放大到较大的尺寸
- 将每个通道(= 唯一通道,如果转换为单色)转换为序列(项目值 = 像素的颜色值)
- 计算两个序列之间的编辑距离
当然,这不会处理镜像、裁剪图像等情况。但对于基本比较,这应该很有用。
是否有更好的策略记录在某处?
EDIT:Aaron H 关于速度问题的看法是正确的。对于大于几百乘几百像素的图像,计算 Levelshtein 大约需要很长时间。然而,在我的示例中,缩小到 100x100 和 200x200 后的结果之间的差异小于 1%,因此将最大图像尺寸设置为 ~100px 左右可能是明智的...
EDIT:谢谢前奏曲和赋格,这个问题就是我一直在寻找的。
顺便说一句,编辑距离似乎可以优化,但它给了我一些非常糟糕的结果,也许是因为背景中有很多冗余元素。必须看看其他一些算法。
EIDT:均方根偏差和峰值信噪比似乎是另外两个选项,实现起来并不困难,而且 CPU 成本似乎也不是很高。然而,我似乎需要某种上下文分析来识别形状等。
不管怎样,感谢所有链接,也感谢您指出 NumPy/SciPy 的方向。
查看imgSeek http://www.imgseek.net/:
imgSeek 是一个免费开源视觉相似度集合
项目。查询(您正在寻找的图像)可以表达
可以是用户绘制的草图,也可以是您绘制的另一幅图像
供应(或您收藏中的图像)。搜索算法使得
使用多分辨率小波分解查询和数据库
图片。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)