基于LH/HL子带的脆弱水印提取算法 - Matlab实现
基于LH/HL子带的脆弱水印提取算法 - Matlab实现
本文介绍两种基于LH/HL子带的脆弱水印提取算法,并提供Matlab代码示例。
算法原理
这两种算法都利用了图像LH/HL子带中的2x2像素块来提取嵌入的二进制水印信息。通过比较像素块中特定位置像素值的和,判断水印比特是0还是1。
算法一:LH子带提取水印
- 将LH子带图像划分为2x2像素块。
- 对于每个块,比较 (a11 + a21) 和 (a12 + a22) 的大小关系:
- 如果 a11 + a21 >= a12 + a22,则水印比特为0。
- 否则,水印比特为1。
算法二:HL子带提取水印
- 将HL子带图像划分为2x2像素块。
- 对于每个块,比较 (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 著作权归作者所有。请勿转载和采集!