function loca = wm_type_1(loca,w,step,g)
%此函数用于在HL子带嵌入水印
%输入: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 a12-a22<=g   %如果满足条件,a22增,a12减
                    a12 = a12 - s;
                    a22 = a22 + s;
                else
                    break;     %不满足条件,跳出此循环
                end
            end
            %-----如果a11和a21不满足条件,则也要调整------------
            if a11-a12<=g
                a11 = a11 + step;
                a12 = a12 - step;
            end
            if a21-a22<=g
                a21 = a21 + step;
                a22 = a22 - step;
            end
            if a12-a11<=g
                a12 = a12 + step;
                a11 = a11 - step;
            end
            if a22-a21<=g
                a22 = a22 + step;
                a21 = a21 - step;
            end
            %------------------------------------------------------
        end
        if 1 == w(index)            
            for s = step:step:100*step
                if a12-a22>=-g   %如果满足条件,a22增,a12减
                    a12 = a12 + s;
                    a22 = a22 - s;
                else
                    break;     %不满足条件,跳出此循环
                end
            end
            %-----如果a11和a21不满足条件,则也要调整------------
            if a11-a12<=g
                a11 = a11 + step;
                a12 = a12 - step;
            end
            if a21-a22<=g
                a21 = a21 + step;
                a22 = a22 - step;
            end
            if a12-a11<=g
                a12 = a12 + step;
                a11 = a11 - step;
            end
            if a22-a21<=g
                a22 = a22 + step;
                a21 = a21 - step;
            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

此函数实现了一种简单的水印嵌入算法,通过修改 2x2 块内的像素值来嵌入水印信息。具体来说,函数会根据水印信息选择对 2x2 块内的像素进行调整,以达到嵌入水印的目的。

参数说明:

  • loca: 要嵌入水印的子带
  • w: 水印信息,是一个 0 或 1 的二进制向量
  • step: 调整像素值的步长
  • g: 阈值,用于判断是否需要进行调整

函数流程:

  1. 从子带中取出 2x2 的块
  2. 根据水印信息判断是否需要调整像素值
  3. 如果需要调整,则根据阈值和步长调整像素值
  4. 将调整后的像素值写回子带

此函数提供了一个基本的数字水印嵌入算法示例,可以作为进一步研究数字水印技术的起点。


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

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