【图像隐写】基于matlab DWT数字水印嵌入+攻击+提取【含Matlab源码 1759期】

举报
海神之光 发表于 2022/05/29 00:35:51 2022/05/29
【摘要】 一、DWT数字水印简介 1 引言 数字水印技术发展迅速,出现了各种水印算法,最低有效位(Least Significant Bit,LSB)数字水印技术是最早的空域水印添加算法,它原理简单且易实现,但鲁...

一、DWT数字水印简介

1 引言
数字水印技术发展迅速,出现了各种水印算法,最低有效位(Least Significant Bit,LSB)数字水印技术是最早的空域水印添加算法,它原理简单且易实现,但鲁棒性差。变换域水印算法大大提高了水印的鲁棒性,常见的有基于离散余弦变换(Dual Clutch Transmission,DCT)和离散小波变换(Discrete Wavelet Transform,DWT)水印算法。黄西娟、陈善学等人对于数字水印算法的研究使数字水印算法不断完善优化。综合考虑DWT和SVD的优点,本文将DWT和SVD结合起来对原载体图像进行水印的嵌入和提取。

与传统的DCT变换相比,小波变换是一种时域与频域相结合的变分辨率变换方法。时间窗口的大小随频率自动调整,更符合人的视觉特征并且小波分析在时域和频域都有很好的局部性,为传统的时域分析和频域分析提供了很好地结合方法。

目前,小波分析已广泛应用于数字图像和视频压缩编码、纹理特征识别[4]、信息隐藏[5]等领域,出现了许多典型的基于离散小波变换的数字水印算法[6]。

2 小波变换
在数字图像处理中,需要将连续的小波及其小波变换离散化。实际上,离散小波变换是将连续小波变换的尺度和位移按照2的幂次离散化而得到的,故又称二进制小波变换。

在小波分析中经常用到近似与细节,近似表示信号的高尺度,即低频信息;细节表示信号的高尺度,即高频信息。因此,原始信号通过两个相互的滤波器产生两个信号,其中高频细节系数为LH,HL,HH 3个频率的子带。通过连续分解过程,将近似信号进行连续分解,可以将信号分解成多个低分辨率的成量。理论上,这种分解可以无限地进行下去。因此,在实际应用中,一般根据信号的特征或适当的准则来选择合适的分解层数。二级离散小波分解的示意如图1所示。

3 奇异值分解
有一个m×n的实数矩阵A,想要把它分解成如下的形式:
在这里插入图片描述
其中,U和V均为单位正交阵,即有UUT=I和VVT=I,U称为左奇异矩阵,V称为右奇异矩阵,∑仅在主对角线上有值,称为奇异值,其他元素均为0。上面矩阵的维度分别为U∈Rm×n,∑∈Rm×n,V∈Rn×n。
在这里插入图片描述
图1 二级离散小波分解示意

4 水印嵌入
水印的嵌入过程具体如下,具体如图2所示。
(1)将原图像A和水印W分别进行灰度处理。
(2)对原图像灰度图进行二级离散小波变换,记为LL2。
(3)对LL2进行矩阵奇异值分解,得到Ua,Va,Sa;对水印也进行矩阵奇异值分解,得到Uw,Vw,Sw。
在这里插入图片描述
(4)加权嵌入算法公式为:Sw’=Sa+αSw,其中α表示水印嵌入强度(0<α<1)。
(5)将Sw’与步骤(3)得到Ua,Va进行SVD逆变换。
在这里插入图片描述
(6)对上一步得到的LL2’进行逆小波变换。
在这里插入图片描述
图2 水印嵌入流程
4 水印提取
水印的提取过程如下:(1)利用DWT对含水印图像A1进行二级小波变换,取出低频小波系数,记为LL2″。(2)对LL2″进行奇异值分解。[Ua1,Sa1,Va1]=SVD(LL2″)。(3)利用公式计算出Sw’:Sw’=(Sa1-Sa)/α。(4)进行SVD逆变换,即:W’=Uw×Sw’×Vw T,如图3所示。
在这里插入图片描述
图3 水印提取流程

二、部分源代码

[fname,pname] = uigetfile('*.jpg','请选择图片:') 
% ori_pic = imread('ori_pic.jpg','jpg');
ori_pic = imread([pname,fname],'jpg');
subplot(2,2,1);
imshow(ori_pic);
title('原图像');


[fname,pname] = uigetfile('*.jpg','请选择水印图片:')
watermark = imread([pname,fname],'jpg');
subplot(2,2,2);
imshow(watermark); 
title('水印图像');


% 对原始图像进行处理:double()处理,进行小波分解 haar小波基
ori_pic_trans = double(ori_pic); 
watermark_trans = double(watermark);
[Cwr,Swr] = wavedec2(watermark_trans,1,'haar');
[Cr,Sr] = wavedec2(ori_pic_trans,2,'haar');

a = 0.06;

for k = 0:1:size(Cr,2)/size(Cwr,2)-1
Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4 : size(Cr,2)/4+(k+1)*size(Cwr,2)/4) = Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4 : size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2);
Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4 : size(Cr,2)/2+(k+1)*size(Cwr,2)/4) = Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4 : size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4);
Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4 : 3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4) = Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4 : 3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2));
end
Cr(1:size(Cwr,2)/4) = Cr(1:size(Cwr,2)/4) + a*Cwr(1:size(Cwr,2)/4);

% 利用小波基重构图像
ori_pic_trans = waverec2(Cr,Sr,'haar');
output = uint8(round(ori_pic_trans));
subplot(2,2,3);
imshow(output,[]);
title('嵌入水印后的图像');

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]王菽裕,刘璐,宋俊芳,张春玉.一种基于DWT的数字水印算法[J].无线互联科技. 2020,17(13)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/123329707

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。