DWT-SVD数字水印
因空间域的数字水印是通过直接在图像上改变像素的方式来隐藏水印信息的,所以对于大部分的攻击都没有较好的鲁棒性,在经过攻击后,无法提取出水印信息。因此,为了提高水印的鲁棒性,更倾向于使用频域的数字水印。
数字水印算法常用的频域变换包括DCT(离散余弦变换)、DWT(小波变换)、DFT(傅里叶变换),以及一些引申的其他变换,如FWT(快速小波变换),Contourlet变换等等,所用的变换不同,但算法的逻辑思路是相通的。
这里单独介绍一下基于DWT-SVD的数字水印算法。
DWT(小波变换)
小波变换的基本定义,实现原理这里不作过多介绍,感兴趣可以搜搜其他博主写过的介绍,这里简单介绍一下在数字水印算法中涉及到的内容。
1.图像经过小波分解,会分解得到四个频带:LL(低频部分),LH(高频部分的水平方向),HL(高频部分的垂直方向),HH(高频部分的对角线方向);
2.低频包含了图像的主要内容,与原始图像非常相似,而高频部分可以认为是图像冗余的噪声部分;
3.得到的四个频带的大小相同均为原图大小的四分之一。
利用函数dwt2()可以实现图像小波分解,具体实现如下:
I=imread('lena.png');
I=rgb2gray(I);
[LL,LH,HL,HH]=dwt2(I,'haar');
figure,
subplot(221);imshow(uint8(LL));title('低频');
subplot(222);imshow(LH);title('高频水平');
subplot(223);imshow(HL);title('高频垂直');
subplot(224);imshow(HH);title('高频对角线');
通常将水印嵌入到载体图像的低频分量上,能够提高水印的鲁棒性,后面的例子也是将水印嵌在低频分量。
SVD (奇异值分解)
SVD通常用来提取图像的特征值,实现降维、图像压缩。在数字水印技术中,也可以用来提高水印
1.图像经过SVD分解会得到三个矩阵,左奇异矩阵U,奇异值矩阵S和右奇异矩阵V;
2.奇异值矩阵为奇异值由大到小排列的对角矩阵;
通常将水印奇异值分解后的奇异值矩阵S加到载体图像上实现水印的嵌入
基于DWT-SVD数字水印
%% 水印嵌入
I=imread('lena.png'); %载入载体图像
I=im2double(I);
I=rgb2gray(I); %转为灰度图
[LL,LH,HL,HH]=dwt2(I,'haar'); %载体图像dwt变换
[U,S,V]=svd(LL); %低频分量SVD分解
W=imread('digital.png'); %载入水印图像
W=im2double(W);
W=rgb2gray(W); %转为灰度图
[Uw,Sw,Vw]=svd(W); %水印图SVD分解
af=0.2; %嵌入量
S2=S+af*Sw; %水印图的奇异值矩阵Sw以af嵌入量加到载体图像LL子代的奇异值矩阵S上
LL2=U*S2*V'; %嵌入后新的低频分量
IW=idwt2(LL2,LH,HL,HH,'haar'); %dwt逆变换得到含水印图
imwrite(IW,'watermarked.png');
figure,
subplot(221);imshow(I);title('载体图像');
subplot(222);imshow(W);title('水印图像');
subplot(223);imshow(IW);title('含水印图');
%% 水印提取
J=imread('watermarked.png'); %读取含水印图
J=im2double(J);
[LL3,LH3,HL3,HH3]=dwt2(J,'haar'); %含水印图dwt变换
[U3,S3,V3]=svd(LL3); %低频分量SVD分解
S4=(S3-S)/af; %得到提取水印图的奇异值矩阵
W2=Uw*S4*Vw'; %SVD逆变换得到提取水印图
subplot(224);imshow(W2);title('提取水印图');
这里的例子是最简单基础的DWT-SVD数字水印算法,还可以尝试对载体图像进行分块,水印图像进行加密或置乱等操作来增加水印算法的安全性。
验证水印算法的鲁棒性可以参考这篇数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)_LLLLnannan的博客-CSDN博客(附matlab代码)
以上就是基于DWT-SVD数字水印算法的简单介绍和代码实现。
DWT-SVD数字水印相关推荐
- 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...
- 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...
- matlab dwt实现原理,基于DWT的数字水印算法的MatLab实现.pdf
信息安全 信息技术与信息化 基于!"# 的数字水印算法的$%&'%( 实现 !)*)&%+ "%&,-.%-/)0* 1%2,3 40 !"# ( ...
- 【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 数字水印算法matlab源程序 matlab版数字水印算法 /DCT/DWT/LSB/HVS/W-SVD数字水印源码 数字水印的嵌入和提取 W-SVD数字水印实现
发以下多套系统源码: 1.matlab版数字水印算法 2.MATLAB数字水印 源代码+文档 3.数字水印技术matlab代码 4.数字水印 JPEG压缩 matlab代码 5.数字水印 添加噪声 m ...
- 数字水印算法分类以及区别(含有变换域python代码链接)
目录 看代码前需要知道的理论知识 使用场景分类 水印算法 运行 名词解释 历史 信息的两个丢失 其他 数字水印技术变换域算法.去github上下载了一个用python写的源码:https://code ...
- matlab论文图示例代码,MATLAB数字水印 源代码+毕业论文
[实例简介] 包含数字水印的matlab源代码和图像数字水印的方案毕业论文MATLAB(DCT+DWT) [实例截图] [核心代码] MATLAB数字水印 └── MATLAB数字水印 ├── 图像数 ...
- 信息隐藏——扩频水印
扩频水印 [实验目的]: 理解并实现扩频水印. [实验内容]: ■实现基于DWT的扩频水印嵌入和提取算法 扩频水印嵌入: 对载体图像C进行DWT变换并选择低频系数矩阵 对矩阵做SVD分解得到U,S,V ...
- 数字水印(DWT算法Python实现)
全部代码: """------------------------- Project: DWT数字水印嵌入.提取 Author: Tysay Environment: P ...
- 【语音隐藏】基于matlab小波变换DWT结合离散余弦变换DCT音频数字水印嵌入提取【含Matlab源码 2131期】
⛄一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值. ...
最新文章
- 3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授
- 如何快速在oracle内生成数据,[Oracle]快速生成大量模拟数据的方法
- 机器学习简介及学习思维导图
- (转)newInstance()和new()
- vim怎么跳转到函数定义处_Vim、gvim操作跳转光标区块和代码块的跳转
- ThinkPHP5最新URL访问:PATH_INFO和兼容模式
- 谷歌打开微信定位服务器地址,使用Chrome修改user agent模拟微信内置浏览器
- layui 表格序号累加 翻页序号也累加
- 部分相机和相机镜头的参数
- Ubuntu下安装glad
- 417分上那所计算机学院,2021年高考417分左右能上什么大学(100所)
- Unity3D 回合制 网上源码 目前还在研究构思
- printf的计算和输出顺序
- Ceph集群增加Mon时出错:admin_socket: exception getting command descriptions: [Errno 2] No such file or direc
- Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK:
- 在tensorflow2.0环境下使用RandLA-Net训练S3DIS数据集
- 垃圾回收只知道标记清除?一文帮你打通V8垃圾回收
- python pandas创建excel,Python Pandas操做Excel表格文件:建立新表格,追加数据
- 计算机控制实验比例环节,实验报告1典型环节及其阶跃响应分析
- 【数据挖掘】使用移动平均预测道琼斯、纳斯达克、标准普尔指数——Python中的基本数据操作和可视化