clear all;
file_name='bb.bmp';
cover_object=imread(file_name);
% 读入水印图像
file_name='key.bmp';
message=imread(file_name);
message1=message;
message=double(message); %%转换为double数
message=round(message./256);
message=uint8(message); %%转换为uint8数
% 原图的行数与列数
Mc=size(cover_object,1); %原图的行数
Nc=size(cover_object,2); %原图的列数
% 水印的行数与列数
Mm=size(message,1); %水印的行数
Nm=size(message,2); %水印的列数
% 将水印扩展为原图像大小,并写入watermark
for ii = 1:Mc
for jj = 1:Nc
watermark(ii,jj)=message(mod(ii,Mm)+1,mod(jj,Nm)+1);
end
end
% 将原图的最低有效位值换为水印的值
watermarked_image=cover_object;
figure(2)
for kk=1:8
for ii = 1:Mc
for jj = 1:Nc
watermarked_image(ii,jj)=bitset(watermarked_image(ii,jj),kk,watermark(ii,jj));
end
end
% 将嵌入水印图像写入lsb_watermarked.bmp
%imwrite(watermarked_image,'lsb_watermarked.bmp','bmp');
imwrite(watermarked_image,'lsb.bmp','bmp');
%figure(1)
subplot(2,4,kk)
imshow(watermarked_image,[])
title(kk)
%subplot(2,4,2*kk-1)
%imshow(watermark,[])
%title('watermark')
%--------------------------------------------------------
%--------------------------------------------------------
%提取水印
% file_name='lsb_watermarked.bmp';
% watermarked_image=imread(file_name);
% Mw=size(watermarked_image,1);
% Nw=size(watermarked_image,2);
%read original watermark
%file_name='key.bmp';
%orig_watermark=imread(file_name);
% Mm=size(orig_watermark,1);
% Nm=size(orig_watermark,2);
%用嵌入水印图像的最低有效位重建水印
% for ii=1:Mw
% for jj=1:Nw
% watermark(ii,jj)=bitget(watermarked_image(ii,jj),kk);
% end
%end
%将提取水印变为原始水印大小
%watermark=256*double(watermark);
%for ii=1:Mm-1
% for jj=1:Nm-1
% watermark1(ii+1,jj+1)=watermark(ii,jj);
%end
%end
%watermark1(1,1)=watermark(Mm,Nm);
%display watermark
%subplot(2,4,kk)
% imshow(watermark1,[])
%imshow(watermark,[])
%title(kk)
end