logo资料库

LSB算法程序matlab.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
LSB 数字水印算法的基本思想:改变二值图像的最低位不会对视觉效果产生影 响,基于此,可以用水印信息直接代替数字图像的最低位。 嵌入过程主要分为三步: 一、将原始图像的空域像素值由十进制转换到二进制表; 二、用二进制水印信息中的每一比特信息替换与之相对应在第数据的最低有效 位; 三、将得到的含水印的二进制数据转换为十进制像素值,从而获得含水印的图 像。 %%%读入原始载体图像%%%%% 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:256 for j=1:256 if double(m(i,j))==0 s(i,j)=bitset(x(i,j),weizhi,w(i,j)); %%weizhi=3,数越大,水印越明显%% %%数越小,水印越模糊(最低有效位的来历) end imwrite(s,'lsb_watermarked.bmp'); w(i,j)=0; else w(i,j)=1; end end end s=x; for i=1:256 for j=1:256 end %%%水印信息的嵌入%%%%%
figure(3);imshow(s); title('嵌入水印后图像','Fontsize',16,'color','blue'); 测试嵌入后图像的峰值信噪比 PSNR(Peak Signal to Noise Ratio)【PSNR 是 最普遍,最广泛使用的评鉴画质的客观量测法。 峰值信噪比经常用作图像压缩等领域中信号重建质量的测量方法,它常简单地通过均方差 (MSE)进行定义。两个 m×n 单色图像 I 和 K,如果一个为另外一个的噪声近似,那么它 们的的均方差定义为: 峰值信噪比定义为: 图像压缩中典型的峰值信噪比值在 30 到 40dB 之间,愈高愈好。】 %%%计算PSNR%%%%% 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'); 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==1 xxx1=imresize(J2,2,'bicubic'); xxx2=imresize(xxx1,1/2,'bicubic'); yy=double(xxx2); end if attack_style==2 %%%%放大四倍的操作 xxx1=imresize(J2,4,'bicubic'); xxx2=imresize(xxx1,1/4,'bicubic');
yy=double(xxx2); end %%%%缩小 1/4 的操作 if attack_style==3 xxx1=imresize(J2,3/4,'bicubic'); xxx2=imresize(xxx1,4/3,'bicubic'); yy=double(xxx2); end if attack_style==4 xxx1=imresize(J2,2/4,'bicubic'); xxx2=imresize(xxx1,4/2,'bicubic'); yy=double(xxx2); end %%%3*3 空域低通滤波 if attack_style==5 B=(1/9)*ones(3,3); xxx2=filter2(B,J2); yy=double(xxx2); end %%% 4 领域平均%%%% if attack_style==6 B=[0 1 0;1 0 1;0 1 0]*(1/4); xxx2=filter2(B,J2); yy=double(xxx2); end %%%%8 领域平均%%%% if attack_style==7 B=[1 1 1;1 0 1;1 1 1]*(1/8); xxx2=filter2(B,J2); yy=double(xxx2); end %%%%窗口中值滤波 if attack_style==8 xxx2=medfilt2(J2); yy=double(xxx2); end if attack_style==9 a1=1; b1=3; xxx2=medfilt2(J2,[a1 b1]); save a1 a1; save b1 b1; yy=double(xxx2); end
%%%剪裁 if attack_style==10 for i=128-44:128+45 for j=128-44:128+44 J2(i,j)=0; end end yy=double(J2); end if attack_style==11 for i=128-64:128+63 for j=128-64:128+63 J2(i,j)=0; end end yy=double(J2); end if attack_style==12 yy=imnoise(uint8(round(J2)),'gaussian',0,attack_strength); end if attack_style==13 imwrite(uint8(round(J2)),'jpeg_n.jpg','jpg','Quality',attack_strength); [yy,map]=imread('jpeg_n.jpg','jpg'); end if attack_style>13 yy=J2; end 水印信息的提取很简单,只要将对应像素值转换为二进制形式,然后提取最低有 效位即可。 %%%受攻击后的水印信息的提取%%%%% for i=1:256 for j=1:256 mm(i,j)=bitget(uint8(yy(i,j)),weizhi); if double(mm(i,j))==1 end err=sum(sum(xor(m,mm)))/(256*256); mm(i,j)=255; mm(i,j)=0; else end end
figure(3),imshow(uint8(mm)); title('提取水印图像','Fontsize',16,'color','blue');
分享到:
收藏