注:原文地址:感知哈希算法
感知哈希算法

感知哈希算法(PHA)是哈希算法的一类,主要用来做相似图片的搜索工作。

算法原理

为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似。

算法步骤

1.缩小尺寸:将图片缩小到8*8的尺寸,总共64个像素。
2.简化色彩:将缩小后的图片,转为64级灰度,也就是说,所有的像素点共只有64种颜色。
3.计算DCT(离散余弦变换):DCT是把图片分解频率聚集和梯状形,虽然JPEG使用8*8的
DCT变换,在这里使用32*32的DCT变换。
4.缩小DCT:虽然DCT的结果是32*32大小的矩阵,但我们只要保留左上角的8*8的矩阵,这
部分呈现了图片中的最低频率。
5.计算平均值:计算所有64个值得平均值。
6.进一步减少DCT:根据8*8的DCT矩阵,设置0或1的64位hash值,大于DCT均值的设为“1”
小于DCT均值的设为“0”。
7.计算哈希值:将64bit设置成64位的长整型,组合的次序并不重要,只要保证所有图片都
采用同样次序就行了。将32*32的DCT转换成32*32的图像。

算法的优点

无论你改变图片的高宽、亮度甚至颜色,都不会改变哈希值。

参考代码

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
using namespace cv;
string PHA(Mat &src)
{Mat img, dst;string ans(64, 0);double Hash[64];double mid = 0.0;double eps = 1e-9;int k = 0;//1.缩小尺寸resize(src, src, Size(8, 8));//2.简化色彩if (src.channels() == 3){cvtColor(src, src, CV_BGR2GRAY);img = Mat_<double>(src);}else{img = Mat_<double>(src);}//3.计算DCTdct(img, dst);//4.缩小DCT  for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){Hash[k++] = dst.at<double>(i, j);mid += Hash[k - 1];}}//5.计算平均值mid = mid / 64;//6.计算哈希值for (int i = 0; i < 64; i++){if (Hash[i] - mid>eps) ans[i] = '1';else ans[i] = '0';}return ans;
}//计算汉明距离
int dis(string s1, string s2)
{int ans = 0;for (int i = 0; i < 64; i++)if (s1[i] != s2[i]) ans++;return ans;
}
int main()
{ofstream out;out.open("test.txt");Mat src;string s1, s2;int k;Mat img;s1 = PHA(src);out << "person.jpg" << "  " << s1 << endl;char path[] = { "person0.jpg" };for (int i = 0; i < 9; i++){path[6] += 1;img = imread(path);s2 = PHA(img);k = dis(s1, s2);out << path << " " << s2 << " " << k << endl;}out.close();return 0;
}

参考资料
1.感知哈希算法–百度百科
2.Neal Krawetz的博客Looks like it

相似图片搜索——感知哈希算法相关推荐

  1. 图片识别——感知哈希算法

    所谓感知哈希算法(Perceptual hash algorithm,PHA),它是用于对多种格式的数据生成一个指纹的算法.当然本文只讨论图片格式.感知哈希不同于密码哈希(如md5云云),它对于相似特 ...

  2. 基于感知哈希算法的中药标本相似图片的搜索

    一 前言 笔者最近在开发中药标本相似图片的搜索,就是根据用户上传的图片,然后到中药标本库里找到相似的图片,从而帮助用户识别标本,获取标本信息.查阅了大量资料,看到了阮一峰的一篇文章,经过一个月的开发终 ...

  3. 【转】感知哈希算法——找出相似的图片

    Google 图片搜索功能 在谷歌图片搜索中, 用户可以上传一张图片, 谷歌显示因特网中与此图片相同或者相似的图片. 比如我上传一张照片试试效果: 原理讲解 参考Neal Krawetz博士的这篇文章 ...

  4. 感知哈希算法——找出相似的图片

    参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格 ...

  5. 相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现

    相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现 原文:http://blog.sina.com.cn/s/blog_56fd58ab0102xpqf.html 感知哈 ...

  6. 相似图片检测:感知哈希算法之dHash的Python实现

    原文:https://blog.csdn.net/haluoluo211/article/details/52769325 相似图片检测:感知哈希算法之dHash的Python实现 某些情况下,我们需 ...

  7. 相似图像搜索的哈希算法思想及实现(差值哈希算法和均值哈希算法)

    图像相似度比较哈希算法: 什么是哈希(Hash)? • 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小 的数字"指纹"的方法.散 ...

  8. 图片识别——均值哈希算法

    均值哈希算法(Average hash algorithm,AHA)第一次是从著名的阮一峰阮老师的博文<相似图片搜索的原理>看到的.而此篇文章与阮老师也很类似Looks Like It - ...

  9. 相似图片搜索的三种算法

    相似图片搜索的三种算法 想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,这种搜索的核心算法有三种,都是利用信息指纹比较,这些算法都很易懂,下面分别介绍一下: 一.平 ...

  10. 感知哈希算法原理与实现

    今天忽然想做一个图像识别的APP,但是在两张图片相似度的问题上产生了问题,感知哈希算法并不能解决这个问题,只是我在试着解决问题的过程中学到的一点知识. 这里的关键技术叫做"感知哈希算法&qu ...

最新文章

  1. Pycharm那些隐藏的实用小技巧,yyds!
  2. HDU 1052 Tian Ji -- The Horse Racing
  3. 一文了解5G是什么,将如何影响我们的未来
  4. ​linux 系统出现Give root password for maintenance 问题
  5. 使用Nomad构建弹性基础架构: 作业生命周期
  6. Google 2020游戏开发者峰会回顾、比尔•盖茨的夏日书单、Libaom 2.0.0发布等|Decode the Week...
  7. sql 子查询(mysql)
  8. IAR平台移植TI OSAL到STC8A8K64S4A12单片机中
  9. spring boot 启动后执行初始化方法
  10. 以太坊ETH不能转账,状态一直是pending状态原因和解决方法
  11. git 查看某些文档的历史版本_10分钟了解git
  12. 在Python数据库连接池中如何创建请求连接的方案
  13. 解决Tensorflow使用CPU报错
  14. project安装包_Microsoft project 2019软件功能介绍(附安装包)
  15. Java modifier
  16. 编译原理三大圣书——龙书、虎书、鲸书
  17. Qt制作简单标签云(上)
  18. MagicBook荣耀锐龙版笔记本BLOS开启VT
  19. PTA - 数据库合集54
  20. 手动制作linux live,使用Etcher轻松制作Linux Live Disks | MOS86

热门文章

  1. 如何在Mac电脑上打开终端
  2. android停止补间动画,android 帧动画,补间动画,属性动画的简单总结
  3. 创业成功第一步:写好商业计划书 第二章习题答案
  4. 2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南、正南、西南方向的
  5. 上号神器扫码登录网站使用教程
  6. 如何将多张图片合成一个pdf?
  7. MES系统在注塑行业中的应用
  8. 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布
  9. IPS(入侵防御系统)技术
  10. 单维度量表验证性因子分析_验证性因素分析介绍