转载请注明出处

背景

在重复图识别领域,对于识别肉眼相同图片,感知哈希效果是很鲁棒的。上一篇文章 【PHash】更懂人眼的感知哈希 介绍的PHash识别效果很好,但是它有一个缺点,只关注低频信息,并没有关注图片的空间信息,极端情况就可能出现完全不同的两张图片,phash值很近。而WHash利用小波变换不仅重点关注低频信息,同时也关注图片的空间信息。

WHash算法

  • WHash算法如下:



    下面附上源代码,代码很短,也可以先忽略:
  • python源码如下:
def whash(image, hash_size = 8):
#check
assert hash_size & (hash_size-1) == 0, "hash_size is not power of 2"
image_scale = max(2**int(numpy.log2(min(image.size))), hash_size)
ll_max_level = int(numpy.log2(image_scale))
level = int(numpy.log2(hash_size))
assert level <= ll_max_level, "hash_size in a wrong range" #预处理
image = image.convert("L").resize((image_scale, image_scale), Image.ANTIALIAS)
pixels = numpy.asarray(image) / 255. # 小波变换,haar
coeffs = pywt.wavedec2(pixels, 'haar', level = ll_max_level)
# 去掉最低频
coeffs[0] *= 0
# 小波逆变换
dwt_low = pywt.waverec2(coeffs[:level+1], 'haar')
#二值化,中值
med = numpy.median(dwt_low)
diff = dwt_low > med
return diff

WHash算法其实也比较简单,主要利用了小波变换获取低频信息,主要就是下面3步:

  • 图片预处理(resize,转灰度图)
  • 小波变换
  • 二值化

其中预处理就是缩放+转灰度图,而二值化跟PHash一样,都是利用中值当作基准值。

这里的重点在于小波变换,下面简单直观的给大家看下小波变换究竟是什么?

直观理解小波变换

在图片上进行小波变换,可以把图片的低频跟高频信息拆分,如下所示:

其中,A是低频信息,H是水平高频信息,V是垂直高频信息、D是对角高频信息。

在实际运用,并不是只进行一次低频高频拆分,会进行多次,如下图所示:



在WHash这里,我们只是拿最右边那张图片,左上角1/4信息进行二值化,其他信息都是抛弃的。

在WHash里面,小波变换并不是单纯的拿到了图片的低频信息,而且还保存了本身图片的空间信息,所以它实际使用过程中,比PHash鲁棒一些。当然如果PHash对只对低频部分进行DCT逆变换,然后再进行二值化,也是可以考虑上空间信息的,跟WHash一样的道理。

【WHash】更有空间感的感知哈希的更多相关文章

  1. 感知哈希算法的java实现

    一.原理讲解      实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹 ...

  2. 谷歌百度以图搜图 "感知哈希算法" C#简单实现

    /// <summary> /// 感知哈希算法 /// </summary> public class ImageComparer { /// <summary> ...

  3. 感知哈希算法——Python实现【转】

    转自:https://blog.csdn.net/m_buddy/article/details/78887248 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  4. 感知哈希算法 python 3.4

    #!/usr/bin/python # -*- coding: UTF-8 -*- #Less than 10 add to list and sort import glob import os i ...

  5. 图片哈希概论及python中如何实现对比两张相似的图片

    Google 以图搜图的原理,其中的获取图片 hash 值的方法就是 AHash. 每张图片都可以通过某种算法得到一个 hash 值,称为图片指纹,两张指纹相近的图片可以认为是相似图片. 以图搜图的原 ...

  6. 更有效率的使用Visual Studio(二)

    没想到上一篇文章有这么多人喜欢,多谢大家支持.继续- 很多比较通用的快捷键的默认设置其实是有一些缩写在里面的,这个估计也是MS帮助我们记忆.比如说注释代码的快捷键是Ctrl + E + C,我们如果知 ...

  7. 从HashMap透析哈希表

    ##扯数据结构 先看一下哈希表的概念: 哈希表是一种数据结构,它可以提供快速的插入操作和查找操作.第一次接触哈希表,他会让人难以置信,因为它的插入和删除.查找都接近O(1)的时间级别.用哈希表,很多操 ...

  8. 更有效率的使用Visual Studio(一)

    很多比较通用的快捷键的默认设置其实是有一些缩写在里面的,这个估计也是MS帮助我们记忆.比如说注释代码的快捷键是Ctrl + E + C,我们如果知道它是 Ctrl + Edit + Comment C ...

  9. 更有效率的使用 Visual Studio - 快捷键

    工欲善其事,必先利其器.虽然说Vim和Emacs是神器,但是对于使用Visual Studio的程序员来说,我们也可以通过一些快捷键和潜在的一些功能实现脱离鼠标写代码,提高工作效率,像使用Vim一样使 ...

随机推荐

  1. centos7 安装telnet

    SSH Secure Shell 3.2.9 (Build 283)Copyright (c) 2000-2003 SSH Communications Security Corp - http:// ...

  2. spring boot和spring cloud版本选择

    SpringBoot版本介绍 官网链接:https://spring.io/projects/spring-boot#learn Spring Boot的版本以数字表示.例如:Spring Boot ...

  3. impala语句

    0.保留两位小数 round(字段a, 需要保留几位小数) round( data, 4) 1. case wen case when 字段a = '01' and 字段b = '01' and 字段 ...

  4. kail下安装RsaCtfTool

    最近做了一些RSA的ctf题目,感觉在RsaCtfTool是很麻烦的事,但是发现在kali上安装下载非常简便,所以找一了一些教程,总结一下 参考链接:http://www.sohu.com/a/257 ...

  5. ccpc2020长春站F题 Strange Memory

    dsu on tree 题目链接 点我跳转 题目大意 给定一棵包含 \(n\) 个节点的树,每个节点有个权值 \(a_i\) 求\(∑_{i=1}^n∑_{j=i+1}^n[a_i⊕a_j=a_{lc ...

  6. 苹果电脑上folx下载器比迅雷还好用?

    对于使用Mac电脑的小伙伴来说,除了迅雷以外,能够使用的下载工具非常少.小编也会经常被朋友问起,是否有好用的Mac下载工具推荐.小编都会毫不犹豫地推荐他们Folx,一款非常适用于Mac的下载工具.今天 ...

  7. FL studio系列教程(二):水果的强大功能

    作为音乐人,在电脑上进行编曲,混音,合成是家常便饭,而市面上大家常用的音乐编曲制作软件很多,小编在这里就给大家做一个推荐. 大家常听到的音乐编曲制作软件大多是Cubase.Nuendo.Pro Too ...

  8. centos克隆虚拟机

    首先我们把所要克隆的虚拟机关机,然后在所要克隆的虚拟机上右键,选择管理,选择克隆,出现如下界面: 点击下一步,选择虚拟机的当前状态,继续点击下一步 接着选择创建完整克隆,选择这个时,表明克隆出来的这个 ...

  9. CSUST 第15届 校赛总结

    一直想记录一下自己的比赛,却感觉空间说说有点不适,思考了一番还是打算放到自己的博客园 这次比赛总体来说还是不错,签到还是稳的一批,基本前四小时都在rk1 开局切了几道签到题,然后开了一道思维gcd,正 ...

  10. GraphicsLab 之 Atmospheric Scattering (二)

    作者:i_dovelemon 日期:2020-11-25 主题:Atmospheric Scattering, Volume Scattering, Rayleigh Scattering, Mie ...