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

2024-04-21

我正在尝试计算相似 (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(使用前将#替换为@)

使用 Python/PIL 比较(相似)图像 的相关文章

随机推荐

  • 在 WPF 窗口上加载多个 UserControls

    我有一个窗口 在其中加载一个用户控件 例如 Control1 现在 如果用户单击某个新的 UserControl 按钮 Control2 应该加载到窗口上 而 Control1 应该消失 同样 当用户单击下一个 UserControl 的按
  • PyTorch 中复数矩阵的行列式

    有没有办法在 PyTorch 中计算复矩阵的行列式 torch det未针对 ComplexFloat 实现 不幸的是 目前尚未实施 一种方法是实现您自己的版本或简单地使用np linalg det 这是一个简短的函数 它计算我使用 LU
  • 如何在plotly 3D曲面图中标记区域?

    我使用plotly从xyz数据创建3D高程剖面图 它与以下代码配合得很好 import plotly graph objects as go import pandas as pd import numpy as np Read data
  • PHP DOM:按标签名称获取元素

    我担心这是一个非常愚蠢的问题 但在过去两个小时尝试了大量组合后 我真的陷入了困境 我正在尝试从 XML 文件中提取 NAME 我的 XML 文件
  • numpy bincount 可以处理二维数组吗?

    我看到 numpy bincount 的行为我无法理解 我想以行方式将值存储在二维数组中 并查看下面的行为 为什么它可以与 dbArray 一起使用 但与 simarray 一起失败 gt gt gt dbArray array 1 0 1
  • JavaFX 2.2 不可见节点的鼠标事件

    我正在尝试接收 JavaFX 2 2 中不可见节点的 MouseEvents 将其视为一个交互式但不可见的区域 例如当鼠标悬停在其上时应触发操作 问题是 这不是静态定义的区域 而是有多个区域 很多 可以由应用程序移动和调整大小 因此 对于我
  • UITableView 检测最后一个单元格

    我怎样才能检测到UITableView已滚动到底部以便最后一个单元格可见 Inside tableView cellForRowAtIndexPath or tableView willDisplayCell forRowAtIndexPa
  • 如何增加 MVC 3 中的会话超时

    我有一个 ASP NET MVC 3 Razor 应用程序 并且经常遇到会话超时 有没有办法增加Session的价值 您没有提供足够的详细信息 例如您的配置 问题描述等 更确切地说发生了什么 这篇文章可能会有所帮助 ASP NET MVC3
  • 在 PyDev 中运行 Twisted 应用程序

    我想使用 Eclipse 3 5 2 PyDev 模块 1 6 4 和 Python 2 6 5 调试 Twisted 应用程序 10 0 0 要从命令行运行应用程序 我将指定以下内容 c python26 python c python2
  • 将填充设置为动态文本框 C# asp.net

    这是我从 C 代码创建文本框的代码 for int x 0 x lt 30 x TextBox txt new TextBox txt ID txt x ToString data Controls Add txt data Control
  • 为什么 GAE 启动第二个实例并将“最大空闲实例数”设置为 1

    我使用 Google App Engine 且计费状态已启用 空闲实例设置为 1 1 由于我的服务只有 2 个客户 有时我会看到第二个实例 问题是启动新实例需要 15 秒 spring 和 co 80 Mb 内存对于一个实例来说太高了 新实
  • 安装 debugger-linecache (1.1.1) 时出错,Bundler 无法继续

    知道如何解决这个问题吗 Gem Installer ExtensionBuildError ERROR Failed to build gem native extension home durrantm rvm rubies ruby 1
  • Razor 不理解未封闭的 html 标签

    使用 RazorViewEngine 我可以这样做 if somecondition div some stuff div 但我似乎无法做到这一点 剃刀感到困惑 if somecondition div if someothercondit
  • 在 python 中,如何从日期和时间创建时区感知日期时间?

    在 Python 中 假设我的日期是 2016 年 12 月 25 日 如何创建该日期中午的时区感知日期时间 如果它与 Django 的时区处理兼容 那就加分了 诀窍是首先combine将天真的时间和日期转换为天真的日期时间 然后可以将此原
  • 正则表达式执行仅返回第一个匹配项[重复]

    这个问题在这里已经有答案了 我正在尝试实现以下找到的正则表达式搜索Golfscript 语法页面 http www golfscript com golfscript syntax html var ptrn a zA Z a zA Z0
  • Java 中的 syso 语句是什么意思?

    什么是syso statements在Java中代表什么 短缺System out println In eclipse you can type syso and Ctrl Space to fill out the expansion
  • 有没有更好的方法将文件的完整内容写入 OutputStream?

    当我想将文件的全部内容写入OutputStream 我通常分配一个缓冲区作为byte 然后做一个for循环到read来自文件的数据InputStream写入缓冲区并将缓冲区内容写入OutputStream 直到InputStream没有更多
  • 如何点击cypress中的链接

    如何使用 cypress 单击此链接 a href class button span class icon icon chevron down span span class screen reader only chevron down
  • 错误 1062。mysql 中的重复条目

    我有一个 MySQL 表 其架构中的列 1 是主键 我有一个 tsv 文件 需要将其插入到该表中 现在 tsv 具有主键重复 因此当我尝试将其插入 MySQL 表时 会出现错误 ERROR 1062 23000 Duplicate entr
  • 使用 Python/PIL 比较(相似)图像

    我正在尝试计算相似 read 编辑距离 的两个图像 使用 Python 2 6 和 PIL 我计划使用python levenshtein http pypi python org pypi python Levenshtein 0 10