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

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(使用前将#替换为@)

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

  • 需要一种将网络块范围折叠为超集范围列表的算法

    我的数学不及格 我需要一种有效的方法将网络范围缩小为超集 例如如果我输入 IP 范围列表 1 1 1 1至2 2 2 5 1 1 1 2至2 2 2 4 10 5 5 5至155 5 5 5 10 5 5 6至10 5 5 7 我想返回以下
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • 低质量相机的模糊内核

    我正在做一些图像增强实验 所以我用我的廉价相机拍照 相机有马赛克伪像 所有图像看起来都像网格 我认为药盒 失焦 内核和高斯内核不是最佳候选 有什么建议么 EDIT Sample 我怀疑这不能通过恒定的内核来完成 因为对像素的影响并不相同 因
  • 计算机视觉/道路跟踪入门

    我想开发一个可以跟踪和沿着道路行驶的系统 最初 我只想处理定义明确的道路 稍后可能会合并对定义不明确的道路的跟踪 我面临的问题是我不知道从哪里开始 我是图像处理领域的新手 我希望能得到一些关于从哪里开始以及应该阅读哪些关于该主题的书籍的指导
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 我正在尝试寻找“调酒师算法”

    我正在解决旧编程竞赛中的一些示例问题 在这个问题中 我们输入了我们有多少调酒师以及他们知道哪种配方 每杯鸡尾酒的制作时间为 1 分钟 我们需要计算是否可以在 5 分钟内使用所有调酒师完成订单 解决这个问题的关键是尽可能高效地分配鸡尾酒 这就
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 查找其索引的乘积可被另一个数字 X 整除的对的数​​量

    给定一个数组和某个值 X 找到满足以下条件的对的数量 i lt j a i a j and i j X 0 Array size lt 10 5 我想这个问题有一段时间了 但只能想出蛮力解决方案 通过检查所有对 这显然会超时 O N 2 t
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0

随机推荐

  • 连字符、下划线或驼峰命名法作为 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 反向图像搜索引擎 允许您上传 链接到图像 它能够搜索它已抓取的十亿张图像 并将返回到它发现的相同图像的图像的链接 然而 它不是一个幼稚的校验和或与之相关的任何东西 它通常能够找到比您提供的原始图