基于DWT的数字水印嵌入算法 - LH子带水印嵌入

本代码实现了一种在图像LH子带中嵌入水印的算法。该算法利用离散小波变换 (DWT) 将图像分解成不同的频率子带,并在LH子带中嵌入水印信息。

函数代码:

function loca = wm_type_0(loca,w,step,g)

% 输入:loca为要嵌入水印的子带
% 输出: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不满足条件,则也要调整------------
            if a12-a22>g
                for s = step:step:100*step
                    if a12-a22>=g   % 如果满足条件,a12减,a22增
                        a12 = a12 - s;
                        a22 = a22 + s;
                    else
                        break;     % 不满足条件,跳出此循环
                    end
                end
            end
            
        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不满足条件,则也要调整------------
            if a12-a22<-g
                for s = step:step:100*step
                    if a12-a22<=-g   % 如果满足条件,a12增,a22减
                        a12 = a12 + s;
                        a22 = a22 - s;
                    else
                        break;     % 不满足条件,跳出此循环
                    end
                end
            end
        
        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

算法说明:

  1. 将输入的LH子带图像分割成2x2的像素块。
  2. 遍历每个像素块,根据水印信息(0或1)调整像素值。
  3. 调整像素值时,通过控制 a11-a21 和 a12-a22 的差值来嵌入水印信息。
  4. 参数 step 控制每次调整像素值的步长,g 控制差值的阈值。

注意:

在LH子带中,需要额外调整a12和a22的值,因为这两个值的差值也需要满足一定的条件。

基于DWT的数字水印嵌入算法 - LH子带水印嵌入

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

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