图片相似度比较--算法
2016-07-10 21:38
453 查看
最近由于要租房,所以下载了58同城的APP,在找个人房源过程中发现,58同城会把图片相似的发帖纪录被标志出来,并警告用户此信息可能是假的。这里不讨论58同城的这方面做得人性化。而是就图片相似度算法来做一下分析。
百度和谷歌都推出了“以图搜图”的功能,至今都没用过,也是挺无语的……
最近翻阅了这方面的资料,属“感知哈希算法”最为成熟,“感知哈希算法”的作用是对每张图片生成一个指纹字符串,然后比较不同图片的指纹。结果越接近,说明图片越相似。下面就简单介绍一下此算法
缩小图片尺寸
将图片缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
简化色彩
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64中颜色
计算平均值
计算所有64个像素的灰度平均值
比较像素灰度
将每个像素的灰度,与平局值进行比较。大于或等于平局值,记为1;小于平均值记为0
计算哈希值
将上一步比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样的次序就好了。
=
= 8f373714acfcf4d0
得到指纹以后,就可以对比不同的图片,看看64位中有多少是不一样的。在理论上,这等同于计算汉明距离。如果不相同的数据位超过5位,就说明两张图片很相似;如果结果大于10,就说明这是不同的图片。
具体详情请查看博客:图片相似度算法
百度和谷歌都推出了“以图搜图”的功能,至今都没用过,也是挺无语的……
最近翻阅了这方面的资料,属“感知哈希算法”最为成熟,“感知哈希算法”的作用是对每张图片生成一个指纹字符串,然后比较不同图片的指纹。结果越接近,说明图片越相似。下面就简单介绍一下此算法
缩小图片尺寸
将图片缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
简化色彩
将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64中颜色
计算平均值
计算所有64个像素的灰度平均值
比较像素灰度
将每个像素的灰度,与平局值进行比较。大于或等于平局值,记为1;小于平均值记为0
计算哈希值
将上一步比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样的次序就好了。
=
= 8f373714acfcf4d0
得到指纹以后,就可以对比不同的图片,看看64位中有多少是不一样的。在理论上,这等同于计算汉明距离。如果不相同的数据位超过5位,就说明两张图片很相似;如果结果大于10,就说明这是不同的图片。
具体详情请查看博客:图片相似度算法
相关文章推荐
- css
- android.os.NetworkOnMainThreadException 异常处理
- 存储过程使用DDL语句
- 算法导论(3) 快速排序、计数排序、基数排序
- Android开源项目 工具库
- Python 函数式编程--偏函数
- http://ftp.gnu.org/gnu/ http://ftp.gnu.org/gnu/libc/
- [APIO 2016] 赛艇 Boat:动态规划、离散化、组合数学和常数优化
- http://ftp.gnu.org/gnu/ http://ftp.gnu.org/gnu/libc/
- mysql 主从配置(master slave)
- java.lang.SecurityException: Permission denied (missing INTERNET permission?) 解决
- tv
- equals和==
- Python模拟登录
- VS调试C++项目实例
- Python 函数式编程--装饰器
- 疯狂JAVA讲义比较--JAVA概述
- 通过Python爬虫爬取知乎某个问题下的图片
- Spring核心技术(九)——Spring管理的组件和Classpath扫描
- 下面哪些特性可能导致代码体积膨胀:----腾讯2016研发工程师在线模拟笔试题