【图像隐写】基于matlab DWT数字水印嵌入+攻击+提取【含Matlab源码 1759期】
一、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期】相关推荐
- 【图像隐藏】基于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 ...
- 【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 ...
- 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
最新文章
- Mybatis3.3.x技术内幕(十三):Mybatis之RowBounds分页原理
- 有关内存释放的一些问题
- Nginx使用webbench进行压力测试
- 稀疏矩阵的压缩存储的两种策略
- 浏览器中java在什么位置,在基于浏览器的应用程序中保存JWT的位置以及如何使用它...
- 2015/Province_Java_A/3/九数分三组
- 读书笔记九:TCP/IP详解之广播和多播,IGMP协议
- android 百度移动搜索 url 参数,百度刷站内快排算法参数-百度搜索URL参数比较详解...
- C++ opengl 深度缓冲区
- 实现简单 codeigniter 缓存 (cache)
- 我的Android进阶之旅------gt;Android Studio 快捷键整理分享
- 常见的网站布局方式---左固定右自适应、左右固定中自适应等
- 随手练——打印折痕方向
- Linux下搭建FastDFS文件服务器(亲测成功)
- PHP中smart原则,制定目标时的SMART原则不包括什么
- 【批处理】快速批量修改特定文件夹的文件名
- ROS NOETIC 思岚激光雷达A2M8启动历程
- 服装企业二维码应用现状,如何建立二维码营销平台规则体系?
- usb Android gentoo,gentoo usb 鼠标
- 她的话指引了很多人的未来生活———亦舒