基于MATLAB数字水印系统设计.ppt
文本预览下载声明
end x=9;y=9; for (kk=1:n) mean=mean2(ZM(y-4:y+blocksize-1+4,x-4:x+blocksize-1+4)); mean=mod(floor(mean*10),10); meann=mean; k=0;meanm=0; while(meann~=0) meanm=ZX(y+blocksize-1,x+blocksize-4+k)*2^k+meanm; k=k+1; meann=floor(meann/2); end if(mean~=meanm) Z(y:y+blocksize-1,x:x+blocksize-1)=1; end if(x+2*blocksize)=Nc x=9; y=y+blocksize; else x=x+blocksize; end end figure; ZA=uint8(Z); imshow(ZA,[]); (a) 原始Lena图 (b) 采用mean2算法嵌入水印后 Lena图 (c) 嵌入水印后图像发生篡改 (d) 检测篡改效果图的 图(a)为256*256的灰度图像“lena”,图(b)为嵌入水印后的“lena”图,该图具有较高的峰值信噪比,满足脆弱水印对嵌入信息不可见性的要求。 将含水印(179:250,183:230)区域的图像复制到(65:136,209:256)区域。图(d)中黑色部分代表该算法可以检测出篡改区域。实验结果表明,该算法不仅可以精确定位篡改的位置,而且由于使用了MATLAB中的mean2( )函数增加各子块间的相关性以及系统的安全性,从而有效的防止了“拼贴攻击”。 谢谢! * fc_o=ones(1,c*d); for g=1:n for h=1:c*d if B(g)==fc(h) fc_o(h)=message(g); h=c*d; end end end message_vector=fc_o; watermarked_image=cover_object; rand(state,7); pn_sequence_zero=round(rand(1,sum(sum(midband)))); %嵌入水印 x=1;y=1; for(kk=1:m) %分块DCT变换 dct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1)); II=1; if(message_vector(kk)==0) for ii=1:blocksize for jj=1:blocksize if(midband(jj,ii)==1) dct_block(jj,ii)=dct_block(jj,ii)+k*pn_sequence_zero(II); II=II+1; end end end end %分块DCT反变换 watermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block); if(x+blocksize)=Nc x=1;y=y+blocksize; else x=x+blocksize; end end watermarked_image_int=uint8(watermarked_image); %生成并输出潜入水印后的图像 imwrite(watermarked_image_int,dct2_watermarked.bmp,bmp); %显示峰值信噪比 xsz=255*255*Mc*Nc/sum(sum((cover_object-watermarked_image).^2)); psnr=10*log10(xsz) %显示嵌入水印后的图像 figure; imshow(watermarked_image_int,[]) title
显示全部