一、均值hash

均值hash方法是对每幅图片生成一个“指纹”字符串,然后通过比较不同图片的指纹来确定图片的相似性,比较结果越接近,则说明图片越相似。 
计算均值hash的步骤。 
1、缩小尺寸 
去除高频和细节的最快方法是缩小图片,将图片缩小到8x8的尺寸,总共64个像素。不要保持纵横比,只需将其变成8*8的正方形。这样就可以比较任意大小的图片,摒弃不同尺寸、比例带来的图片差异。 
2、简化色彩 
将8*8的小图片转换成灰度图像,将64个像素的颜色(red,green,blue)转换成一种颜色(黑白灰度)。 
3、计算平均值 
计算所有64个像素的灰度平均值。 
4、比较像素的灰度 
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。 
5、计算hash值 
将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。(我设置的是从左到右,从上到下用二进制保存)。

二、感知hash(phash)

感知hash和均值hash非常相似,使用离散余弦(DCT)降低频率。 
二维DCT变换就是将二维图像从空间域转换到频率域。形象的说,就是计算出图像由哪些二维余弦波构成,计算出的结果为c(u ,v), 其中u为二维波的水平方向频率,v为二维波的垂直方向频率; 最终会计算出很多的c(u,v) ; 每一个c称为一个DCT系数,代表的是频率为(u,v)的二维波的振幅(或者能量),所有这些二维波的叠加就是那个原始的图片。 
 
 
计算phash的步骤: 
1、缩小尺寸 
pHash以小图片开始,但图片大于8*8,32*32是最好的。这样做的目的是简化了DCT的计算,而不是减小频率。 
2、简化色彩 
将图片转化成灰度图像,进一步简化计算量。 
3、计算DCT 
DCT是把图片分解频率聚集和梯状形,虽然JPEG使用8*8的DCT变换,在这里使用32*32的DCT变换。 
4、缩小DCT 
虽然DCT的结果是32*32大小的矩阵,但我们只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。 
5、计算平均值 
如同均值哈希一样,计算DCT的均值, 
6、进一步减小DCT 
这是最主要的一步,根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。 
7、构造hash值 
将64bit设置成64位的长整型,组合的次序并不重要,只要保证所有图片都采用同样次序就行了。与均值哈希一样,pHash同样可以用汉明距离来进行比较。(只需要比较每一位对应的位置并算计不同的位的个数)

转载于:https://www.cnblogs.com/gaosheng12138/p/7458086.html

图片相似度——hash算法简介相关推荐

  1. java phash算法 图片_图片相似度——hash算法简介

    一.均值hash 均值hash方法是对每幅图片生成一个"指纹"字符串,然后通过比较不同图片的指纹来确定图片的相似性,比较结果越接近,则说明图片越相似. 计算均值hash的步骤. 1 ...

  2. hash算法_一致性hash算法简介

    一致性hash算法有什么用?我们为什么需要一致性hash算法?这两个问题的答案可以看这篇文章 分布式系统路由算法简介. 了解了一致性hash算法出现的背景,我们来看看什么是一致性hash算法.一致性h ...

  3. php 图片相似度对比算法,php比较图片相似度代码示例

    /** * 图片相似度比较 * * @version $Id: ImageHash.php 4429 2012-04-17 13:20:31Z jax $ * @authorjax.hu * www. ...

  4. java计算图片相似度_图片相似度比较--算法

    最近由于要租房,所以下载了58同城的APP,在找个人房源过程中发现,58同城会把图片相似的发帖纪录被标志出来,并警告用户此信息可能是假的.这里不讨论58同城的这方面做得人性化.而是就图片相似度算法来做 ...

  5. 图片相似度识别算法公式,图片相似度检测算法

    计算图像相似度的算法有哪些 SIM=StructuralSIMilarity(结构相似性),这是一种用来评测图像质量的一种方法. 由于人类视觉很容易从图像中抽取出结构信息,因此计算两幅图像结构信息的相 ...

  6. 一致性hash算法简介

    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...

  7. javascript原生实现图片相似度识别算法

    有一种功能叫 查找相似图片 js也可以简单的实现图片相似度识别 最终示例 体验地址 http://cdn.magiczhu.cn/index.html 代码戳这里 实现原理&步骤 读取本地文件 ...

  8. 图片相似度识别算法,百度图片识别算法

    图像识别算法都有哪些 图像识别算法:1人脸识别类(Eigenface,Fisherface算法特别多),人脸检测类(j-v算法,mtcnn)2车牌识别类,车型识别类(cnn)3字符识别(cnn)... ...

  9. php 图片相似度对比算法,图像处理技术之图片相似度比较

    Today,工作中发现需要去除图片上的水印,由于涉及文章太多,手动重新编辑很慢且容易出错.于是想到了使用脚本比较全部图片的相似度,然后替换文件的方式来达到去除水印效果.在完成这项工作前,我们需要找到所 ...

最新文章

  1. PHP向第三方接口发送json数据
  2. 如何找出Fiori launchpad URL start_up请求发起的具体位置
  3. (转)FPGA的速度等级(speed grade)
  4. 我们为什么需要云原生?看完这一篇就够了
  5. java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...
  6. Python和java二选一该学啥
  7. Navicat常用快捷键
  8. PostgreSQL MySQL 兼容性之 - Gis类型
  9. GDAL2.x与1.x的主要变化比较(以C++为例说明)
  10. 如何在vs2010中使用SSE指令集
  11. 英文操作系统中的乱码问题及其它
  12. FrameMaker 2019中文版
  13. HBA的WWN号以及存储区域网络
  14. 潮汕“七样羹”,吃了变后生
  15. 学习系统地思考——《第五项修炼》读后感
  16. RBF技术实现“双花漏洞”研究
  17. 常见服务器类型及其简单介绍
  18. 深度学习——Dual Regression Networks for Single Image Super-Resolution(DRN)
  19. 大端小端存储方式详解
  20. 数据库中内连接、外连接、全连接

热门文章

  1. 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?
  2. Feature pyramid networks for object detection
  3. find border vertex
  4. 3.7.1 - Strings
  5. 基于图像的小麦真菌病害深度学习识别(数据+平台)
  6. mysql 协议测试_mysqlslap压力测试mysql
  7. efficientnet-yolo3-tf2的实现
  8. 2 lt lt 8运算 java_Java移位运算符 lt;lt; gt;gt; gt;gt;gt;_Java_七九推
  9. 原始图像扩展_Resize Sense for Mac(图像处理软件)
  10. chart控件支持鼠标滚轮放大缩小_强大的鼠标侧键功能设置工具:X-Mouse Button Control...