无论大小如何,可以使用什么算法来识别图像是否“相同”或相似?

2024-01-10

TinEye http://tineye.com/,“反向图像搜索引擎”,允许您上传/链接到图像,它能够搜索它已抓取的十亿张图像,并将返回到它发现的相同图像的图像的链接。

然而,它不是一个幼稚的校验和或与之相关的任何东西。它通常能够找到比您提供的原始图像更高分辨率和更低分辨率以及更大和更小的尺寸的图像。这是该服务的一个很好的用途,因为我经常找到图像并想要它的最高分辨率版本。

不仅如此,我还让它找到同一图像集的图像,其中图像中的人处于不同的位置,但背景基本上保持不变。

什么类型的算法可以TinEye http://tineye.com/使用它可以将图像与不同尺寸和压缩比的其他图像进行比较,但仍然准确地确定它们是“相同”图像或集合?


这些算法通常是基于指纹的。指纹是一种相当小的数据结构,类似于长哈希码。然而,指纹函数的目标与哈希函数的目标相反。一个好的哈希函数应该为非常相似(但不相等)的对象生成非常不同的代码。相反,指纹功能应该为相似的图像生成相同的指纹。

举个例子,这是一个(不是特别好的)指纹功能:将图片大小调整为 32x32 正方形,对颜色进行标准化和量化,将颜色数量减少到 256 种左右。然后,你就有了 1024 字节的指纹对于图像。只需保留一个指纹表 => [图像 URL 列表]。当您需要查找与给定图像相似的图像时,只需计算其指纹值并找到相应的图像列表即可。简单的。

不容易的是——为了在实践中有用,指纹函数需要对裁剪、仿射变换、对比度变化等具有鲁棒性。构建良好的指纹函数是一个单独的研究课题。它们通常是手动调整的,并使用大量启发式方法(即使用有关典型照片内容、图像格式/EXIF 中的附加数据等的知识)

另一种变化是使用多个指纹函数,尝试应用每个函数并组合结果。实际上,这类似于查找相似文本。只是代替“词袋”,图像相似性搜索使用“指纹袋”并查找一个袋子中有多少元素与另一袋子中的元素相同。如何使这种搜索高效是另一个话题。

现在,关于文章/论文。我找不到一篇好文章来概述不同的方法。我所知道的大部分公开文章都是讨论针对具体方法的具体改进。我可以建议检查这些:

“使用小波进行内容指纹识别” http://www.mangolassi.org/covell/pubs/cvmp_BalujaCovell.A4color.pdf。本文介绍的是使用小波的音频指纹识别,但相同的方法也适用于图像指纹识别。

排列分组: 用于音频和图像检索的智能哈希函数设计 http://www.esprockets.com/papers/balujaCovellIoffe.pdf。有关局部敏感哈希的信息。

用于大规模部分重复网络图像搜索的捆绑功能 http://research.microsoft.com/pubs/80803/CVPR_2009_bundle.pdf。一篇非常好的文章,讨论了 SIFT 和捆绑功能以提高效率。最后还有一个很好的参考书目

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无论大小如何,可以使用什么算法来识别图像是否“相同”或相似? 的相关文章

  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 计算边界框重叠的百分比,用于图像检测器评估

    在测试大图像中的对象检测算法时 我们根据地面实况矩形给出的坐标检查检测到的边界框 根据 Pascal VOC 挑战 有这样的 如果预测的边界框重叠更多 则认为它是正确的 超过 50 带有真实边界框 否则边界框 被认为是误报检测 多次检测是
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 为什么我们应该使用灰度进行图像处理

    我认为这可能是一个愚蠢的问题 但在阅读了大量内容并搜索了很多有关图像处理的内容之后 我看到的有关图像处理的每个示例都使用灰度来工作 我知道灰度图像只使用一个颜色通道 通常只需要 8 位来表示 等等 但是 当我们有彩色图像时为什么要使用灰度呢
  • 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

    我用 PIL 创建一个图像 我需要填充空白区域 显示为黑色 我可以轻松地用静态颜色填充它 但我想做的是用附近的颜色填充像素 例如 边框之后的第一个像素可能是填充像素的高斯模糊 或者可能是中描述的推拉型算法Lumigraph Gortler
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • c# GDI边缘空白检测算法

    我正在寻找解决方案检测边缘空白c 位图 来自 c 托管 GDI 库 图像将是透明的 or white 大多数 400x 图片的尺寸为 8000x8000px 边缘周围有大约 2000px 的空白 找出边缘的最有效方法是什么 x y 高度和宽
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • 颜色变换器功能上的堆栈溢出错误

    我有两种颜色 红色 和 鲑鱼色 我需要动态创建面板以及面板背景颜色 这些颜色必须介于两种颜色之间 红色 public Color x y protected void Page Load object sender EventArgs e
  • Z 算法背后的直觉

    Z算法是一种复杂度为O n 的字符串匹配算法 一种用例是从字符串 B 中查找字符串 A 的最长出现次数 例如 overdose from stackoverflow 将会 over 您可以通过使用组合字符串调用 Z 算法来发现这一点 ove
  • 用于在链表中查找结点的生产代码

    我在一次采访中被问到这个问题 我被要求编写代码 用于在 O 1 空间和线性时间的生产环境中在链表 其形式为 Y 形式 双臂不一定相等 中查找结点 我想出了这个解决方案 我以前在某处见过 1 Measure lengths of both l
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都

