%文件名:lsbhide.m
%函数功能:本函数将完成顺序嵌入水印的LSB算法,载体选用灰度图像,水印选用二值图像(行数列数相同)
%格式:[ste_yuan,len_total]=lsbhide(input,watermark)
%参数说明:
%input:载体图像
%watermark:水印
%ste_yuan:嵌入水印的图像矩阵
%len_total:水印长度即水印容量
function [ste_yuan] = lsbhide(yuan,shui)
%读入图像矩阵
global total;
yuan=rgb2gray(yuan);
shui=rgb2gray(shui);
ste_yuan=yuan;
ste_yuan=double(ste_yuan);
%读入水印图像
%判断水印图像是否符合要求
[ m,n]=size (shui);
if m~=n
error('水印图像不符合要求');
end
%将水印矩阵转化为一维序列
for f1=1:m
for f2=1:n
msg((f1-1)*n+f2)=shui(f1,f2);
end
end
%判断嵌入消息量是否过大
total=m*n;
[m,n]=size(ste_yuan);
if total>m*n
error('嵌入水印过大,请更换图像');
end
p=1;
%p作为水印嵌入位数计数器
%在图像像素的LSB嵌入水印
for f1=1:m
for f2=1:n
ste_yuan(f1,f2)=ste_yuan(f1,f2)-mod(ste_yuan(f1,f2),2)+msg(p);
if p == total
break;
end
p=p+1;
end
if p == total
break;
end
end
%得到含水印图像矩阵
ste_yuan=uint8(ste_yuan);