脆弱水印 信息隐藏 QR分解

一、算法介绍

1、论文出处

F. Nejati, H. Sajedi and M. Mohammadi, “Fragile Watermarking for Image Authentication Using QR factorization and Fourier Transform,” 2019 5th International Conference on Web Research (ICWR), 2019, pp. 45-49, doi: 10.1109/ICWR.2019.8765292.

在这里插入图片描述

2、算法原理

在图片都过不可信信道传输时,通常会受到各种攻击,这些会导致图片的可分辨性下降,对于一些敏感图片,如军事或医用图片,确认图片被攻击与否几位重要。当脆弱水印被成功提取时,便可以认为图片未受到攻击。
文中提出了一种利用傅里叶变换和QR分解的脆弱水印方法。该方法首先对载体图像进行傅里叶变换。接着对变换后的载体图像和水印图像都进行QR分解。接下来,将水印图像的R矩阵的系数添加到载体图像的R矩阵中,得到一个上三角矩阵,将其乘以原载体图片的Q矩阵,得到带水印载体图片。

(1)傅里叶变换
由于灰度图像是二维图像,所以它使用二维傅里叶变换。在二维中,离散傅里叶变换(DFT)以一个矩阵作为输入,并返回另一个与输出的大小相同的矩阵。假设原始矩阵值为f(x,y),其中x和y是索引,然后,输出矩阵值为F(u,v)。F被称为矩阵f的傅里叶变换,如式1:
在这里插入图片描述
原矩阵f被称为F的逆傅里叶变换,如式2:
在这里插入图片描述
其变换公式如公式3、4,其中M,N为矩阵大小:
在这里插入图片描述
(1)QR分解
矩阵的QR分解是指将原始矩阵A分解为A=Q*R,其中Q为正交矩阵,R为上三角矩阵。

(2)脆弱水印算法

1)嵌入算法
该算法具体流程如下图
在这里插入图片描述
预处理:在对图像进行傅里叶变换和QR分解之前,对图像进行预处理。第一步将图片修改为固定大小,其次将其变为灰度图。
傅里叶变换:傅里叶变换(FT)是一种可以应用于图像的变换。这种转变提高了水印的视觉质量。通过对图像应用FT,其结果是具有与原始图像相同大小的图像,并且它只是对原始图像的变换。
矩阵分解:在对载体图像进行傅里叶变换后,对载体图像和水印图像同时进行QR分解。在Q、R矩阵之间,选择有更多0的矩阵,即R矩阵进行嵌入,因为该矩阵中的变换会图像影响较小。
嵌入方法如下式:
在这里插入图片描述
α也被称为嵌入强度,由实验决定以获得更好的不可感知性。
在找到Rnew后,将其乘以QH以获得更好的不可感知性。如下式:
在这里插入图片描述
对最后的结果进行逆傅里叶变化,得到最后的带水印图像。
2)提取算法
在这里插入图片描述
1)对带水印图片进行傅里叶变化,得到图片的傅里叶矩阵WF
2)对WF进行QR分解,得到QF,RF。
3)提取出RExtracted,如下式:
在这里插入图片描述
4)将RExtracted与QH相乘,得到提取出的图片。
如果此时的S被成功提取,则认为图片未受到攻击,反之则受到攻击。

二、算法复现

1、代码展示(matlab2018b)

%------------------------------------------------------------------%
%     脆弱水印     %%        
%     朱靖宇       %%
%-----------------------------------------------------------=------%
clear ;
clc;
alpha=0.1;
%-----------------------------------------------------------------%
% Embedding Watermark
% Preprocessing %
host_img=imread('I.png');
host_img=imresize(host_img,[512,512],'nearest');
host_img=rgb2gray(host_img);
watermark=imread('W.png');
watermark=imresize(watermark,[512,512],'nearest');
watermark=rgb2gray(watermark);
figure(1);      %打开窗口
subplot(2,2,1);    %该窗口内的图像可以有两行三列
imshow(host_img),title('载体图像');   %显示水印图像
subplot(2,2,2),imshow(watermark),title('水印图像');% Fourier transform %
host_img=im2double(host_img);
host_F=fft2(host_img);
%host_imF=log10(abs(host_F)+1);
host_imF=host_F;
%  Matrix Factorizations %
[Qh,Rh]=qr(host_imF);
watermark=im2double(watermark);
[Qw,Rw]=qr(watermark);% Embedding watermark image %% length(find(Rh==0))
Rnew=Rh+alpha*Rw;
Embed=Qh*Rnew;
Embed=ifft2(Embed);
%Embed= uint8(Embed);
subplot(2,2,3),imshow(Embed),title('带水印图像');
imwrite(Embed,'Wateredimg.png');
%extract
Embed_F=fft2(Embed);
[Qf,Rf]=qr(Embed_F);
Re=(1/alpha)*(Rf-Rh);
Extract=Qw*Re;
%Extract=ifft2(Extract);
subplot(2,2,4),imshow(Extract),title('提取出水印图像');
imwrite(Extract,'Extract.png');

