信息隐藏 实验五 Patchwork 图像信息隐藏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五 Patchwork 图像信息隐藏
一,实验目的
1,了解Patchwork信息隐藏特点,
2,掌握基于Patchwork 的图像信息隐藏原理
3,设计并实现一种 Patchwork 的信息隐藏方法
二,实验环境
1, Windows XP 操作系统
2, Matlab 7.1版本软件
3, BMP格式图片文件
三,实验原理
1,Patchwork是指从载体数据中选择一些数据组成两个集合,通过修改这两个集合之间的某种关系来携带水印信息。这两个集合可以是两个系数、两组系数或者是两个特征量。两个集合之间的关系可以是大小关系、能量关系、逻辑关系和奇偶关系等。Patchwork方法嵌入水印时,通过修改集合之间的某种关系来嵌入水印;提取水印时则根据对应的关系来提取嵌入的水印信息。2,在本实验报告中,验证了通过随机方式把像素分组的方法。随机选择N对像素点(ai和bi),然后将ai点的值增加d,将bi点的像素值减少d。
3,同时,设计了自己的算法。先把图像的像素写成一维矩阵,根据矩阵下标4*n形式和4*n-1形式分为两组,将下标为4*n形式所对应的像素增加常量d=2.3,将下标为4*n-1形式所对应的像素减少常量d=2.3。
四,实验内容
1, 验证通过随机方式把像素分组的方法。
(1)嵌入秘密信息
clc;
clear all;
oi=imread('baboon.bmp');%读入载体图像
ni=rgb2gray(oi);
wi=ni;
[row col]=size(wi);
wi=double(wi);
wi=wi(:);
n=floor((row*col)/10);
length=row*col;
rand('state',123);%产生随机数的密钥
a=rand(1,n);%产生N长度的随机数
d=2.3;%定义修改的分量
count=0;
k=1;
while k<=n
if (a(1,k)>=0.5)
wi(k*10,1)=wi(k*10,1)+d;
wi(k*10-1,1)=wi(k*10-1,1)-d; end
k=k+1;
end
for i=1:row
for j=1:col
wil(i,j)=wi(row*(j-1)+i,1);
end
end
wil=uint8(wil);
imwrite(wil,'watermarked.bmp'); subplot(1,2,1);imshow(ni);%显示原始图像subplot(1,2,2);imshow(wil)%显示新图像
下图为原图与嵌入信息的图像:
(2)计算两个样本均值的差
clc;
clear;
oi=imread('watermarked.bmp');%读入嵌入水印后的图像wi=oi;
[row col]=size(wi);
wi=double(wi);
wi=wi(:);
n=floor((row*col)/10);
r=1.6;
rand('state',123);%产生随机数的密钥
a=rand(1,n);%产生N长度的随机数
d=2.3;%定义修改的分量
count=0;
k=1;
tempa=0;
tempb=0;
while k<=n
if(a(1,k)>=0.5)
tempa=tempa+wi(k*10,1);
tempb=tempb+wi(k*10-1,1);
count=count+1;
end
k=k+1;
end
avea=tempa/count;
aveb=tempb/count;
if((avea-aveb)>r*d)
watermark=1;
else
watermark=0;
end
计算后的结果在workspace中可以看出:
2,设计了自己的算法。
先把图像的像素写成一维矩阵,根据矩阵下标4*n形式和4*n-1形式分为两组,将下标为4*n形式所对应的像素增加常量d=2.3,将下标为4*n-1形式所对应的像素减少常量d=2.3。
(1)嵌入秘密信息
clc;
clear all;
oi=imread('baboon.bmp');%读入载体图像
ni=rgb2gray(oi);
wi=ni;
[row col]=size(wi);
wi=double(wi);
wi=wi(:);
length=row*col;
n=length/4;
d=2.3;
for k=1:n
wi(k*4,1)=wi(k*4,1)+d;
wi(k*4-1,1)=wi(k*4-1,1)-d;
k=k+1;
end
for i=1:row
for j=1:col
wil(i,j)=wi(row*(j-1)+i,1);
end
end
wil=uint8(wil);
imwrite(wil,'watermarked.bmp');
subplot(1,2,1);imshow(ni);%显示原始图像