基于DWT的数字水印嵌入函数(HL子带)

本代码实现了一个用于在离散小波变换(DWT)后的HL子带中嵌入水印的Matlab函数 wm_type_0

function loca = wm_type_0(loca,w,step,g)
% 此函数用于在HL子带嵌入水印
% 输入:
%   loca: 为要嵌入水印的子带
%   w: 水印信息
%   step: 调整步长
%   g: 水印嵌入强度
% 输出:
%   loca: 为嵌入水印后的子带

[m2,n2] = size(loca);
index = 1;
% 取出2*2的块
for k = 1:2:m2-1
    for kk = 1:2:n2-1
        tem = loca(k:k+1,kk:kk+1);
        a11 = tem(1,1);
        a12 = tem(1,2);
        a21 = tem(2,1);
        a22 = tem(2,2);
        if 0 == w(index)            
            for s = step:step:100*step
                if a11-a21<=g   % 如果满足条件,a11增,a21减
                    a11 = a11 + s;
                    a21 = a21 - s;
                else
                    break;     % 不满足条件,跳出此循环
                end
            end
            % -----如果a12和a22不满足条件,则也要调整------------
            
            
        end
        if 1 == w(index)            
            for s = step:step:100*step
                if a11-a21>=-g   % 如果满足条件,a11减,a21增
                    a11 = a11 - s;
                    a21 = a21 + s;
                else
                    break;     % 不满足条件,跳出此循环
                end
            end
             % -----如果a12和a22不满足条件,则也要调整------------
                         
             
             
             
        end
        index = index + 1;        
        tem(1,1) = a11;
        tem(1,2) = a12;
        tem(2,1) = a21;
        tem(2,2) = a22;
        loca(k:k+1,kk:kk+1) = tem;        
    end    
end
end

函数说明:

  • 该函数通过修改2x2系数块中a11和a21的差值来嵌入水印信息。
  • 当水印位为0时,尝试增加a11,减少a21,使得两者差值满足条件(a11-a21<=g)。
  • 当水印位为1时,尝试减少a11,增加a21,使得两者差值满足条件(a11-a21>=-g)。
  • 参数 step 控制调整的步长, g 控制水印嵌入的强度。

待改进:

  • 代码中注释 '-----如果a12和a22不满足条件,则也要调整------------' 部分需要完善,以实现对a12和a22的调整逻辑。
  • 可以考虑添加对输入参数的校验,例如检查水印信息 w 的长度是否与子带大小匹配。
  • 可以添加对水印嵌入效果的评估指标,例如峰值信噪比(PSNR)。

注意: 本代码仅供参考,实际应用中需要根据具体需求进行修改和完善。

基于DWT的数字水印嵌入函数(HL子带)

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

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