Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >老司机带你检测相似图片

老司机带你检测相似图片

原创
作者头像
雷经纬
修改于 2017-10-16 01:43:08
修改于 2017-10-16 01:43:08
9.9K2
举报
文章被收录于专栏:雷经纬的专栏雷经纬的专栏

导语: 本文从从图片的dhash,ahash,phash,颜色分布向量到基于语义的sift,surf,gist特征,构建一套分层相似图片检测系统。本文致力于零基础单机快速搭建一个可用的相似图片识别系统。

1 背景

相似图片检测的定义是人眼看起来像,比如下面的俩图。

相似图片的检测广泛用于图片去重,仿冒图标检测,图片检索等。本文也是基于图标相似检测的需求去做的,本意是用于打假。然而专家老中医告诉我,打假不如推荐相似app受市场欢迎,并且不同应用场景下我们做事的思路也会不同。不管了,先把相似图片识别出来

2 检测的原理

图片相似检测无非是提取图片某个维度的特征,根据算法两两计算相似度。(基于机器学习深度学习的方法则会先构建一个模型,然后将新样本特征输入模型即可。)简单流程可以描述为:

检测过程中可能用到的7个基础特征如下:

简单解释下,dhash,ahash,phash是根据基于分块等某种算法得到的基于图片RGB值的某个哈希(其详细描述可参考http://itindex.net/detail/42723 );RGB向量则是将色彩从256256256映射到较小的区间如444,然后计算图片在每个区间的分布形成一个数组;

SIFT,SURF,GIST则不再是RGB值的某种统计,而是试图构建人能理解的图片意义,如SIFT,SURF关注图片关键点(或者理解为重要的点)的信息,GIST则从自然度,开放度,粗糙度等描述图像。下图是这种专业的图片处理,很高大上有没有。

3 如何搭建一个仿冒图标检测系统

相似图片的检测可以用于去重,图片搜索等。底层技术是基于上文描述的方法,但是在根据目标不同,又有不同的结构。本工程的初衷是检测图标仿冒,系统结构如下:

思路:先把已标位正牌的图标特征(dhash,ahash,phash等)收集起来形成一个特征库,新图标来了则提取其特征去特征库里匹配,如果匹配到了相似度极高的则直接认定其为仿冒图标;如果匹配到了相似度较高的则转入sift,gist高级特征匹配。

4 show me the 效果

下面是一些相似图标示例:

图标大小缩放,添加元素,添加文字,颜色块变化等都是可以识别的。仿冒数量不便展示(/ □ )

5 提升性能和效果的关键点,坑

本工程最终在单机完成了数百万官方图标库,每天新进数十万图标的检测。在构建过程中遇到了不少坑,这些坑一部分是计算速度(单一图标匹配从300秒降低到0.2秒,鬼知道我的小心脏经历了什么),还有的是识别效果:

1.官方图标特征需先聚类,数百万的特征存储和匹配都比较麻烦。对官方库聚类后可以形成特征对图标的一对多关系,而不是维持原有的图标对特征的一对一关系;

2.匹配策略分层,如本工程一开始综合dhash及sift等,参数和策略调整非常复杂。分为两层后(哈希策略过滤,sift精确匹配),每一层的准确率和参数,策略调整非常方便;

3.哈希值的海明码距离计算耗时较多,在明确海明码距离范围的情况下可以采用分段匹配而非计算不同的位数。具体见http://www.cnblogs.com/gantoday/p/6404923.html

4.工程经验上:opencv-python不直接提供sift,surf算法了。可以用opencv-contrib-python这个库。gist可以用pyleargist这个库,其依赖安装见http://blog.csdn.net/sensicall/article/details/77803915

6 潜在的改进点

海量图片匹配,第一步必须是生成图片的特征哈希,且改hash必须是局部敏感hash。局部敏感hash的特点是:原始数据相似的情况下,生成的hash值也会尽可能的保持相似。从图片dhash,ahash,phash的算法过程可以认为它们就是一种局部敏感哈希。所以可以用来检测相似。

但是在gist特征中,即使图片相似,生成的960维向量的每一个值几乎都不同,不直接具备利用它生成局部敏感哈希lsh的条件。这个时候需要对向量元素归一化,使得相似图片的大部分gist特征相同。这一点在pyleargist的官方页面https://pypi.python.org/pypi/pyleargist 下方有说明,但并没有讲怎么做。有文章说用simhash,但是对于simhash生成过程中的每个维度的权重一笔带过。个人很怀疑不采用归一化就生成simhash的做法。这里待研究

7 总结

当前图像处理发展多年,已经提出了多种特征,算法。在工程应用中需要结合自己的场景选用适当的特征(怎么适当?不确定的话就多试试(/ □ )),注重底层数据的质量,优化性能以便快速调整匹配策略。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
和iPhone相册的消除相似照片一个理
和iPhone相册的消除相似照片一个理
回复回复点赞举报
没有源码吗
没有源码吗
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
python图像识别---------图片相似度计算
要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类。
andrew_a
2019/07/30
11.6K0
python图像识别---------图片相似度计算
图片相似度识别:pHash算法
pHash中文叫感知哈希算法,通过离散余弦变换(DCT)降低图片频率,相比aHash有更好鲁棒性。
三猫
2019/10/31
7.5K0
图片相似度识别:pHash算法
基于内容的图像检索技术综述-传统经典方法
今天我们来介绍一下图片检索技术,图片检索就是拿一张待识别图片,去从海量的图片库中找到和待识别图片最相近的图片。这种操作在以前依靠图片名搜图的时代是难以想象的,直到出现了CBIR(Content-based image retrieval)技术,依靠图片的内容去搜图。比较常见的图搜平台有百度、谷歌、拍立淘等,有些图搜技术已经能达到非常不错的效果。接下来我们做个测试,给出一个柯基宝宝的图片,分别用三家搜索引擎进行搜索:
SIGAI学习与实践平台
2018/08/07
5170
基于内容的图像检索技术综述-传统经典方法
海量图片去重算法-局部分块Hash算法
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 本文主要调研了一下海量图片(>1000000张)去重的方法,在调研之前,先考虑一下自己能想到的方法的可行性。
机器学习AI算法工程
2022/04/11
2.7K0
海量图片去重算法-局部分块Hash算法
基于图像识别的自动化
导语 在客户端自动化中,如果需要对UI进行操作,控件识别和操作是最基础的能力。在windows标准控件中,我们可以通过FindWindow来找到窗口,FindWindowEx来找到子窗口和按钮,在selenium测试web页面,我们通过find_element_by_xpath、find_element_by_css_selector、find_element_by_id等等来找到页面元素。但是,在大多数应用程序中使用的都是非标准的控件,无法通过FindWindowEx来找到某个按钮,也无法通过某个ID来找
1007261
2018/01/15
8.1K0
基于图像识别的自动化
图像去重,4 行代码就能实现,你值得拥有imagededup
现实中我们经常需要用到图像去重,比如为了扩充人脸图像,可以在百度、Google通过关键词下载大量人脸图像,但这些图像可能存在重复,在合并时需要去重。
CV君
2019/12/27
7.1K0
图像检索系列——利用 Python 检测图像相似度
最近在做一个海量图片检索的项目,可以简单的理解为“以图搜图”,这个功能一开始是搜索引擎带火的,但是后来在电商领域变得非常实用。在制作这个图片检索的项目前,笔者搜索了一些资料,如今项目临近结尾,便在这里做一些简单的分享。本文先介绍图像检索最基础的一部分知识——利用 Python 检测图像相似度。
出其东门
2019/08/26
5.1K0
图像检索系列——利用 Python 检测图像相似度
R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)
机械相似性代表着,两个文本内容上的相关程度,比如“你好吗”和“你好”的相似性,纯粹代表着内容上字符是否完全共现,应用场景在:文章去重;
悟乙己
2019/05/26
2.1K0
图片相似度识别:aHash算法
aHash、pHash、dHash是常用的图像相似度识别算法,原理简单,实现方便,个人把这三个算法作为学习图片相似度识别的入门算法。本次起,从aHash开始,对三个算法的基本原理和实践代码进行梳理。
三猫
2019/10/21
4.9K0
图片相似度识别:aHash算法
图像相似性:哈希和特征
直接比较图像内容的 md5 值肯定是不行的,md5 的方式只能判断像素级别完全一致。图像的基本单元是像素,如果两张图像完全相同,那么图像内容的 md5 值一定相同,然而一旦小部分像素发生变化,比如经过缩放、水印、噪声等处理,那么它们的 md5 值就会天差地别。
凌虚
2020/07/17
4K0
使用SimHash进行海量文本去重
传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名,如果原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别很大。所以传统的Hash是无法在签名的维度上来衡量原内容的相似度,而SimHash本身属于一种局部敏感哈希算法,它产生的hash签名在一定程度上可以表征原内容的相似度。
sunsky
2020/08/19
2.6K0
LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一)
本文介绍了自然语言处理中的文本相似度计算方法和应用场景,并详细阐述了基于LSH(Locality-Sensitive Hashing)方法、基于树的方法(如随机森林、梯度提升树等)和基于图的方法(如k-Nearest Neighbors,k-NN)等应用场景。同时,文章还对未来的研究方向进行了展望,包括模型性能的评价、适用领域的拓展、计算效率的提升等。
悟乙己
2018/01/02
2.5K0
LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一)
微信的原创保护机制到底是如何实现的?
众所周知,目前微信公众号是最具商业价值的写作平台,这与它优秀的原创保护机制密不可分,如果你想将其他公众号上的文章标为原创,微信会给出类似如下的信息告诉你未通过原创校验逻辑。
kunge
2021/03/16
9240
微信的原创保护机制到底是如何实现的?
图片相似性匹配中的特征提取方法综述
stevenmiao(苗捷),2016年7月博士毕业于华南理工大学,应届毕业加入TEG信息安全部。八年计算机视觉算法经验,博士期间主要研究面向视频的特征提取和内容识别算法。入职以来主要负责部门内基于大规模图像和视频检索、匹配的恶意内容过滤算法。 一、引言 图片相似性匹配,即对比两张图片的相似程度,可以用于图片搜索、聚类、版权保护、恶意图片过滤等应用。本文主要介绍用于图片相似性匹配的特征各类特征提取方法。对于图片的相似性匹配,可根据匹配的形式分为四个层次,分别概括如下: 1.像素级别相似:两张图片每个对应
TEG云端专业号
2018/03/14
5.7K0
图片相似性匹配中的特征提取方法综述
[1213]基于Python实现图像去重
github:https://github.com/idealo/imagededup
周小董
2023/10/10
1.1K0
目标跟踪基础:两张图片相似度算法
不管是传统的目标跟踪中的生成模型和判别模型,还是用深度学习来做目标跟踪,本质上都是来求取目标区域与搜索区域的相似度,这就是典型的多输入。
一点人工一点智能
2023/07/08
3.2K0
目标跟踪基础:两张图片相似度算法
相似性︱python+opencv实现pHash算法+hamming距离(simhash)(三)
本文介绍了如何使用Python和OpenCV库实现图像的局部敏感哈希(LSH)算法,并通过具体实验展示了该算法的有效性。同时,本文还探讨了如何将LSH算法应用于海量数据查找中,提供了一种高效的海量数据查找方法。
悟乙己
2018/01/02
4.9K0
相似性︱python+opencv实现pHash算法+hamming距离(simhash)(三)
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities 相似度计算、语义匹配搜索工具包,实现了多种相似度计算、匹配搜索算法,支持文本、图像等。
汀丶人工智能
2023/08/12
4.3K0
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
大模型RAG向量检索原理深度解析
常规的知识库检索通常使用的是关键字与词条匹配,随着AGI的爆发,越来越多的知识库检索开始使用向量检索技术,特别是在RAG领域,增强型的生成式问答检索正在大面积应用和推广。
大脚攀爬
2024/04/18
1.8K0
大模型RAG向量检索原理深度解析
相似图片检测:感知哈希算法之dHash的Python实现
某些情况下,我们需要检测图片之间的相似性,进行我们需要的处理:删除同一张图片、标记盗版等。 如何判断是同一张图片呢?最简单的方法是使用加密哈希(例如MD5, SHA-1)判断。但是局限性非常大。例如一个txt文档,其MD5值是根据这个txt的二进制数据计算的,如果是这个txt文档的完全复制版,那他们的MD5值是完全相同的。但是,一旦改变副本的内容,哪怕只是副本的缩进格式,其MD5也会天差地别。因此加密哈希只能用于判断两个完全一致、未经修改的文件,如果是一张经过调色或者缩放的图片,根本无法判断其与另一张图片是否为同一张图片。 那么如何判断一张被PS过的图片是否与另一张图片本质上相同呢?比较简单、易用的解决方案是采用感知哈希算法(Perceptual Hash Algorithm)。
bear_fish
2018/09/19
3K0
相似图片检测:感知哈希算法之dHash的Python实现
推荐阅读
相关推荐
python图像识别---------图片相似度计算
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档