这里的关键技术叫做"感知哈希算法(aHash)"ash

algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似第一步,缩小尺寸。

将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

 

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

 =  =

8f373714acfcf4d0

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hamming

distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

下面是MATLAB代码:输入两幅图片,返回值为它们的为汉明距离。

%相似图片搜索原理:平均哈希算法

%对两幅图分别作如下处理:

%1:将两副256等级的灰度图像转化成8x8大小的64等级的灰度图像

%2:求全局灰度平均值

%3:逐次将灰度值与平均灰度值比较,大于等于的置为1,否则置为0

%4:将0、1序列看做8个字节(统一顺序)

%5:比较两幅图的数据位,如果不同的数据为不超过5位,则非常相似,若超过10为则认为两幅图无关

function

v=tineyesearch_ahash(picture1,picture2)

t1=imresize(picture1,[8 8],'bicubic');

%图片放缩到固定大小

t2=imresize(picture2,[8

8],'bicubic'); %图片放缩到固定大小

t1=round(t1/4);

t2=round(t2/4);

mem1=round(sum(sum(t1))/64);

mem2=round(sum(sum(t2))/64);

for

i=1:8

for

j=1:8

if t1(i,j)>=mem1

t1(i,j)=1;

else

t1(i,j)=0;

end

if t2(i,j)>=mem2

t2(i,j)=1;

else

t2(i,j)=0;

end

end

end

h=abs(t1-t2);

v=sum(sum(h));

%完

如有疑问请加【数字图像处理群】:

389011389

MATLAB中计算图像哈希,数字图像处理算法及原理(三):相似图片搜索(平均哈希算法)...相关推荐

  1. 几何畸变图像恢复 openCV3 - 数字图像处理作业3

    几何畸变图像恢复 OpenCV3 - 数字图像处理作业3 作业3:相同条件下拍到的棋盘图和日历钟表图,尝试建立几何畸变关系,并对它们进行恢复.注意:不能采用椭圆的变换. 算法步骤: 坐标变换: 在畸变 ...

  2. matlab中的图像转换

    matlab中的图像转换包括两个层面的内容,首先是不同图像文件格式之间的转换(例如将BMP格式转换为PNG格式,这里可以由imwrite()函数实现,具体参见):其次是matlab中不同图像存储形式之 ...

  3. Matlab中消除图像噪声之中值滤波器:medfilt2

    Matlab中消除图像噪声之中值滤波器:medfilt2 medfilt2, matlab, 消除噪声, 中值滤波器, 椒盐噪声 在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一 ...

  4. matlab中的图像类型

    MATLAB中的图像类型 在MATLAB中数组是最基本的数据结构,大部分图像用二维 数组即矩阵表示,矩阵中的一个元素对应一个像素.例如,一个由500行600列不同颜色点组成的图像可以用500*600的 ...

  5. matlab中计算运行时间的函数,【谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学-伊凡渴同学...

    概述:本道作业题是伊凡渴同学的课后练习,分享的知识点是计算时间的函数,指导老师为干老师,涉及到的知识点涵盖:[谁能都我一个计算时间的函数?是计算:例如上午08:00...-计算时间的函数-数学,下面是 ...

  6. 图像处理----入门资料,Matlab r2019最新版,r2008a,《数字图像处理》冈萨雷斯 第三版 《数字图像处理 Matlab 版》

    研究生想研究的方向是图像处理,现在离开学还有四个月,希望能稍微入门吧.同时也希望通过博客的形式记录一下学习的进度,学习的心情.目前学习两周,安装了基本的软件,收集书籍,学习了灰度变换,空间滤波,频率滤 ...

  7. MATLAB中的图像融合

    下面来介绍一下如何在MATLAB中实现图像的融合,具体原理及步骤如下: 图像融合:图像融合是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息, ...

  8. matlab三角形面积,matlab中计算三角形面积?

    问题描述: matlab中计算三角形面积? 在X,Y矩阵中存有一组点的x,y坐标: X=[5 7 2 8 7 4 3 6 9] ,Y=[4 5 9 3 6 5 3 2 8] 矩阵B中保存了每三个点构成 ...

  9. matlab曲面的最小值,在matlab中计算曲面的曲率

    我想计算点云中某些点的均值和高斯曲率. 我有x,y,z,它们是坐标并且是1d数组.我想使用下面的代码,但在输入参数中,X,Y和Z是2d数组,我不知道这意味着什么,以及如何计算与它们对应的2d数组. 非 ...

最新文章

  1. GitHub万星资源:强化学习算法实现,教程代码样样全,还有详细学习规划
  2. 【任务脚本】0523更新京东618叠蛋糕任务脚本全自动脚本,大神更新了京东任务全自动程序...
  3. 位bit、字节byte、kb、mb
  4. fastjson 返回json字符串,JSON.parse 报错
  5. Java Signal实例
  6. 【公告】百度应用开放平台关于工具/生活类应用优化展现试验的公告
  7. 开机一直转圈_电脑开机后网络一直转圈,程序也打不开?
  8. mysql5.7 mysql库下面的user表没有password字段无法修改密码
  9. 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
  10. 用 Python 分析了 10000 场吃鸡数据,原来吃鸡要这么玩!
  11. Hadoop只输出Key不输出Value的小技巧‏
  12. 数据库管理系统属于计算机应用,数据库管理系统属于应用软件吗?
  13. 【计算机网络】HTTP协议详解
  14. c语言课程总结3000字,单片机课程设计心得体会范文3000字
  15. 服务器刷新率和显示器刷新率,什么是屏幕刷新率
  16. 干了5年的前端,实在熬不动了...
  17. 劳伦斯.拉里.埃里森(甲骨文公司总裁)在耶鲁大学的演讲稿
  18. 访问共享计算机的用户名和密码怎么设置,Win10如何设置访问共享文档要输入用户名和密码...
  19. Python 爬虫十六式 - 第七式:RE:用匹配来演绎编程的艺术
  20. 【Android开发】

热门文章

  1. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 11.2 maze 迷宮 - 用 turtle 呈現演算法之執行動作
  2. java枚举类型enum用法_Java枚举类型——Enum的简单用法
  3. php背景图片透明度,css实现背景图片半透明内容不透明代码分享
  4. EasyExcel怎么读取下载多个sheet页数据
  5. numpy中matmul,dot,multiply的区别
  6. 使用navicat查看mysql数据库版本
  7. 苹果几最好用_苹果树一般用什么肥料最好?既不会让土地硬化,还能保持土壤有机质?...
  8. 【Unity3D自学记录】NGUI之显示2D游戏物体的名字
  9. Incorrect string value: ‘\xE6\x9D\x8E\xE8\x80\x81...‘ for column ‘name‘ at row 1
  10. 构建一个CPU模拟器