资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
张道德 UCAS第1题 PatchWork 算法Bender等提出了著名的Patchwork算法,这是一种统计算法,即在一个载体图像中嵌入具有特定统计特性的水印。1.1算法介绍假设算法针对256级线性量化系统,其初始值为0,所有亮度等级均匀分布,且个个采样点相互独立。在图像中随机选出两点A和B。设A的亮度为,B的亮度为,令。如果大量重复上述过程,则的期望应为0。但是这并不代表在某一特定条件下究竟取值多少。这是因为在这种处理中,的方差是相当高的。的方差则是反应的样本围绕其期望值变化的紧密情况。因为是相互独立的,可以用下式计算:sss=+ 对于均匀分布的有从而的标准差为。在高斯聚类情况下,一次单独的迭代意义不大。但是,如果我们执行上述过程多次,则会出现不同的情形。如果将这个过程重复次,、和 是、和的第次迭代值,定义,则的期望值为0,标准差约为。对于一幅图像,按照上面的方法计算,如果其偏差高于标准差,则可以在很大程度上确定这并非偶然。事实上,当很大时,下面提到的将呈高斯分布,使得依据偏离值的少数几倍数值即可以高置信度地指出图像已经人为的修改,也就是嵌入了水印。具体步骤如下: 一个密钥利用和伪随即数发生器来选择数据对。该密钥和随机数发生器的模型仅为收发双方拥有,解码器需要按照和编码器相同的顺序和位置来选择数据对; 将补丁处的亮度值提高,的一般取值为256的1%5%之间; 将补丁处的亮度值降低同样的值; 重复上述步骤次(的典型值为10000)。 相应的解码过程只需要两步: (1)对编码后的图像,用同样的密钥和伪随机数发生器来选择数据对; (2)计算当的值很大时,有。 =-+=-在不知道密钥的情况下,随机选取像素对,假设它们是独立同分布的,就有。这就表明,只有水印嵌入者可以对水印进行正确检测,攻击者无法判定图像中是否含有水印。1.2 编程实现与分析1.2.1 Patchwork算法的程序实现与分析在实验过程中,我们选取,则标准差。我们选取标准差的1.5倍作为阀值,即首先,我们在原始图像 “elain.bmp” 中运用Patchwork算法嵌入水印,原始图像与嵌入水印后的图像如下图:图1.1 原始图像与嵌入水印后的图像在肉眼的观察下,嵌入水印后的图像与原始图像没有什么区别。在已知密钥的情况下,计算原始图像的和水印图像,判断是否有水印。结论如下表:结论含有水印Sn1416Sn101266在不知密钥的情况下,计算水印图像,判断是否有水印。结论如下表:结论不含有水印Sn-52171.2.2 程序代码%*Patchwork水印算法在已知密钥的情况下,计算原始图像的和水印图像的函数 function Sn=KnownKey(ImgName,key1,key2)%在已知密钥的情况下,计算原始图像的Sn 和水印图像的SnSn=0;ImgMatrix=double(imread(ImgName); %读入bmp位图,存入矩阵ImgMatrix中rowNum,colNum=size(ImgMatrix); %rowNum 图像矩阵的行数;colNum 图像矩阵的列数rng(key1) % 恢复生成器设置(密钥)RandomNumber3=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数1;rng(key2) % 恢复生成器设置(密钥)RandomNumber4=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数2;for i=1:10000 Sn=Sn+ImgMatrix(floor(RandomNumber3(i)/512)+1,mod(RandomNumber3(i),512)+1). -ImgMatrix(floor(RandomNumber4(i)/512)+1,mod(RandomNumber4(i),512)+1);end%*在不知密钥的情况下,计算水印图像的函数function Sn=UnknownKey(ImgName)%在未知密钥的情况下,计算水印图像的SnSn=0;ImgMatrix=double(imread(ImgName); %读入bmp位图,存入矩阵ImgMatrix中rowNum,colNum=size(ImgMatrix); %rowNum 图像矩阵的行数;colNum 图像矩阵的列数RandomNumber3=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数1;RandomNumber4=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数2;for i=1:10000 Sn=Sn+ImgMatrix(floor(RandomNumber3(i)/512)+1,mod(RandomNumber3(i),512)+1). -ImgMatrix(floor(RandomNumber4(i)/512)+1,mod(RandomNumber4(i),512)+1);end%*Patchwork函数 function BrightMatrix,key1,key2=patchwork(ImgName)%更改后的图像矩阵%ChangedImg 更改后的图像名称%key1,key2系统分配给用户的密钥ImgMatrix=double(imread(ImgName); %读入bmp位图,存入矩阵ImgMatrix中BrightMatrix=ImgMatrix; rowNum,colNum=size(ImgMatrix); %rowNum 图像矩阵的行数;colNum 图像矩阵的列数key1=rng; %获取当前的生成器设置(密钥)RandomNumber1=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数1;key2=rng; %获取当前的生成器设置(密钥) RandomNumber2=randi(0,rowNum*colNum-1,10000,1); %产生一系列0,rowNum*colNum-1之间的随机数2;degree=5; %亮度值增加值为256的1%5%,我们取为5 %*%图像水印嵌入for i=1:10000BrightMatrix(floor(RandomNumber1(i)/colNum)+1,mod(RandomNumber1(i),colNum)+1)=. BrightMatrix(floor(RandomNumber1(i)/colNum)+1,mod(RandomNumber1(i),colNum)+1)+degree;BrightMatrix(floor(RandomNumber2(i)/colNum)+1,mod(RandomNumber2(i),colNum)+1)=. BrightMatrix(floor(RandomNumber2(i)/colNum)+1,mod(RandomNumber2(i),colNum)+1)-degree;end%*主程序clcclearDeviation=104*100; %标准差 threshold=1.5*Deviation; %图像阀值,设置为标准差的1.5倍BrightMatrix,key1,key2=patchwork(elain1.bmp);imwrite(uint8(BrightMatrix),elain2.bmp,bmp);subplot(121),imshow(elain1.bmp),title(原始图像); subplot(122),imshow(elain2.bmp),title(嵌入patchwork水印的效果); %*%在已知密钥的情况下,计算原始图像Sn和 水印图像SnSn0=Kno
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号