图像处理 图像相似算法aHash、dHash、pHash解析与对比_dhash phash-程序员宅基地

技术标签: python  图像处理  相似去重  hash  

某个角落,一个人,一杯酒。他看不清周遭,也没人记得住他。城市偌大,从来不缺孤单的人,离乡背井,迷失在霓虹深处。好在有天地万物与他作伴,他们或指引或守护,让他能一直记住出发以前的自己。——毛不易《消愁》

前言

在图像仅仅出现图像缩放、图像亮度变化、图像色度变化、图像对比度变化、图像锐度变化、图像模糊的情况下,基于图像哈希计算图像的相似度计算方案有较高的准确度和执行效率。

算法介绍

图像均值哈希算法

基于均值哈希的算法称为均值哈希算法(Average Hash Algorithm,AHA),此算法是基于比较灰度图每个像素与所有像素点的平均值来实现的,最适用于缩略图,放大图搜索。
在这里插入图片描述

图像感知哈希算法

感知哈希,全称是Perceptual Hash,是基于像素点级别的一种散列映射方式,基于认知心理学的信息加工理论为基础,提取图像中的各种特征用于生成独特但不是唯一的指纹,即一串简短且可以表示图像可被人类感知的特征内容的感知数字序列,且这些指纹具有可比性。
在这里插入图片描述

  • 离散余弦变换(Discrete Cosine Transform,DCT)

图像差异哈希算法

图像差异哈希,全称是Difference Hash,是基于像素点级别的一种散列映射方式。图像差异哈希是通过逐像素比对相邻像素像素值的差异,即逐像素得到当前像素与右邻像素的差值,得到一个图像差异矩阵,通过该矩阵映射生成哈希值。这个逐像素得到的图像差异矩阵的比原像素矩阵少了一列,即宽度比原像素矩阵少了1,高度不变。
在这里插入图片描述

三种图像感知哈希的比较

图像均值哈希本质上是对颜色的比较,图像感知哈希由于做了 DCT 操作,本质上是对频率的比较,图像差异哈希本质上是基于渐变的感知哈希算法。

下面是对比的素材:
在这里插入图片描述
下面是对比的结果:
在这里插入图片描述

素材生成代码

import cv2 as cv
import numpy as np
from PIL import Image
import os.path as path
from PIL import ImageEnhance