2、效果展示

在这里插入图片描述

3、性能分析

(1)容量
该脆弱水印需要载体图像与水印图像相同大小
(2)水印不可见性
带水印图像与原图像肉眼观察上相似,无明显差异,图像间峰值信噪比PSNR=77.027,互相关系数NC为1
(3)脆弱性
1)高斯滤波攻击
对带水印图片进行高斯滤波。效果如下:
在这里插入图片描述
2)噪声攻击
对带水印图片施加椒盐噪声,噪声比例为0.01,效果如下:
在这里插入图片描述
3)jpeg压缩攻击
对带水印图像进行jpeg压缩
在这里插入图片描述
4)放大攻击
对图像先放大2倍,再缩小两倍
在这里插入图片描述
5)缩小攻击
将图片先缩小两倍,再放大两倍
在这里插入图片描述
6)裁剪攻击
对图片周围进行裁剪
在这里插入图片描述
通过上述结果可以发现,该水印方法具有脆弱性。

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

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

相关文章

watermark-removal: 一款超赞的开源图片去水印解决方案

公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 今天给大家推荐一个开源项目,这个开源项目的图片去水印效果非常好。 这个开源项目就是:Watermark-Removal,是可基于机器学习的图像修复方法&…

德国商标注册程序

(一)进行商标查询。申请人应调查是否已注册相同或类似商标。可在德专利商标局慕尼黑总部、耶拿办事处和柏林技术信息中心的商标注册大厅以及该局网站免费查询。也可向位於该国24个大中城市的专利信息中心查询,四周可出结果,收费50…

商标注册查询入口官网在国家知识产权局商标局查询

最近程序员想要注册商标,注册之前要进行商标近似查询,提高通过成功率,前期不好好查询的话,要是被商标局驳回,规费可是不退的。所以,商标查询是很重要的环节,商标注册查询入口官网肯定是家知识产…

小度电视伴侣与小米电视音响对比评测

本文来自智能电视网 家里智能电视买了有小一年了,平时工作忙没怎么看,但是过年期间的使用率还挺高。本来对自家的电视还挺满意的,结果走亲戚的时候发现人家整的全套,投影、音响、K歌装备一应俱全,尤其是在亲戚家里看了…

刷爆朋友圈!前百度总裁陆奇最新AI重磅演讲:我的大模型世界观

文 / 高扬(微信公众号:量子论) 陆奇的演讲刷屏了,我认真看了他的演讲稿,收获颇丰。 陆奇提到,人类社会的发展,大致可分为:农业化、工业化和数字化三个阶段。 在三个递进的阶段中&…

陆奇博士最新演讲分享:我的大模型世界观(附PPT下载链接)

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 【限时免费】ChatGPT4体验,无需翻墙直接用 ChatGPT调研报告(仅供内部参考) ChatGPT的发展历程、原理、技术架构…

2022.10.27每日刷题打卡

Phoenix and Beauty 题意:给出一个长度为n的序列a,在其中任意位置插入若干个[1,n]中的数,使得新序列b中的连续k项和都相等。 思路:其实很好想,我们可以把每个元素都处理成k个元素,然后保证这k个元素的和都…

Java面试题(每日总结晨读)

