基于2x2块比较的数字水印提取算法(MATLAB实现)
基于2x2块比较的数字水印提取算法
本代码实现了一种简单的数字水印提取算法。该算法将载体图像划分为2x2的像素块,并根据块内像素值的大小关系提取嵌入的水印信息。
算法原理
- 将输入的灰度图像划分为2x2的像素块。
- 对于每个块,记左上角、右上角、左下角、右下角的像素值分别为a11、a12、a21、a22。
- 比较a11+a21与a12+a22的大小:
- 如果 a11 + a21 >= a12 + a22,则提取的水印位为0。
- 否则,提取的水印位为1。
- 将所有提取的水印位组合起来,得到最终的水印信息。
MATLAB代码实现
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
参数说明
loca: 输入的灰度图像,包含嵌入的水印信息。rw: 提取的二进制水印序列。
使用示例
% 读取包含水印的图像
watermarked_image = imread('watermarked_image.png');
% 提取水印
extracted_watermark = wm_extr_type1(watermarked_image);
% 显示提取的水印
disp(extracted_watermark);
注意
该代码仅为示例,实际应用中需要根据具体的水印嵌入算法进行调整。
原文地址: https://www.cveoy.top/t/topic/jpQV 著作权归作者所有。请勿转载和采集!