《LSB算法代码.pdf》由会员分享,可在线阅读,更多相关《LSB算法代码.pdf(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、LSBLSB 数字水印算法的基本思想:改变二值图像的最低位不会对视觉效果产生影数字水印算法的基本思想:改变二值图像的最低位不会对视觉效果产生影响,基于此,可以用水印信息直接代替数字图像的最低位。响,基于此,可以用水印信息直接代替数字图像的最低位。嵌入过程主要分为三步:嵌入过程主要分为三步:一、将原始图像的空域像素值由十进制转换到二进制表;一、将原始图像的空域像素值由十进制转换到二进制表;二、用二进制水印信息中的每一比特信息替换与之相对应在第数据的最低有效二、用二进制水印信息中的每一比特信息替换与之相对应在第数据的最低有效位;位;三、将得到的含水印的二进制数据转换为十进制像素值,从而获得含水印的
2、图三、将得到的含水印的二进制数据转换为十进制像素值,从而获得含水印的图像。像。%读入原始载体图像读入原始载体图像%x=imresize(imread(_lena_std.bmp),256,256);row,col=size(x);M=row;N=col;MN=col*row;figure(1);imshow(x);title(原始图像,Fontsize,16,color,blue);x_source=x;%读入原始水印读入原始水印%m=imresize(imread(lndx.bmp),256,256);%!for i=1:256for j=1:256if double(m(i,j)=0w(i
3、,j)=0;elsew(i,j)=1;endendend%水印信息的嵌入水印信息的嵌入%s=x;for i=1:256for j=1:256s(i,j)=bitset(x(i,j),weizhi,w(i,j);%weizhi=3,数越大,水印越明显%end%数越小,水印越模糊(最低有效位的来历)endimwrite(s,lsb_watermarked.bmp);figure(3);imshow(s);title(嵌入水印后图像,Fontsize,16,color,blue);测试嵌入后图像的峰值信噪比 PSNR(Peak Signal to Noise Ratio)【PSNR 是最普遍,最广泛
4、使用的评鉴画质的客观量测法。峰值信噪比经常用作图像压缩等领域中信号重建质量的测量方法,它常简单地通过均方差(MSEMSE)进行定义。两个mn 单色图像 I 和 K,如果一个为另外一个的噪声近似,那么它们的的均方差定义为:峰值信噪比定义为:图像压缩中典型的峰值信噪比值在 30 到 40dB 之间,愈高愈好。】%计算计算%x_tmp1=double(s)-double(x_source);%!figure(2),imshow(s);title(嵌入水印图像,Fontsize,16,color,blue);imwrite(uint8(round(100*x_tmp1),lsb_chazhi.bmp)
5、;x_tmp2=x_tmp1(:);x_tmp3=abs(x_tmp2);x_tmp4=x_tmp3*x_tmp3;d_embed=x_tmp4/(M*M);SDR1=255*255/d_embed;%!psnr=10*log10(SDR1);在网络中的图像,往往会受到一些攻击。下面介绍一些攻击代码:%各种攻击各种攻击%s=imread(lsb_watermarked.bmp);J2=s;%放大两倍的操作放大两倍的操作if attack_style=1xxx1=imresize(J2,2,bicubic);xxx2=imresize(xxx1,1/2,bicubic);yy=double(xx
6、x2);endif attack_style=2%放大四倍的操作放大四倍的操作xxx1=imresize(J2,4,bicubic);xxx2=imresize(xxx1,1/4,bicubic);yy=double(xxx2);end%缩小缩小 1/41/4 的操作的操作if attack_style=3xxx1=imresize(J2,3/4,bicubic);xxx2=imresize(xxx1,4/3,bicubic);yy=double(xxx2);endif attack_style=4xxx1=imresize(J2,2/4,bicubic);xxx2=imresize(xxx1
7、,4/2,bicubic);yy=double(xxx2);end%3*3%3*3 空域低通滤波空域低通滤波if attack_style=5B=(1/9)*ones(3,3);xxx2=filter2(B,J2);yy=double(xxx2);end%4%4 领域平均领域平均%if attack_style=6B=0 1 0;1 0 1;0 1 0*(1/4);xxx2=filter2(B,J2);yy=double(xxx2);end%8%8 领域平均领域平均%if attack_style=7B=1 1 1;1 0 1;1 1 1*(1/8);xxx2=filter2(B,J2);yy
8、=double(xxx2);end%窗口中值滤波窗口中值滤波if attack_style=8xxx2=medfilt2(J2);yy=double(xxx2);endif attack_style=9a1=1;b1=3;xxx2=medfilt2(J2,a1 b1);save a1 a1;save b1 b1;yy=double(xxx2);end%剪裁剪裁if attack_style=10for i=128-44:128+45for j=128-44:128+44J2(i,j)=0;endendyy=double(J2);endif attack_style=11for i=128-64
9、:128+63for j=128-64:128+63J2(i,j)=0;endendyy=double(J2);endif attack_style=12yy=imnoise(uint8(round(J2),gaussian,0,attack_strength);endif attack_style=13imwrite(uint8(round(J2),jpeg_n.jpg,jpg,Quality,attack_strength);yy,map=imread(jpeg_n.jpg,jpg);endif attack_style13yy=J2;end水印信息的提取很简单,只要将对应像素值转换为二进制形式,然后提取最低有效位即可。%受攻击后的水印信息的提取受攻击后的水印信息的提取%for i=1:256for j=1:256mm(i,j)=bitget(uint8(yy(i,j),weizhi);if double(mm(i,j)=1mm(i,j)=255;elsemm(i,j)=0;endendenderr=sum(sum(xor(m,mm)/(256*256);figure(3),imshow(uint8(mm);title(提取水印图像,Fontsize,16,color,blue);
限制150内