基于2x2块比较的数字水印提取算法

本代码实现了一种简单的数字水印提取算法。该算法将载体图像划分为2x2的像素块,并根据块内像素值的大小关系提取嵌入的水印信息。

算法原理

  1. 将输入的灰度图像划分为2x2的像素块。
  2. 对于每个块,记左上角、右上角、左下角、右下角的像素值分别为a11、a12、a21、a22。
  3. 比较a11+a21与a12+a22的大小:
    • 如果 a11 + a21 >= a12 + a22,则提取的水印位为0。
    • 否则,提取的水印位为1。
  4. 将所有提取的水印位组合起来,得到最终的水印信息。

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 著作权归作者所有。请勿转载和采集!

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