一、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('嵌入水印后的图像');

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

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

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

  1. 【图像隐藏】基于DCT和FFT数字水印嵌入+攻击+提取含Matlab源码

    1 简介 文章对DCT(离散余弦变换)和FFT域图像数字水印算法进行了研究,并用matlab工具进行实验,结果表明该算法使水印的嵌入达到了较好的鲁棒性和不可见性.​ 2 部分代码 function [ ...

  2. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  3. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  4. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  5. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  6. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  7. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  8. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  9. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  10. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

最新文章

  1. Mybatis3.3.x技术内幕(十三):Mybatis之RowBounds分页原理
  2. 有关内存释放的一些问题
  3. Nginx使用webbench进行压力测试
  4. 稀疏矩阵的压缩存储的两种策略
  5. 浏览器中java在什么位置,在基于浏览器的应用程序中保存JWT的位置以及如何使用它...
  6. 2015/Province_Java_A/3/九数分三组
  7. 读书笔记九:TCP/IP详解之广播和多播,IGMP协议
  8. android 百度移动搜索 url 参数,百度刷站内快排算法参数-百度搜索URL参数比较详解...
  9. C++ opengl 深度缓冲区
  10. 实现简单 codeigniter 缓存 (cache)
  11. 我的Android进阶之旅------gt;Android Studio 快捷键整理分享
  12. 常见的网站布局方式---左固定右自适应、左右固定中自适应等
  13. 随手练——打印折痕方向
  14. Linux下搭建FastDFS文件服务器(亲测成功)
  15. PHP中smart原则,制定目标时的SMART原则不包括什么
  16. 【批处理】快速批量修改特定文件夹的文件名
  17. ROS NOETIC 思岚激光雷达A2M8启动历程
  18. 服装企业二维码应用现状,如何建立二维码营销平台规则体系?
  19. usb Android gentoo,gentoo usb 鼠标
  20. 她的话指引了很多人的未来生活———亦舒

热门文章

  1. SQL Server触发器更新原理
  2. DataGrid 绑定定制的列
  3. springboot redisTemplate 外部反序列化
  4. 前端实现文件下载的功能
  5. Eclipse下配置Tomcat内存
  6. 移动端 短信发送,一键拨号功能
  7. 函数指针的应用学习Demo
  8. pdf文档有时打开乱码的解决方案
  9. Atitit  深入理解命名空间namespace  java c# php js
  10. Atitit 控制中心快速启动面板quick launcher