引言

之前写过一篇介绍空间域LSB的数字水印算法,有需要的朋友可以看看
数字水印入门篇——空间域LSB的数字水印(附matlab代码)

因空间域的数字水印是通过直接在图像上改变像素的方式来隐藏水印信息的,所以对于大部分的攻击都没有较好的鲁棒性,在经过攻击后,无法提取出水印信息。因此,为了提高水印的鲁棒性,更倾向于使用频域的数字水印。
数字水印算法常用的频域变换包括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代码)

以上就是基于DWT-SVD数字水印算法的简单介绍和代码实现。

如果觉得本篇文章有帮到您,希望可以点赞支持,本人还在学习当中,若有错误和问题,欢迎大家给我留言呀~

数字水印进阶篇——基于DWT-SVD的数字水印(附matlab代码)相关推荐

  1. 扩展卡尔曼滤波(EKF)估计SOC代码2详解,基于二阶RC模型(附MATLAB代码)

    上次分享了一个扩展卡尔曼滤波估计SOC的代码,得到了很多小伙伴的支持,今天再分享一个很好用的扩展卡尔曼滤波估计SOC的程序.使用MATLAB语言完成程序的编写. 有关EKF的推导及原理请看我写的另一个 ...

  2. 【图像去噪】基于三边滤波器实现图像去噪附matlab代码

    1 简介 近年来,随着计算机视觉领域的发展,雾天图像的清晰化问题逐渐成为该领域的研究热点.目前对于图像去雾技术的研究大体上可以分为两类[1]:基于大气散射物理模型的图像去雾方法和基于图像增强的去雾方法 ...

  3. 【背包问题】基于禁忌搜索算法求解背包问题附Matlab代码

    1 内容介绍 设计了一种基于禁忌搜索的遗传算法,利用遗传算法提供的并行搜索主框架,结合禁忌算法的个体串行搜索方式,能扩大搜索空间,快速实现全局优化.把基于禁忌搜索的遗传算法与启发式方法相结合用来求解背 ...

  4. 【图像重建】基于遗传算法实现二值图像重建附matlab代码

    1 内容介绍 图像质量的优劣对人类视觉和各种计算机视觉系统都十分重要,因此图像复原一直是数字图像处理的重要研究内容.作为图像复原的一个分支,超分辨率图像重建问题得到人们越来越多的关注.在视频监控.卫星 ...

  5. 【图像检测】基于计算机视觉实现椭圆检测附matlab代码

    1 内容介绍 Hough变换在图像处理中占有重要地位,是一种检测曲线的有效方法.但使用传统的Hough变换来检测椭圆具有存储空间大计算时间长的缺点.为此提出了一种新的基于Hough变换的椭圆轮廓检测方 ...

  6. 【图像检测】基于K-L实现人脸检测附matlab代码

    1 内容介绍 人脸识别作为一种重要的个人身份鉴别方法,可广泛地应用于证件核对.公安追逃.信用卡验证.自动取款机(ATM)等方面..与利用指纹.手掌.视网膜.虹膜等其他人体生物特征进行人身鉴别的方法相比 ...

  7. 【条形码识别】基于形态学实现条形码识别附matlab代码

    1 简介 在信息时代的今天,随着计算机技术的发展,条形码作为一种简单.方便.廉价.高速的信息保存和传输技术,在世界各地应用广泛,是商品进入国际市场的通行证. 本论文的研究基于一种全新的购物理念,即无需 ...

  8. 【语音识别】基于BP神经网络实现语音识别附matlab代码

    1 简介 2 部分代码 %% 该代码为基于BP网络的语言识别​%% 清空环境变量clcclear​%% 训练数据预测数据提取及归一化​%下载四类语音信号load data1 c1load data2 ...

  9. 【疲劳检测】基于形态学实现疲劳检测附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

最新文章

  1. 所有mysql变量都以 开头对不对_PHP复习题(选择题)
  2. 超牛EXCEL操作技巧,用的好,会涨工资哦
  3. 聊聊Spring事务失效的12种场景,太坑人了
  4. append 降低数组位数_腿粗有理!研究发现腿部脂肪多,能大幅降低患高血压的风险!...
  5. Java 多线程断点下载文件_详解
  6. Android笔记:Eclipse中SVN插件的两种安装方式
  7. 怎样使 Python 输出时不换行?
  8. 【深度学习】基于 Alluxio 数据缓存的性能优化
  9. 用CSS美化你的滚动条
  10. mac下配置android sdk环境 安装eclipse
  11. phpstorm 如何设置函数的注释内容
  12. oem是什么生产方式
  13. 手把手,快速搭建 Cocos2d-HTML5 开发调试环境
  14. MSSQL备份及数据迁移
  15. Momentum, RMSprob and Adam
  16. 关于激活navicat11失败
  17. 开源ext2read代码走读之-扩展分区与逻辑分区说明及如何读取扩展分区的分区表(EBR)
  18. python图片背景透明
  19. 医学统计学笔记之设计
  20. 解决warning: #1296-D: extended constant initialiser used告警

热门文章

  1. BatchNormalization 介绍
  2. 一些企业个人网银的U盾或是usbkey在web(IE)网页中无法使用的解决方法
  3. 上海计算机学业水平考试,上海信息科技学业水平考试复习资料整理——计算机系统.pdf...
  4. 【毕业设计】基于单片机的自动浇花灌溉系统设计 -嵌入式 物联网 stm32 c51
  5. PPT进阶篇---如何让你的声音好听
  6. Python操作Excel(二)
  7. gitlab快速入门
  8. python matplotlib绘制等高线、等值线图
  9. c#生成PPT总结(Microsoft.Office.Interop)
  10. JVM-从熟悉到精通