wmk_2d.m

来自「在二维 RGB 图像中嵌入水印」· M 代码 · 共 57 行

M
57
字号
%--------------------------------------------------------------------------
% filename: wmk_2d
% function: 在二维 RGB 图像中嵌入 lenna 图像
% data    : 2005.8.10
%--------------------------------------------------------------------------

load lena_dither;         % 输入水印数据,变量为A
subplot(2,2,1),imshow(A,[]); title('水印序列')% 显示之前要化为 0~1 之间,嵌入水印以后图像
I = imread('e:\photo\wsyj.jpg');
subplot(2,2,2),imshow(I,[]); title('真彩图像')% 显示之前要化为 0~1 之间,嵌入水印以后图像
I=imresize(I,[512 512]);    % 改变图像的大小
I = rgb2gray(I);

I=double(I);            % 转换数据格式


subplot(2,2,3),imshow(I,[]); title('灰度图像')% 显示之前要化为 0~1 之间,嵌入水印以后图像

%**************************************************************************
% 改变 I 中的像素值,加入水印
%**************************************************************************
[m n]=size(I);
for i=1:m*n
    a=bitget(I(i),3);
    b=bitget(I(i),5);
    
    if bitxor(a,b)~=A(i)
    I(i)=bitset(I(i),3,bitcmp(a,1));
    end
end

subplot(2,2,4),imshow(I,[]); title('加入水印后的图像')% 显示之前要化为 0~1 之间,嵌入水印以后图像

%**************************************************************************
% 根据I(i)直接提取水印
%**************************************************************************
c=zeros(m,n);
for k=1:m*n
    a=bitget(I(k),3);
    b=bitget(I(k),5);
    c(k)=bitxor(a,b);
end

%c=reshape(c,m,n);


figure,imshow(c,[]);                      % 显示之前要化为 0~1 之间
return








⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?