图像哈希:QDCT篇

这个领域的背景
相关性质

FQDCT和IQDCT的相关公式,公式来自于论文(Partial Encryption of Color Image Using Quaternion Discrete Cosine Transform):
F Q D C T q ( p , s ) = α ( p ) α ( s ) ∑ x = 0 X − 1 ∑ y = 0 Y μ q f q ( x , y ) N ( p , s , x , y ) I Q D C T q ( x , y ) = − ∑ x = 0 X − 1 ∑ y = 0 Y α ( p ) α ( s ) μ q C q ( p , s ) N ( p , s , x , y ) u q = 1 3 i + 1 3 j + 1 3 k ( 这是论文给定的 ) N ( p , s , x , y ) = c o s ( π ( 2 x + 1 ) p 2 X ) c o s ( π ( 2 y + 1 ) p 2 Y ) α ( p ) = { 1 X , p = 0 2 X , p ≠ 0 α ( s ) = { 1 Y , p = 0 2 Y , p ≠ 0 其中 C q = F Q D C T q ( f ( x , y ) ) C q ( p , s ) = C r ( p , s ) + C i ( p , s ) i + C j ( p , s ) j + C k ( p , s ) k ( 其中虚部的实数部分见论文公式 13 ) 上述式子是因为: i ∗ j = − j ∗ i = k , j ∗ k = − k ∗ j = i , k ∗ i = − i ∗ k = j FQDCT_q(p,s) = \alpha(p)\alpha(s)\sum_{x=0}^{X-1}\sum_{y=0}^{Y}\mu_qf_q(x,y)N(p,s,x,y)\\ IQDCT_q(x,y) = -\sum_{x=0}^{X-1}\sum_{y=0}^{Y}\alpha(p)\alpha(s)\mu_qC_q(p,s)N(p,s,x,y)\\ u_q = \frac{1}{\sqrt{3}}i+\frac{1}{\sqrt{3}}j+\frac{1}{\sqrt{3}}k(这是论文给定的)\\ N(p,s,x,y) = cos(\frac{\pi(2x+1)p}{2X})cos(\frac{\pi(2y+1)p}{2Y})\\ \alpha(p) = \begin{cases} \frac{1}{\sqrt{X}},p=0\\ \sqrt\frac{2}{{X}},p\neq0 \end{cases} \alpha(s) = \begin{cases} \frac{1}{\sqrt{Y}},p=0\\ \sqrt\frac{2}{{Y}},p\neq0 \end{cases}\\ 其中C_q=FQDCT_q(f(x,y))\\ C_q(p,s) = C_r(p,s)+C_i(p,s)i+C_j(p,s)j+C_k(p,s)k(其中虚部的实数部分见论文公式13)\\ 上述式子是因为:i*j=-j*i=k,j*k=-k*j=i,k*i=-i*k=j FQDCTq(p,s)=α(p)α(s)x=0X1y=0Yμqfq(x,y)N(p,s,x,y)IQDCTq(x,y)=x=0X1y=0Yα(p)α(s)μqCq(p,s)N(p,s,x,y)uq=3 1i+3 1j+3 1k(这是论文给定的)N(p,s,x,y)=cos(2Xπ(2x+1)p)cos(2Yπ(2y+1)p)α(p)= X 1,p=0X2 ,p=0α(s)= Y 1,p=0Y2 ,p=0其中Cq=FQDCTq(f(x,y))Cq(p,s)=Cr(p,s)+Ci(p,s)i+Cj(p,s)j+Ck(p,s)k(其中虚部的实数部分见论文公式13)上述式子是因为:ij=ji=k,jk=kj=i,ki=ik=j

文章信息
  1. 作者:Xiaomei Xing
  2. 期刊:KSII Transactions on Internet and Information Systems(三区)
  3. 题目:A Novel Perceptual Hashing for Color Images Using a Full Quaternion Representation
目的、实验步骤及结论
  1. 目的:QDCT来生成图像哈希,四元数的主要目的就是为了融合多个通道的信息,使得提取的特征更多。

  2. 实验步骤:

    • 数据预处理:双线性插值(512*512大小),高斯低通滤波(3 * 3)

    • 特征提取:分块(32 * 32);针对每一块都使用QDCT计算得到每一块对应的相同大小的四元数矩阵,即得到一个实部和三个虚数的系数,最后使用四元数的振幅(实部和三个虚数的系数平方和开根号)来得到每一块的最终特征矩阵。

    • 生成哈希值:计算每一块特征矩阵每一行和列的2-33个元素的 L 2 L_2 L2范数(即向量之间的距离),最终会得到256个距离值,使用下述公式计算每一个图片的哈希值。
      h ( i ) = { 0 , d i < T 1 , O t h e r w i s e 其中 T 表示 d 排序结果的中间值 h(i) = \begin{cases} 0,d_i < T\\ 1,Otherwise \end{cases}\\ 其中T表示d排序结果的中间值 h(i)={0,di<T1,Otherwise其中T表示d排序结果的中间值

    • 图像相似度:使用每张图片之间的汉明距离来判断是否相似。小于阈值则相似,否则不相似。

  3. 结论:

    使用四元数能够有效地提取每个通道的信息,从而大幅度地提高图像哈希的鲁棒性和唯一性。

在这里我针对四元数对QDCT和QDFT进行一个解释,我的理解就是每一个像素点我们都可以使用四元数 f q f_q fq 进行表示,我们进行分块之后每一个块可以是看作一个四元数矩阵。我们对每一个块进行DFT和DCT之后得到的结果也是一个四元数矩阵 C q C_q Cq
f q ( x , y ) = f b l k + f r ( x , y ) i + f g ( x , y ) j + f b ( x , y ) k C q ( p , s ) = C r ( p , s ) + C i ( p , s ) i + C j ( p , s ) j + C k ( p , s ) k f_q(x,y) = f_blk+f_r(x,y)i+f_g(x,y)j+f_b(x,y)k\\ C_q(p,s) = C_r(p,s)+C_i(p,s)i+C_j(p,s)j+C_k(p,s)k fq(x,y)=fblk+fr(x,y)i+fg(x,y)j+fb(x,y)kCq(p,s)=Cr(p,s)+Ci(p,s)i+Cj(p,s)j+Ck(p,s)k
我们需要得到的最终结果就是 C q C_q Cq ,至于 C q C_q Cq中的四个系数是怎么求得的,在论文中文章开头的那篇论文中写的很详细,无非进行将三个通道进行相加减然后再使用DCT或者DFT计算得出,这样看其实QDFT和QDCT也没有那么神秘了吧。

def image_hash(img_path):img = processing(img_path)C_r_list = image_feature(img)h_i = gen_hashing(C_r_list)return h_idef processing(img_path):"""input:图片的路径output:处理后的RGB图片"""try:img = cv2.imread(img_path)x = img.shape[0]//2 # 高度y = img.shape[1]//2 # 宽度Min = x if x<y else ycropped_image = img[x-Min:x+Min, y-Min:y+Min] # 裁剪图像img = cv2.resize((cropped_image), (512,512), interpolation=cv2.INTER_LINEAR)except:img = imageio.mimread(img_path)img = np.array(img)img = img[0]img = img[:, :, 0:3]x = img.shape[0]//2 # 高度y = img.shape[1]//2 # 宽度Min = x if x<y else ycropped_image = img[x-Min:x+Min, y-Min:y+Min] # 裁剪图像img = cv2.resize((cropped_image), (512,512), interpolation=cv2.INTER_LINEAR)
#     out = cv2.GaussianBlur(img, (3, 3),1.3) # 使用python自带的高斯滤波kernel = np.array([[1,2,1],[2,4,2],[1,2,1]])/16out = cv2.filter2D(img, -1 , kernel=kernel)  # 二维滤波器out = cv2.cvtColor(out, cv2.COLOR_BGR2YCrCb)return outdef image_feature(img):"""iamge:(512,512,3)return: array格式(x,64,64)"""C_r_list = np.zeros((0,64,64)).tolist()for i in range(0,512,64):for j in range(0,512,64):image_block = img[i:i+64,j:j+64,:]C_r,C_i,C_j,C_k = QDCT(image_block) # 可以在这里取出实部和三个虚数的实部C_r_list.append(np.sqrt(C_r**2+C_i**2+C_j**2+C_k**2).tolist())# C_r_list.append(cv2.dct(np.float32(image_block[:,:,0])))return np.array(C_r_list)def gen_hashing(feature_matrix):"""生成图像哈希值,和原论文不同,我的P和Q矩阵是每一行代表一个图像块。input:array (x,64,64)output:list (x)"""d_i = []h_i = []P_matrix = np.zeros((0,32)).tolist()Q_matrix = np.zeros((0,32)).tolist()for i in feature_matrix:i = np.array(i)row = i[0,1:33].reshape(1,-1)column = i[1:33,0].reshape(1,-1)P_matrix.extend(row.tolist())Q_matrix.extend(column.tolist())P_matrix = np.array(P_matrix)Q_matrix = np.array(Q_matrix)P_matrix_1 = (P_matrix - np.mean(P_matrix,axis = 0))/np.std(P_matrix,axis = 0,ddof=1)Q_matrix_1 = (Q_matrix - np.mean(Q_matrix,axis = 0))/np.std(Q_matrix,axis = 0,ddof=1)d_i = np.sqrt(np.sum((P_matrix_1 - Q_matrix_1)**2,axis = 1))median = np.median(d_i)for i in d_i:if i < median:h_i.append(0)else:h_i.append(1)return np.array(h_i)def QDCT(img):"""img:(64,64,3)"""# C_r = DCT(img[:,:,0]+img[:,:,1]+img[:,:,2]) * (- 1 / np.sqrt(3))Y = cv2.cvtColor(img, cv2.COLOR_RGB2YUV)[:,:,0]V_blk = np.sum((Y-np.mean(Y))**2)/(img.shape[0]**2)C_r = cv2.dct(np.float32(img[:,:,0]+img[:,:,1]+img[:,:,2]) * (- 1 / np.sqrt(3)))C_i = cv2.dct(np.float32(img[:,:,2]-img[:,:,1]+V_blk) * (1 / np.sqrt(3)))C_j = cv2.dct(np.float32(img[:,:,0]-img[:,:,2]+V_blk) * (1 / np.sqrt(3)))C_k = cv2.dct(np.float32(img[:,:,1]-img[:,:,0]+V_blk) * (1 / np.sqrt(3)))# C_i = DCT(img[:,:,2]-img[:,:,1]) * (1 / np.sqrt(3))# C_j = DCT(img[:,:,0]-img[:,:,2]) * (1 / np.sqrt(3))# C_k = DCT(img[:,:,1]-img[:,:,0]) * (1 / np.sqrt(3))return C_r,C_i,C_j,C_k
def dist_img(h1,h2):return sum(np.abs(h1-h2))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

150G全国1米分辨率土地利用数据【2023年】

#1数据摘要 全国1米分辨率土地利用数据 全国范围,分省份分类,1米精度土地利用数据。2023年版本。 数据格式:tif 坐标系:wgs1984 范围:全国各省份 时间:2023年 精度:1米 地类:共计11个地类 中国1m分辨率土地覆盖数据 文件命名与介绍:数据为GeoTIFF栅格格式,每个城市…

Excel 公式的定义、语法和应用(LOOKUP 函数、HLOOKUP 函数、VLOOKUP 函数;MODE.MULT 函数; ROUND 函数)

一、公式的定义和语法 二、公式的应用 附录 查找Excel公式使用方法的官方工具【强烈推荐!!!】:Excel 函数(按字母顺序)【微软官网】 excel 函数说明语法LOOKUP 函数在向量或数组中查找值LOOKUP(lookup_value, lookup_vector, [result_vector])

Python学习之旅高级篇:Web开发之旅(一)—— Flask和Django框架概览

在Python高级篇的Web开发之旅中&#xff0c;我们将深入探索如何使用Python构建动态网站和Web应用程序。本系列的首先&#xff0c;我们将从Web框架的基础知识开始&#xff0c;逐步过渡到Flask和Django这两个流行的Python Web框架的详细介绍。 Web框架简介 Web框架的作用和重要…

shell--while循环

1.基本语法 while [ 条件表达式 ] do语句语句 done 示例&#xff1a;循环输出 1~10这几个数 [rootopenEuler ~]# cat while1.sh #!/bin/bashi1 while [ $i -le 10 ] doecho $ilet i done 示例&#xff1a;使用 exec 读取指定文件的内容并循环输出。 # 第一步创建文件及内…

ADOP带您了解CWDM模块和DWDM模块

CWDM&#xff08;Coarse Wavelength Division Multiplexing&#xff0c;粗波分复用&#xff09;和DWDM&#xff08;Dense Wavelength Division Multiplexing&#xff0c;密集波分复用&#xff09;是两种常见的光模块技术&#xff0c;用于在光纤中同时传输多个信号。让我们来看看…

Webfunny前端监控如何接入飞书单点登录(SSO)

Hello&#xff0c;大家好&#xff0c;欢迎使用**webfunny前端监控和埋点平台**。今天我们将介绍一下如何接入飞书的登录系统。 友情提示&#xff1a;如果飞书侧已经配置好了&#xff0c;可以直接跳到第六步阅读。 一、创建飞书网页项目 进入飞书开发者后台&#xff0c;创建企…

大话设计模式-装饰器模式

大话设计模式书中&#xff0c;作者举了一个穿衣服的例子来为我们引入装饰器模式。 概念 定义 装饰模式在书中的定义是&#xff1a;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更灵活。 这句话直接去理解可能会有点抽象&#…

7个因素影响小红书账号权重

1、原创 小红薯对原创内容给予了较高的权重和推荐度。如果笔记的原创度低于60%&#xff0c;平台会对其权重大幅降低&#xff0c;这意味着笔记可能会被限流&#xff0c;即在用户的推荐流中很少出现。 2、转化率 当你发布一篇笔记后&#xff0c;平台会根据标签将其推送给一小部分…

如何进行JVM的调优

进行Java虚拟机&#xff08;JVM&#xff09;的调优是一项关键的工作&#xff0c;旨在优化JVM的性能&#xff0c;提高应用程序的响应速度和吞吐量&#xff0c;并确保系统的稳定运行。JVM调优通常涉及到调整堆大小、选择合适的垃圾收集器、监控运行时性能以及分析内存泄漏等方面。…

探索Java设计模式:状态模式

深入理解与实践Java设计模式之状态模式 一、简要介绍 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为。状态模式通过引入状态类来封装与状态相关的行为&#xff0c;并使上下文对象&#xff08;即拥有…

华为校招机试 - 扑克牌消除(20240417)

题目描述 从一副扑克牌中随机抽取 n 张牌组成一个序列,规定连续 3 张相同牌号的卡牌可以消除,剩余卡牌按照当前顺序重新合并成新的序列后继续消除,重复以上步骤直到无法消除,最后请输出结束后剩余的卡牌序列。 注:存在连续 4 张相同牌号的情况,消除后剩余一张。 输入描…

数据结构-KMP算法

KMP算法 简单的模式匹配算法 定义:子串的定位操作通常称为串的模式匹配,他求的是子串在主串中的位置过程 逐个字符比较 从主串指针 i 对应的字符和模式串指针 j 对应的字符开始&#xff0c;依次比较它们是否相等。若相等&#xff0c;则同时移动 i 和 j 向右一位&#xff0c;继续…

C语言本身不难,难得是应用场景很多

你学了C语言多半是要做项目的&#xff0c;这个过程中C语言是远远不够的&#xff0c;你把这部分难度加到C语言上&#xff0c;自然就难了在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区…

【python】如何通过python来发送短信

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

MySQL-多表设计

黑马程序员JavaWeb开发教程 文章目录 一、一对多&#xff08;多对一&#xff09;二、一对一三、多对多 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xf…

【日志】CSDN-AI助手升级日志

CSDN-AI助手升级日志 2023/04/05上线 支持点赞、收藏回访 关注回访&#xff08;对方至少有一条博客的记录&#xff09; 评论回访 私信检测到群发消息自动三连 OR 通过私信指令三连触发 bug优化 优化检测模式&#xff0c;防止出现多触发情况 为了防止操作额度不够&#xff0c…

虚拟局域网PPTP配置与验证

虚拟局域网PPTP配置与验证 前言PPTP服务侧安装配置REF 前言 虚拟专用网&#xff08;Virtual Private Network&#xff0c;VPN&#xff09;是一种通过公共网络建立安全的连接的技术。它能够在不同的地理位置之间建立私密的通信通道&#xff0c;实现远程访问网络资源的安全性和隐…

2024.4.21周报

目录 摘要 Abstract 文献阅读&#xff1a;Next Item Recommendation with Self-Attentive Metric Learning 问题及方法 论文贡献 方法论 序列感知的推荐系统 神经注意模型 模型&#xff1a;ATTREC 序列推荐 基于Self-Attention的用户短期兴趣建模 用户长期兴趣建模…

JSS作业

JSS作业&#xff1a; 1: <script>var cnt parseInt(window.prompt("请输入打印的行数&#xff1a;"));for (var i 1; i < cnt; i){for (var j 1; j < i; j){document.write("*")}document.write("<br>")} </script>…

量化交易:多因子选股结合布林带择时

哈喽,大家好,我是木头左! 多因子选股策略是一种基于多个财务指标来筛选股票的方法。这种策略认为,通过综合考虑多个因素,可以更全面地评估一家公司的价值和盈利潜力。 感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流! 策略的基本原理 在本策略中,我…