Matlab图像水印提取算法:类型1解析与代码实现
Matlab图像水印提取算法:类型1解析与代码实现
本文介绍一种基于Matlab的图像水印提取算法,称为'类型1'。该算法通过分析图像中2*2像素块的灰度值关系来提取嵌入的二进制水印信息。
算法原理
该算法的核心思想是比较2*2像素块中对角线元素之和。
- 将待提取水印的图像划分为2*2像素块。
- 对于每个块,计算其对角线元素之和:
a11 + a21a12 + a22
- 比较两个和的大小:
- 若
a11 + a21 >= a12 + a22,则该块对应的嵌入水印位为'0'。 - 若
a11 + a21 < a12 + a22,则该块对应的嵌入水印位为'1'。
- 若
代码实现
以下是使用Matlab实现'类型1'水印提取算法的代码:
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: 输出参数,表示提取出的水印序列。mm,nn: 图像矩阵的行数和列数。index: 用于遍历水印序列的索引。k,kk: 用于遍历2*2像素块的循环变量。tem: 存储当前2*2像素块的矩阵。a11,a12,a21,a22: 2*2像素块的四个元素。
总结
本文介绍了一种简单的基于2*2像素块灰度值关系的图像水印提取算法,并提供了详细的Matlab代码实现。该算法易于理解和实现,但鲁棒性有限,容易受到攻击。您可以根据实际需求选择合适的图像水印算法。
原文地址: https://www.cveoy.top/t/topic/jpOn 著作权归作者所有。请勿转载和采集!