随机推荐

  • 连字符、下划线或驼峰命名法作为 URI 中的单词分隔符?

    我正在为 Intranet 应用程序设计一个基于 HTTP 的 API 我意识到这在宏伟的计划中只是一个很小的问题 但是 我应该使用连字符 下划线或驼峰命名法来分隔 URI 中的单词吗 以下是我的初步想法 骆驼香烟盒 如果服务器不区分大小写
  • 在 C++ Set 和 Vector 中取消引用迭代器时出错

    我正在编写这段代码 但收到此错误 错误 将 const std vector 作为 void std vector push back const value type 的 this 参数传递 with Tp metastock7 Allo
  • 仅从 Chrome 扩展程序安全访问 api

    我正在努力允许 Chrome 扩展通过发布数据向我的网站发布新条目 我希望能够将其锁定 以便只有 chrome 扩展可以发布 如果我从其他地方获取发布数据 我想拒绝它 有谁知道这是否 如何可能 或者你将如何去做 不幸的是 从 Web 服务器
  • 为 Matplotlib 创建默认值集

    我经常为自己的研究制作绘图 所有默认设置都很好 但经常必须切换到为演讲 演示设计绘图 我手动设置所有字体大小大一点 http www mailinglistarchive com html matplotlib users lists so
  • Elixir `mix` 命令抛出错误`无法调用 Module.put_attribute/3,因为模块 Helloworld.MixProject 已编译`

    使用命令设置新项目mix new project name它设置了一切 没有任何 错误或警告消息 cd 到项目并运行命令iex S mix它抛出错误 lib helloworld ex defmodule Helloworld do mod
  • “暂停”被忽略

    我读到我必须能够使用单个命令运行站点中的所有单元测试 因此我创建了一个 bat 文件来执行此操作 即使在结束前暂停 在 phpunit 命令之后 单元测试的结果也会在屏幕中闪烁 echo off cd c cd xampp cd htdoc
  • 访问 Android Wear Fit 数据

    我正在 Samsung Gear Live Google I O 版 上开发一款适用于 Android Wear 的应用程序 它将需要访问心率和步数历史数据 我知道稍后可以使用以下方式访问这些数据谷歌健身 SDK https develop
  • Android中如何获取当前SIM卡号码?

    我想知道 Android 中的用户手机号码 我使用了这个代码 但我没有得到号码 TelephonyManager tm TelephonyManager getSystemService Context TELEPHONY SERVICE
  • mysql 和 30 天

    我正在一个处理免费订阅的网站上工作 我现在想知道如何在 30 天不活动后取消订阅 我知道这必须通过 cron jobs 完成 但我不知道如何在 30 天后计数用户上次登录的时间 SELECT user id FROM users WHERE
  • Visual Studio Code 环绕

    我找不到任何方法可以在 VS Code 中用某些内容包围所选内容 For example doing something like that text gt text just by selecting the word text and
  • jq:错误:无法用字符串索引数组

    我正在尝试为检查点管理服务器 API 编写 bash 脚本 但遇到了一些问题 我想获取 json 字典中的值 为此我必须使用变量 我正在输入这个命令 echo rulebase jq arg n 0 rulebase n to 我收到下一个
  • 阻止浏览器重新发送 post 变量

    当用户尝试登录我的网站时 他的用户名和密码将作为 POST 变量发送 当页面加载时 我获取变量 处理它们并决定登录是否成功 然后 我呈现包含一条消息的页面 通知用户登录成功或失败 我的问题是 如果用户按 F5 或刷新 浏览器会提示他们重新发
  • 如何使用shadow DOM在动态加载的Web组件样式中加载@font-face

    我有一个带有 Shadow DOM 的 HTML 5 WebComponent 它显示的内容必须根据组件中显示的内容类型加载样式 样式表列表是从服务器获取的 我可以像这样加载样式表 for const style of styles con
  • Pandas 中的多索引排序

    我在 pandas df 中有一个包含多索引列的数据集 我想按特定列中的值进行排序 我的数据集如下所示 Group1 Group2 A B C A B C 1 1 0 3 2 5 7 2 5 6 9 1 0 0 3 7 0 2 0 3 5
  • 在 Objective-c xcode 中转换 android 的 AES 加密

    我必须使用类似于下面代码的 AES 加密和解密 需要像android那样传递类似的数据来生成KEY package encypt com import java io BufferedReader import java io FileRe
  • SSH -X“警告:不受信任的 X11 转发设置失败:未生成 xauth 密钥数据”

    嘿 我在使 ssh X 转发正常工作时遇到问题 设置是我ssh从 OSX Yosemite 主机进入我的 ubuntu VM 我已经在 OSX 上安装了 xQuartz 在 ubuntu 上安装了 xauth 并且我相信我已经在 ssh c
  • 使用滑块的模糊效果无法正常工作

    我使用滑块对图像进行模糊效果 我正在使用以下代码 let currentFilter CIFilter name CIGaussianBlur let beginImage CIImage image imgImage image curr
  • 如何编写混合 C 和 C++ 的 makefile

    在这个Makefile中 我不知道如何在同一个Makefile中混合C和C 编译出c对象 如果我首先编译 C 对象 然后运行这个 Makefile 它就可以工作 谁能帮我解决这个问题吗 提前致谢 CXX g CXXFLAGS Wall D
  • FileNotFoundError:使用 jupyter 笔记本时找不到模块

    当我尝试使用 jupyter Notebook 时 收到以下错误消息 FileNotFoundError Traceback most recent call last
  • 无论大小如何,可以使用什么算法来识别图像是否“相同”或相似?

    TinEye http tineye com 反向图像搜索引擎 允许您上传 链接到图像 它能够搜索它已抓取的十亿张图像 并将返回到它发现的相同图像的图像的链接 然而 它不是一个幼稚的校验和或与之相关的任何东西 它通常能够找到比您提供的原始图