信息隐藏 实验五 Patchwork 图像信息隐藏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);%显示原始图像

相关文档
最新文档