小波变换:基于matlab的数字图像水印嵌入及提取(灰度图)

1.水印嵌入

水印嵌入使用的算法

    a)分解级数:根据人类视觉系统的照明和纹理掩蔽特性,将水印嵌入到图像的纹理和边缘不易被察觉,但对于图像滤波和有损压缩容易丢失细节信息。小波变换低频部分集中了图像大部分能量,是视觉的重要部分,从鲁棒性出发,水印应当嵌入视觉最重要部分,但在这部分嵌入容易引起图像失真,我们这次进行二级haar小波分解并选取了HL2部分进行嵌入,效果尚可。

    b)小波基:不同小波基的水印鲁棒性不同。小波分正交和双正交两类,都适用于水印算法。研究表明,正交小波基的正则性、消失矩阶数、支撑长度以及小波图像能量在低频带的集中程度对水印鲁棒性影响极小。Haar小波的支撑长度最短,分解和重构计算复杂度低于其他小波,边界不需要延拓,在水印算法中体现出了优良的性能,因此选择了Haar小波基。

具体过程如下:
第一步:将原始图像和水印信息读入。
第二步:将原始彩色图像转换为灰度图,用 Haar 小波基进行二级小波分解。
第三步:将数字水印同样转换为灰度图,对其进行一级小波分解。
第四步:在HL2嵌入水印
第五步:重构并显示嵌入水印后的图像。

        

水印原始图像

运行结果:

2.水印提取

水印提取程序为嵌入的逆过程,运用了离散小波逆变换(IDWT)。

clear all;
I=imread('lena.jpg');
Ig=rgb2gray(I);
W=imread('watermask.png');
[cA1, cH1, cV1, cD1] = dwt2(Ig, 'haar');%依次为低频水平垂直对角
[cA2, cH2, cV2, cD2] = dwt2(cA1, 'haar');%二级小波分解
imgsize=size(cA2);
W=double(imresize(W,imgsize));
w_cH2=imsubtract(cH2,W);%对HL2嵌入水印
c1=[cA1, cH1;cV1, cD1]; %一级分解后图像
c2=[cA2, cH2; cV2, cD2];
c=[c2,cH1;cV1, cD1];    %二级分解后图像
c2_w=[cA2, w_cH2; cV2, cD2];
c_w=[c2_w,cH1;cV1, cD1];    %嵌入水印后二级分解图像
i_c2_w=idwt2(cA2, w_cH2, cV2, cD2,'haar');%重建图像
img_w=idwt2(i_c2_w, cH1,cV1, cD1,'haar');
%水印提取
[wcA1, wcH1, wcV1, wcD1] = dwt2(img_w, 'haar');%依次为低频水平垂直对角
[wcA2, wcH2, wcV2, wcD2] = dwt2(wcA1, 'haar');%二级小波分解
mask_w=imsubtract(cH2,wcH2);

subplot(1,2,1);imshow(I,[]);title('原图')
subplot(1,2,2);imshow(c1,[]);title('原图一级小波分解')
figure
subplot(1,3,1);imshow(w_cH2,[]);title('在HL2加入水印后-HL2')
subplot(1,3,2);imshow(c_w,[]);title('在HL2加入水印后-分解图')
subplot(1,3,3);imshow(img_w,[]);title('加入水印后重建图像')
figure
imshow(mask_w,[]);title('提取出的数字水印');

多有不足,恳请指教。

参考:https://blog.csdn.net/Threexiu/article/details/119619765https://blog.csdn.net/weixin_39707121/article/details/7940707

  • 10
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字水印是一种用于保护数字内容的技术,通过在数字信号中嵌入特定的标识符或信息,可以在需要时进行提取和验证。Matlab是一种功能强大的计算机软件,它具有丰富的图像处理和数字信号处理工具箱,可以用于数字水印嵌入提取。 在Matlab中,数字水印嵌入一般由以下步骤完成: 1. 选择一个合适的嵌入算法水印密钥。 2. 读取要嵌入水印的原始信号,例如图像或音频。 3. 对原始信号进行一些预处理,例如图像可以进行离散余弦变换(DCT)。 4. 将水印嵌入到预处理后的信号中,可以使用频域或空域的方法,例如将水印信息直接嵌入到图像的像素中。 5. 保存嵌入水印后的信号。 数字水印提取同样需要以下步骤: 1. 选择一个与嵌入时使用的算法和密钥相对应的提取算法和密钥。 2. 读取已嵌入水印的信号。 3. 对嵌入信号进行逆操作,例如对图像进行逆DCT变换。 4. 提取水印信息,可以通过比对嵌入时的原始水印提取出的水印信息来验证水印的完整性和正确性。 在Matlab中,可以根据具体的需求选择合适的算法和工具箱来完成数字水印嵌入提取。例如,可以使用Image Processing Toolbox来对图像进行处理,使用Signal Processing Toolbox来对音频进行处理。在具体实现过程中,可能会涉及到图像预处理、频域变换、信息隐藏等技术和方法。 总之,Matlab提供了丰富的工具和函数,可以方便地进行数字水印嵌入提取的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值