一、Java基础 1.ArrayList底层数据结构是什么?说一下你对它的理解 底层是一个长度可变的数组,当使用new ArrayList()的时候,底层是: public ArrayList() { this.elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA; //默认 容量&…

2022-05-07每日刷题打卡

2022-05-07每日刷题打卡 代码源——每日一题 题目描述 有一棵 n 个节点的以1为根的有根树。现在可以对这棵树进行若干次操作,每一次操作可以选择树上的一个点然后删掉这个点和它的儿子之间的所有边。 现在想要知道对于每一个 k∈[1,n],最少需要多少次…

《花雕学AI》哪种技能5年10年后还会被市场需要? 该如何提高这些能力?

随着AI人工智能、ChatGPT等新的技术革新的发展,未来职业场景确实会发生变化,一些传统的职业可能会被取代,而一些新的职业可能会出现。根据世界经济论坛所发布的《未来就业报告》,一半的劳动力需要在2025年之前完成技能重塑。那么&…

想清楚这些的程序员,35岁绝不会被毕业

一、成长与能力 1、成长理解 成长是一个过程。在这个过程中,可能会发生各种事件,有些是正向的,有些是负向的。这些事件会影响成长的速度与方向,体现到个人能力上。我是这么看待这个过程的: 【正向事件】&#xff1a…

华为鸿蒙 OS 尝鲜,跑了个 “hello world”!跑通后,我特么开始怀疑人生...

最近华为鸿蒙OS 2.0正式开源!关于鸿蒙的教程其实网上也已经有一些尝鲜的小伙伴分享的相关文章了,编者我按照步骤一步步跑下来,整个流程还是非常简单的,尤其是对Android开发的小伙伴来说,从IDE到项目的创建及项目的编译…

梅科尔工作室-鸿蒙笔记1

梅科尔工作室-于天姿-鸿蒙笔记1 一、主要目录配置文件作用 1、stage模型 其中常用模块为app.json模块,entry模块,module.json模块。 app.json5中,icon是应用图标,可在pages中添加图片,从而改变图标;labe…

华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 作者:一个俗人 来源:https://my.oschina.net/u/169565/blog/4557279 最近华为鸿蒙OS 2.0正式开源!关于鸿蒙的教程其实网上也已经有一些尝鲜的小伙伴分享的相关文章了,编者我…

值得一谈的鸿蒙2.0,程序员们拿起你们手中的编译器撸一下hello world

一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统 。现已开源,名为OpenHarmony。 2019年8月9日,华为在HDC开发者大会上正式发布鸿蒙系统。 2020年9月10日,华为在HDC开发者大会上如约发布鸿蒙 2.0,并面向应用开发者发布Beta版本…

梅克尔工作室-赵一帆-鸿蒙笔记4

1.页面的跳转和数据传递 Ability是一种包含用户界面的应用组件,主要用于和用户进行交互。Ability也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个Ability实例,都对应于一个最近任务列表中的任务。 一个应用可以有一个Ability&…

鸿蒙手机Beta版本官宣!我们带着成果和Code来了!!

12月16号,也就是今天,华为鸿蒙OS手机开发者Beta版本来啦! 发布会给出了最新版的开发环境(DevEco Studio 2.0 Beta3),支持手机等多设备模拟器的跨端运行调试,大家已经可以上手体验鸿蒙手机应用开…

鸿蒙3.0来了,这次,我真的想批评鸿蒙了

昨天我在朋友圈跟大家分享了一个鸿蒙新消息:鸿蒙 HarmonyOS 3.0 预计在3月开启内测。 ​发布之后就有很多同学过来问我关于鸿蒙3.0的问题,老王着实有点惊讶,没想到大家对于鸿蒙的关注度一直都在。 其实,我跟大家分享了那么久的鸿蒙…

鸿蒙系统可支持exe文件,效仿华为鸿蒙系统!微软放大招:新版Win10系统兼容安卓应用...

【12月1日讯】相信大家都知道,华为鸿蒙OS2.0系统手机Bate版本即将在12月16日正式发布,届时有关于华为鸿蒙手机OS系统的所有细节都将得到曝光,这也是广大网友们最为期待的东西,但就在11月28日,根据媒体最新报道&#xf…

刚刚用华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....

最近华为鸿蒙OS 2.0正式开源!关于鸿蒙的教程其实网上也已经有一些尝鲜的小伙伴分享的相关文章了,编者我按照步骤一步步跑下来,整个流程还是非常简单的,尤其是对Android开发的小伙伴来说,从IDE到项目的创建及项目的编译…