def rotate(image):
    def rotate_bound(image, angle):
        # grab the dimensions of the image and then determine the
        # center
        (h, w) = image.shape[:2]
        (cX, cY) = (w // 2, h // 2)

        # grab the rotation matrix (applying the negative of the
        # angle to rotate clockwise), then grab the sine and cosine
        # (i.e., the rotation components of the matrix)
        M = cv.getRotationMatrix2D((cX, cY), -angle, 1.0)
        cos = np.abs(M[0, 0])
        sin = np.abs(M[0, 1])

        # compute the new bounding dimensions of the image
        nW = int((h * sin) + (w * cos))
        nH = int((h * cos) + (w * sin))

        # adjust the rotation matrix to take into account translation
        M[0, 2] += (nW / 2) - cX
        M[1, 2] += (nH / 2) - cY

        # perform the actual rotation and return the image
        return cv.warpAffine(image, M, (nW, nH))

    return rotate_bound(image, 45)


def enhance_color(image):
    enh_col = ImageEnhance.Color(image)
    color = 1.5
    return enh_col.enhance(color)


def blur(image):
    # 模糊操作
    return cv.blur(image, (15, 1))


def sharp(image):
    # 锐化操作
    kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
    return cv.filter2D(image, -1, kernel=kernel)


def contrast(image):
    def contrast_brightness_image(src1, a, g
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Notzuonotdied/article/details/95727107

智能推荐

Ceph运维手册!免费下载_ceph 维护命令 pdf下载-程序员宅基地

文章浏览阅读198次。Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,作为主流的分布式存储技术之一,ceph越来越成为运维工程师技能树的必备要件。今天分享的ceph运维手册可谓含金量十足,汇总了Ceph在使用中常见的运维和操作问题,主要用于指导运维人员的相关工作。存储方面的新手,在对Ceph有了基础了解之后,也可以通过本手册进一步深入Ceph 的使用和运维。【领取方式戳这里】由于内容过多,在此只以截图展示部分内容,详细完整版的文档免费领取方式请见文末。目录详情:资料整理自网络_ceph 维护命令 pdf下载

GitHub 标星 11000+,阿里开源微服务如何连续 10 年扛住双十一大促_github 标星 11000 ,阿里开源的微服务组件如何连续 10 年扛住双十一大促?-程序员宅基地

文章浏览阅读1.7k次。云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!作者 | 宿何,阿里云高级开发工程师责编 | 唐小引封图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)疫情期间,“卡”成了很多人线上体验的关键词。线上预约购买口罩时,突然不能付款了;在线选课,被提示请求过多,系统无法响应;在线办公/教学时,图像或声音..._github 标星 11000 ,阿里开源的微服务组件如何连续 10 年扛住双十一大促?

深源恒际上线二代个人信用报告OCR识别服务-程序员宅基地

文章浏览阅读1.1k次。1月中旬,央行征信中心启动了二代征信系统切换上线工作,开始面向社会公众和金融机构开放二代格式信用报告查询服务。随后,深源恒际及时跟进信用报告OCR识别产品的升级工作。目前产品迭代已完成,深源恒际将于本周内上线二代个人信用报告OCR识别服务。信用报告OCR识别产品主要面向信贷服务机构,提供基于个人信用报告的信息自动化识别与提取服务。基于OCR识别技术结合专项训练方法构建的信用报告识别专用模型,自...

(程序员必备技能)Markdown语法_markdown语法 程序员-程序员宅基地

文章浏览阅读3k次。斜体和粗体输入:*斜体*或_斜体_**粗体*****加粗斜体***~~删除线~~显示效果:斜体或_斜体_粗体加粗斜体删除线分级标题输入: 这是一个一级标题 ============================ 这是一个二级标题 -------------------------------------------------- #..._markdown语法 程序员

SVG 中的基础图形(rect , line ,circle 等)以及在 D3.js 中的应用_cor-rect直线对应-程序员宅基地

文章浏览阅读4.1k次。SVG 中的基础图形(rect , line ,circle 等)以及在 D3.js 中的应用文章目录SVG 中的基础图形(rect , line ,circle 等)以及在 D3.js 中的应用矩形 - rect直线 - line圆形 - circle椭圆 - ellipse在 D3.js 中,根据要展示的数据,我们挑选合适的 svg 中的基础图形,然后进行一系列的设置等,使其达到我们的要求..._cor-rect直线对应

栈的运用(中缀表达式转换为后缀表达式,并对后缀表达式求值。)_利用栈,把中缀表达式转化未后缀表达式,对后缀表达式求值-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏7次。中缀表达式转换成后缀表达式的基本思想: 顺序扫描中缀表达式: 若读入的是一个运算分量,则输出; 若读入的是一个左括号,则入栈,栈中左括号的优先级被视为比任何操作符都低。 若读入的是一个操作符(如 + 或 -),其级别比栈顶元素级别高,则入栈,否则,栈顶元素出栈,输出。 若读入的是右括号,栈中元素出栈,输出,直到碰到左括号,左括号出栈,但不输_利用栈,把中缀表达式转化未后缀表达式,对后缀表达式求值

随便推点

如何生成ROM的coe文件_rom存coe-程序员宅基地

文章浏览阅读2.8k次,点赞4次,收藏15次。在生成ROM时需要提供coe文件,如下图所示。这个coe文件本质上就是Memory的初始化文件,Xilinx对其有具体的格式要求。coe文件格式coe文件格式要求如下图所示,其中前两行是固定的。其中第一行定义了Radix,可以是2、10或16,意味着第2行定义的数据向量内容可以是二进制、十进制或十六进制。这里需要说明的是定义的数据向量各个数据之间可以是空格,也可以是逗号(但此时最后一个数据要以分号结尾)或者回车换行符。生成coe文件Matlab作为主流的算法开..._rom存coe

oca认证_OCA第2部分中的Java难题-程序员宅基地

文章浏览阅读145次。oca认证 欢迎使用OCA的Java Puzzlers的第二部分。 在这一部分中,我们将看到一个有趣的案例,涉及Java 7附带的数字文字中的下划线分隔符。 在下面的类中,您可以在十进制文字中看到分隔符下划线。 还请注意,该类现在可以正常编译。 八进制是八进制表示形式,二进制是二进制,我敢肯定你不会猜十六进制。 public class Puzzler { public stati..._java认证oca

华为鸿蒙家电物联网,华为“鸿蒙”来了:本身是为了做物联网,将比安卓速度快60%...-程序员宅基地

文章浏览阅读70次。8月9日,华为2019年开发者大会将于开幕。今年的华为开发者大会,共分为主题演讲、技术论坛和Codelabs。其中8月9日为主题演讲、10日和11日则是开发者活动。目前官方也正式放出了本次开发者大会的邀请函,据悉这次华为会将重点集中在5G落地、物联网、AI等领域,预计有200+专题分享、1500位合作伙伴、5000名全球开发者。“最快今年秋天,最晚明年春天,华为自研操作系统即将面世”,一个月前,面..._华为电视物联网

华为 1+X 网络系统运维与建设中级实操模拟题_华为1+x网络系统建设与运维中级模拟题在哪做-程序员宅基地

文章浏览阅读6.1k次,点赞16次,收藏85次。华为 1+X 网络系统运维与建设中级实操模拟题实验报告_华为1+x网络系统建设与运维中级模拟题在哪做

阿里云云盾 · 云防火墙获WitAwards2017年度创新产品大奖,领奖词太燃!_阿里云 云防火墙 正式上线 2017-程序员宅基地

文章浏览阅读521次。点击有惊喜12月14日,在Freebuf 互联网安全创新大会上,阿里云云盾· 云防火墙捧得WitAwards2017互联网安全评选“年度创新产品”大奖。这已是阿里云安全团队及云盾产品,连续三年获得WitAwards奖项。阿里云云盾· 云防火墙是国内首款基于可视化的微隔离产品。评选委员会认为:阿里云云盾 · 云防火墙可以让企业在零配置的情况下,自动实现业务_阿里云 云防火墙 正式上线 2017

linux主机下扩展xp虚拟机的磁盘空间_如何给linux中的winxp增加存储空间-程序员宅基地

文章浏览阅读647次。1.使用VBoxManage modifyhd命令设置vdi文件的大小,例如,设置vdi文件大小为32G VBoxManage modifyhd /home/yunxian_19/VirtualBox\ VMs/winXP/winXP.vdi --resize 32768命令行输出 0%...10%...20%...30%...40%...50%...60%...70%...80%..._如何给linux中的winxp增加存储空间

推荐文章

热门文章

相关标签