【图像隐写】基于matlab DCT数字水印嵌入+攻击+提取【含Matlab源码 1758期】
一、DCT数字水印简介
1 前言
随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显提升。数字化也可以实现信息存储的便利性,同时数字信息也能方便和快速地通过电子设备进行传输。因此,数字交换传输过程越来越简易。
这样的便利固然舒适,但是伴随的副作用也快速被发现,急切需要一种技术对密码学进行补充。现如今网络中时常出现的产权问题也被得到了重视。数字水印技术的出现大大缓解了这一情况,如若内容被进行了解密处理,这种新的信息技术仍能发挥它的效用,继续起到对信息的保护作用。
2 数字水印算法的基本要求
2.1 数字水印的定义
数字水印技术进行工作的前提是,原始载体不能受到影响。默默保护信息不被打扰不被发现是它的优势。所谓的数字水印是需要在载体文件中镶嵌一些保护信息,数字化的图像、影像、文字都是载体文件。也可以这样认为,数字水印是采用扩频通信手段在宽窄信道之间传输的一种水印信号。使用者可以通过识别载体文件中的保护信息来推断初始信息有没有被篡改,还可以从中得到其中的隐含信息。因此可以将水印信号表示为:
我们能够利用序列来表示水印信息,简单和复杂的水印信号都有对应序列;其中一维和二维序列表示较为简单的水印信号,三维或者多维的数组来表示比较复杂的水印信号。在式中A表示整个公式的一个取值范围、M表示水印信号的长度。水印信息一样也可以使用数组来表示,数组的维数的多少代表信息的复杂程度,一般一维序列是用来表示音频文件的;如果载体是图像,那对应的水印就是二维数组;载体是动画,相应的水印就是三维信号。
2.2 数字水印技术有以下四个方面的特点:
(1)安全性
信息一定是需要安全来保证的,不管在任何应用领域中,这都会是最重要的需求之一。而数字水印不仅能够保证信息的安全还能保障信息不被篡改和伪造。信息的安全不仅体现在不被偷窃还体现在误检测率要较低。数字水印的信息应该随着初始内容的改变而实时变化;数字水印的安全性越强则抵抗性越强。
(2)隐蔽性
数据在符合规则的使用情况下,不会使原本的保护的文字、图像、音频等得到降质,保证质量同时还很难被察觉,具有不可察觉的优势。
(3)鲁棒性
经过多次信号处理或者攻击之后,水印信息中的数据不被破坏,且识别结果也不会发生偏差,图像很容易被攻击就很容易将信息泄露。平移、旋转、剪切、滤波、量化、采样、转换等都是信号的处理过程。数字水印是将一些不能被看见的信息嵌入到内容数据中,通常情况下是使用在版权保护中,或者用于保护内容数据的完整性。这也是数字水印保证信息不被篡改的方式。这样可以掩盖原本的信息将现有信息进入到破坏者眼中,从而造成干扰。
(4)水印容量
考虑到整个通信领域对于隐蔽性的要求偏高,并且需求不断增长,所以数字水印的水印容量也根据该情况做出了相应的调整。在此调整的基础上,水印容量也需要加强自身的能力,将自己承载信息的能力变强,只有这样才能将图像中所需要的信息都嵌入都水印中。正是因为通信领域的独特性,数字水印在这方面的努力也使得数字水印在这个领域中非常受欢迎,并且水印容量中所承载的信息能够将初始图像的所有信息都标明。版权纠纷就是因为所属者标识不清晰才会产生,这种做法可以尽可能防止这种纠纷的发生,还能够保护数字产权合法拥有者的合法权益。
数字水印具有以上四个基本特征。正是由于数字水印有安全性、隐蔽性、鲁棒性和数字水印这些特征,才在各式各样的水印设计方案中得到最优解。一个理想的水印算法不但需要高隐蔽性,还需要有强抵御力来面对各种攻击。优秀的数字水印方案需要结合以上四点做出理性的选择,只有充分考虑到这四个特征才能在设计水印方案的时候完美切合实际需求。
2.3 DCT变换的数字水印的应用
DCT变换域算法在抵抗有损压缩编码和其他一些具有信号失真的数据处理过程有很好的表现,鲁棒性和不可感知性是难以同时满足的两个要求,但是基于DCT变换的数字水印算法能更好地满足这两个基本要求。针对DCT变换的数字水印算法,在下文中会进行详细解释。并对版权保护问题中利用DCT变换所需的方法及步骤做出介绍。
3 离散余弦变换(DCT)算法介绍
3.1 傅里叶变换紧密相关的数学运算是离散余弦变换
DCT变换的基础是傅里叶变换,图像信号需要通过二维数组的变换来实现。
反离散余弦变换IDCT坐标公式:
其中:
3.2 DCT域系数分析
根据上式的计算方法可以得到64个系数,左上方位置的式直流分量(DC分量)。去除左上角的位置坐标的其他坐标系数都称为交流分量(AC分量)。只要加入大量的水印信息都不会使得水印之后的图像与初始图像对比之后在视觉上都不会产生较大差别,此时的感觉容量即为最大,这个位置也是最适合在这64个DCT系统中添加水印信息的位置,同时还能够确保在经过恶意攻击之后,图像依旧可以完整的提取水印信息。鲁棒性较高的区域刚好位于人们视觉敏感区域,此时的信号在信息处理过程中很难被除掉。
4 基于DCT变换技术的数字水印算法的应用步骤
对于彩色图片,基本DCT算法的流程是,首先将RGB图片转成YUV格式,然后再将图像矩阵分成互不重叠的8*8块,DCT模块对其中的Y分量,而后经YUV2 RGB输出嵌入后的RGB流。流程图如图1。
图1 水印算法流程图
具体嵌入方法为:读取水印信息w(这里w取1或-1),按公式更改s系数的值,其中T是选定的阈值。数字水印是将一些不能被看见的信息嵌入到内容数据中,通常情况下是可以护内容数据的完整性。
扩频原理的叠加使用,是水印技术保证并升级DCT算法的可靠性的优质方案,用来满足数字水印设计方案的需求。DCT变换的最佳独特之处就在于,普通的信息只能将块状的信息汇聚在少量的低频DCT系数中,如此仅少量系数可以变换,还不会对图像的质量有危害。当分块的运算出现时,使得图像嵌入更为简易。因此DCT变换在低频中更适用,高频编码是容易被各种处理方法破坏使用,不被使用。扩频技术实现起来还是比较简单的,目前人们正在研究的数字水印算法更多的是基于变换域的,而这些变换域主要以频域为主,在空域算法方面,弥补了不足。
图2 原图与嵌入水印后的图像
5 水印的提取
当水印信息嵌入到图像之后,需要通过DCT变换等比较系统的方式将水印提取出来。
(1)基于DCT变换对含水印信息的数字作品进行变换。
(2)最佳嵌入区域需要根据嵌入算法来找到嵌入区域。
(3)按照水印嵌入时的基本规则将二元数组和三元数组两者的数值对比之后,就可以确定水印信息值了。
(4)将确定的水印信息值经过变换之后就可得到提取出的水印信息。
6 DCT水印攻击实验分析
从直观的角度观察水印的感知透明度就是DCT水印的攻击测试。
(1)本次分析主要对图像嵌入水印序列,之后再对已经加入水印的图像进行水印的提取。通过实验可以得出基于DCT变换后的数字水印算法的透明性有明显改善。
(2)以恶意攻击实验的方式,来验证数字水印算法在数字媒体当中的作用。能否使得版权信息得到保护;能不能快速并且有效的将信息提取出来;嵌入的水印经过攻击后是否可以完整的提取。
二、部分源代码
clear;
clc;disp('请选择载体图像:');
[filename2, pathname2] = uigetfile('*.jpg', '读取图片文件');
pathfile2=fullfile(pathname2, filename2);
image=imread(pathfile2);
disp('请选择水印图像:');
[filename, pathname] = uigetfile('*.jpg', '读取图片文件');
pathfile=fullfile(pathname, filename);
markbefore=imread(pathfile); markbefore2=rgb2gray(markbefore);
mark=im2bw(markbefore2); %使水印图像变为二值图
figure(1); %打开窗口
subplot(2,3,1); %该窗口内的图像可以有两行三列
imshow(mark),title('水印图像'); %显示水印图像
marksize=size(mark); %计算水印图像的长宽
rm=marksize(1); %rm为水印图像的行数
cm=marksize(2); %cm为水印图像的列数I=mark;
alpha=30; %尺度因子,控制水印添加的强度,决定了频域系数被修改的幅度
k1=randn(1,8); %产生两个不同的随机序列
k2=randn(1,8);
subplot(2,3,2),imshow(image,[]),title('载体图像'); %[]表示显示时灰度范围为image上的灰度最小值到最大值
yuv=rgb2ycbcr(image); %将RGB模式的原图变成YUV模式
Y=yuv(:,:,1); %分别获取三层,该层为灰度层
U=yuv(:,:,2); %因为人对亮度的敏感度大于对色彩的敏感度,因此水印嵌在色彩层上
V=yuv(:,:,3);
[rm2,cm2]=size(U); %新建一个和载体图像色彩层大小相同的矩阵
before=blkproc(U,[8 8],'dct2'); %将载体图像的灰度层分为8×8的小块,每一块内做二维DCT变换,结果记入矩阵beforeafter=before; %初始化载入水印的结果矩阵
for i=1:rm %在中频段嵌入水印for j=1:cmx=(i-1)*8;y=(j-1)*8;if mark(i,j)==1k=k1;elsek=k2;endafter(x+1,y+8)=before(x+1,y+8)+alpha*k(1);after(x+2,y+7)=before(x+2,y+7)+alpha*k(2);after(x+3,y+6)=before(x+3,y+6)+alpha*k(3);after(x+4,y+5)=before(x+4,y+5)+alpha*k(4);after(x+5,y+4)=before(x+5,y+4)+alpha*k(5);after(x+6,y+3)=before(x+6,y+3)+alpha*k(6);after(x+7,y+2)=before(x+7,y+2)+alpha*k(7);after(x+8,y+1)=before(x+8,y+1)+alpha*k(8);end
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]杨守义,姬留杰,穆晓敏,齐林.基于FRFT的数字水印算法分析[J].计算机应用与软件. 2009,26(01)
【图像隐写】基于matlab DCT数字水印嵌入+攻击+提取【含Matlab源码 1758期】相关推荐
- 【图像隐藏】基于DCT和FFT数字水印嵌入+攻击+提取含Matlab源码
1 简介 文章对DCT(离散余弦变换)和FFT域图像数字水印算法进行了研究,并用matlab工具进行实验,结果表明该算法使水印的嵌入达到了较好的鲁棒性和不可见性. 2 部分代码 function [ ...
- 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...
- 【图像隐写】DWT+DCT+PBFO改进图像水印隐藏提取【含GUI Matlab源码 081期】
⛄一.DCT数字水印嵌入与提取简介 1 基本DCT变换 目前,基于DCT域的水印方法已经成为数字水印算法研究的热点,它的核心思想就是通过离散傅立叶变换对图像块进行处理后,再选择变换域中的一些系数值依据 ...
- 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
- 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】
一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...
- 【Matlab车牌识别】停车计费系统【含GUI源码 735期】
一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...
- 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...
- 【Matlab语音分析】语音信号分析【含GUI源码 1718期】
一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...
- 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...
最新文章
- python之路---进程
- 群体决策是如何误入歧途的
- 泛型Generics
- reduce 轻松将cookie转化为对象
- Python中的函数递归
- Java Minor发布计划再次进行了调整
- Java笔记13-兄弟连在线考试系统
- java中广告维护轮播图怎么做_Banner广告轮播图
- c++ char*初始化_[零食时间]C/C++ 字符串全家桶(字符串表示/定义、字符串输入输出、易错点等)上半桶...
- 轻松掌握Redux-Action使用方法
- 使用Git bash软件计算文件MD5值
- WinRAR的命令行模式用法介绍
- 韩顺平的php东方航空_韩顺平PHP从入门到精通视频教程
- oracle授权怎么收费,Oracle数据库如何授权收费(Database Licensing)
- 16进制,BCD码,ASCII转换
- Buffer(缓冲区)
- Linux who命令用法详解命令用法详解
- 判断Stack为空的方法之empty()与isEmpty()
- 计算机cpu和显卡的搭配要求,CPU和显卡怎么搭配好 显卡和CPU搭配有什么要求吗...
- 电销人员如何应对工作中的挫败感
热门文章
- 如何从完好的数据文件恢复oracle数据库
- SQL 存储过程封装代码生成器
- AJAX不能访问MVC后台程序的问题
- HTML 列表 olullidldtdd
- sp_executesq用法
- 国内物联网平台初探(二) ——阿里云物联网套件
- 190802每日一句
- Opencv结合socket进行视频传输(TCP协议)
- Atitit 数据join 的原理与java实现 Atitit join表连接的原理与实现 13、SQL Server 表连接的三种方式 (1) Merge Join (2) Nested
- Atitit 函数式常用子操作与组合 目录 1. 集合类的操作	1 1.1. Transform、map	1 1.2. paip.提升效率---filter map reduce 的java 函