%将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来
%注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析
% 程序代写&算法设计,联系qq:380238062,转载时请保留
clc %清屏
clear %清空变量
close all %关闭已打开图像
% 读入载体图像 并显示
cover_object=imread('orign.jpg');
if ndims(cover_object)==3%如果是rbg图像,则转化为灰度图像
cover_object=rgb2gray(cover_object);
end
figure;imshow(cover_object); %显示
title('载体图像');
% 读入水印图像 并显示
message=imread('shuiyin.jpg');
if ndims(message)==3 %如果是rbg图像,则转化为灰度图像
message=rgb2gray(message);
end
[Mm,Nm]=size(message);
message=double(message);
message=round(message./256); %转化为bit信息流,以便隐写
message=uint8(message);
figure;imshow(256*message); %显示
title('待隐藏信息');
%调用yinxie函数实现信息隐写
watermarked_image=yinxie(cover_object,message);
figure;imshow(watermarked_image,[])
title('已嵌入隐写信息的图像') %显示
% 程序代写&算法设计,联系qq:380238062,转载时请保留
%调用tiqu函数实现信息提取
watermark=tiqu(watermarked_image,Mm,Nm);
figure;imshow(watermark,[])%显示提取图像
title('提取后信息')
function watermarked_image=yinxie(cover_object,message);
% 获取载体图像的大小
[Mc,Nc]=size(cover_object);
% 获取水印图像的大小
[Mm,Nm]=size(message);
length_message=Mm*Nm;%信息长度
message(Mc,Nc)=0;
watermarked_image=cover_object;
%每一比特秘密信息都用载体图像的一个像素负载,如果秘密比特与像素灰度
%值的最低位相同,则不作修改;否则,若原始灰度值为奇数,则减1,若为
%偶数,则加1
% 程序代写&算法设计,联系qq:380238062,转载时请保留
% mod(cover_object(ii,jj),2)获取图像cover_object处像素值的最低位
for ii = 1:Mc
for jj =1:Nc
if mod(cover_object(ii,jj),2)==message(ii,jj)%判断是否相等
continue; %若相等,不作修改
else %否则
if mod(cover_object(ii,jj),2)==0 %若为偶,则加1
watermarked_image(ii,jj)=cover_object(ii,jj)+1;
else %若为奇,则减1
watermarked_image(ii,jj)=cover_object(ii,jj)-1;
end
end
end
end