opencv 二维码识别_图片相似度识别:aHash算法

原文链接:图片相似度识别:aHash算法

微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings


aHash、pHash、dHash是常用的图像相似度识别算法,原理简单,实现方便,个人把这三个算法作为学习图片相似度识别的入门算法。本次起,从aHash开始,对三个算法的基本原理和实践代码进行梳理。

aHash算法

Hash算法进行图片相似度识别的本质,就是将图片进行Hash转化,生成一组二进制数字,然后通过比较不同图片的Hash值距离找出相似图片。aHash中文叫平均哈希算法,顾名思义,在进行转化过程中将用到像素均值。

基本原理:

1、缩小尺寸。这样做会去除图片的细节,只保留结构、明暗等基本信息,目的是统一图片大小,保证后续图片都有相同长度的哈希值,方便距离计算。网上看到的案例基本都将尺寸缩小为8*8,64个像素点,暂时不清楚缩小为这个尺寸的原因,但如果觉得损失的信息太多,个人认为可以将尺寸适当调大,当然像素点多了后续计算就会稍慢一些。

2、灰度化处理。将图片全部转换为统一的灰度图。

3、计算像素均值。计算像素的灰度平均值(此处均值出现)。

4、哈希值计算。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1,小于平均值,记为0,由此生成二进制数组。

5、图片配对,计算汉明距离。距离越近,越相似。当图片缩小为8*8时,通常认为汉明距离小于10的一组图片为相似图片。

Python实现

本例中将计算以下两张图片的相似度:

8362f2e4b13960ea4357ee93a181a3ac.png

(image1)

754694ce20e09998fb633c037b69536d.png

(image2)

图像处理库

图像处理可以用opencv包或者PIL包。如要使用opencv,需要在terminal中输入下面代码,先安装brew,再通过brew安装opencv。

$ /usr/bin/ruby -e "$(curl -fsSL https:// raw.githubusercontent.com /Homebrew/install/master/install )"
$ brew install opencv

完整算法

d221cb9341d5cdd62a6b8fa139af46ac.png

f0c055121e086ee5c2c8ec47bf90c430.png


最终结果:

a9914c78c8e327e5e14b61a706d92a2e.png


可见两张图片相似度非常低。

优缺点

优点:速度快

缺点:精确度较差,对均值敏感


推荐文章

·Bagging算法(R语言)

·静态爬虫与地址经纬度转换(python)

·特征工程(一):前向逐步回归(R语言)

·聚类(三):KNN算法(R语言)

·小案例(六):预测小偷行为(python)

·ggplot2:正负区分条形图及美化

8c23d872df3456f0e186d2201a43fe49.png


扫描二维码,关注我们。

如需转载,请在开篇显著位置注明作者和出处,并在文末放置机器学习养成记二维码和添加原文链接。

快来关注我们吧!

26c00c8a785e3fe7a24e9929f831895a.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值