基于小波变换的数字水印嵌入 (Matlab实现)

本文介绍如何使用Matlab实现基于小波变换的数字水印嵌入技术。代码包含两个函数:wm为主函数,wm_type_1为子函数。

wm 函数

function J = wm(I,w,g)
% 此函数用于嵌入水印
% 输入:I为原始图像;w为水印信息;g为水印嵌入的阈值
% 输出:J为嵌入水印的图像
%%
%参数设置
step = 0.5; %小波系数增长步长
%%
[mm,nn] = size(I);
%一层小波分解
[LL,LH,HL,HH] = dwt2(I,'haar');
%=======计算avr_LH======
[m0,n0] = size(LH); avr_LH = sum(abs(LH(:))) / (m0 * n0);

%=======计算avr_HL======
[m1,n1] = size(HL); avr_HL = sum(abs(HL(:))) / (m1 * n1);

%判断嵌入的子带
if avr_LH <= avr_HL
    num = 0; loca = LH;
else
    num = 1; loca = HL;
end

%%
%嵌入水印
if num == 0
    loca = wm_type_0(loca,w,step,g);  %LH是横向,写出嵌入子函数
else
    loca = wm_type_1(loca,w,step,g);  %HL是纵向,写出嵌入子函数
end
%%
if num == 0
    LH = loca; 
else
    HL = loca; 
end
J = idwt2(LL,LH,HL,HH,'haar',[mm,nn]);   %小波逆变换,还回原始图像
end

wm_type_1 函数

function [loca_new] = wm_type_1(loca,w,step,g)
% 此函数为嵌入水印的子函数,用于HL子带
% 输入:loca为HL子带;w为水印信息;step为小波系数增长步长;g为水印嵌入的阈值
% 输出:loca_new为嵌入水印后的HL子带

%参数设置
[m,n] = size(loca);
loca_new = loca;
k = 1; %水印信息的索引

%遍历HL子带的每个小波系数
for i = 1:m
    for j = 1:n
        if abs(loca(i,j)) > g %判断小波系数是否大于阈值
            if w(k) == 1 %如果水印信息为1
                if loca(i,j) > 0 %如果小波系数为正数
                    loca_new(i,j) = loca(i,j) + step; %增加小波系数
                else %如果小波系数为负数
                    loca_new(i,j) = loca(i,j) - step; %减少小波系数
                end
            else %如果水印信息为0
                if loca(i,j) > 0 %如果小波系数为正数
                    loca_new(i,j) = loca(i,j) - step; %减少小波系数
                else %如果小波系数为负数
                    loca_new(i,j) = loca(i,j) + step; %增加小波系数
                end
            end
            k = k + 1; %水印信息的索引加1
            if k > length(w) %如果水印信息已经全部嵌入
                return; %结束函数
            end
        end
    end
end

end

代码说明:

  1. wm 函数:
    • 该函数首先对输入图像进行 Haar 小波分解,得到LL, LH, HL, HH 四个子带。
    • 然后计算LH和HL子带的平均能量,选择能量较大的子带嵌入水印信息。
    • 调用子函数 wm_type_0 或 wm_type_1 将水印嵌入选定的子带。
    • 最后进行小波逆变换,得到嵌入水印后的图像。
  2. wm_type_1 函数:
    • 该函数遍历选择的子带,找到大于阈值的小波系数。
    • 根据水印信息的比特值(0或1)修改小波系数的大小,实现水印的嵌入。

总结

本文提供的代码清晰地展示了如何使用 Matlab 实现基于小波变换的数字水印嵌入技术。通过修改代码参数,可以方便地调整水印嵌入的强度和位置,以达到不同的应用需求。


原文地址: https://www.cveoy.top/t/topic/jpxO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录