clear;
clc;
markbefore=imread('huan.jpg');
markbefore=rgb2gray(markbefore);
mark=im2bw(markbefore);
figure(1);
subplot(2,3,1);
imshow(mark),title('水印图像');
[rm,cm]=size(mark);
cover_image=imread('5.bmp');
cover_image=rgb2gray(cover_image);
subplot(2,3,2),imshow(cover_image,[]),title('载体图像');
before=blkproc(cover_image,[8 8],'dct2');% %将载体图像的灰度层分为8×8的小块,每一块内做二维DCT变换,结果记入矩阵before
I=mark;
alpha=30; %尺度因子,控制水印添加的强度,决定了频域系数被修改的幅度
k1=randn(1,8); %产生两个不同的随机序列
k2=randn(1,8);
after=before; %初始化载入水印的结果矩阵
for i=1:rm %在中频段嵌入水印
for j=1:cm
x=(i-1)*8;
y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end;
after(x+1,y+8)=before(x+1,y+8)+alpha*k(1);
after(x+2,y+7)=before(x+2,y+7)+alpha*k(2);
after(x+3,y+6)=before(x+3,y+6)+alpha*k(3);
after(x+4,y+5)=before(x+4,y+5)+alpha*k(4);
after(x+5,y+4)=before(x+5,y+4)+alpha*k(5);
after(x+6,y+3)=before(x+6,y+3)+alpha*k(6);
after(x+7,y+2)=before(x+7,y+2)+alpha*k(7);
after(x+8,y+1)=before(x+8,y+1)+alpha*k(8);
end;
end;
result=blkproc(after,[8 8],'idct2'); %将经处理的图像分为8×8的小块,每一块内做二维DCT逆变换
result = uint8(result);
imwrite(result,'markresule.bmp','bmp'); %存储添加水印后的图像
subplot(2,3,3),imshow(result,[]),title('嵌入水印的图像'); %显示添加水印后的图像
基于变换域的信息隐藏
最新推荐文章于 2024-05-17 09:19:05 发布