基于LH/HL子带的脆弱水印提取算法 - Matlab实现

本文介绍两种基于LH/HL子带的脆弱水印提取算法,并提供Matlab代码示例。

算法原理

这两种算法都利用了图像LH/HL子带中的2x2像素块来提取嵌入的二进制水印信息。通过比较像素块中特定位置像素值的和,判断水印比特是0还是1。

算法一:LH子带提取水印

  1. 将LH子带图像划分为2x2像素块。
  2. 对于每个块,比较 (a11 + a21) 和 (a12 + a22) 的大小关系:
    • 如果 a11 + a21 >= a12 + a22,则水印比特为0。
    • 否则,水印比特为1。

算法二:HL子带提取水印

  1. 将HL子带图像划分为2x2像素块。
  2. 对于每个块,比较 (a12 + a22) 和 (a11 + a21) 的大小关系:
    • 如果 a12 + a22 >= a11 + a21,则水印比特为0。
    • 否则,水印比特为1。

Matlab代码

算法一:LH子带提取水印

function rw = wm_extr_type1(loca)
[mm,nn] = size(loca);
index = 1;
%取出2*2的块
for k = 1:2:mm-1
    for kk = 1:2:nn-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);
        %-------a11+a21 >= a12+a22则水印为0,否则为1-------
        if a11 + a21 >= a12 + a22
            rw(index) = 0;
        else
            rw(index) = 1;
        end
        index = index + 1;
    end    
end
end

算法二:HL子带提取水印

function rw = wm_extr_type2(loca)
[mm,nn] = size(loca);
index = 1;
%取出2*2的块
for k = 1:2:mm-1
    for kk = 1:2:nn-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);
        %-------a12+a22 >= a11+a21则水印为0,否则为1-------
        if a12 + a22 >= a11 + a21
            rw(index) = 0;
        else
            rw(index) = 1;
        end
        index = index + 1;
    end    
end
end

总结

本文介绍了两种简单的基于LH/HL子带的脆弱水印提取算法,并提供了Matlab代码实现。这些算法可以作为学习数字水印技术的入门示例。


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

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