




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
clear all;close all;clc;V=double(imread(D:lenalena.jpg);imshow(mat2gray(V);i u=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviter W=W.*(V./(W*H)*H); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W); H=H.*(W*(V./(W*H);endimg_V=W*H;figure;imshow(mat2gray(img_V);首先读入原始图象并设置参数,然后嵌入水印信息,程序代码如下:clear%size=256;block=8;blockno=size/block;LENGTH=size*size/64;Alpha1=0.02;Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);%产生水印序列并对其排序randn(seed,10);watermark1=randn(1,LENGTH);subplot(2,2,1);plot(watermark1);title(watermarc:Gaussian noise);subplot(2,2,3);title(edge of origine image)Y0,I0=sort(watermark1);%读入原图象trueImage=imread(H:Documents and SettingssunhwMy DocumentsMy Picturesbiaozhun.bmp);alfa=.1;LENGTH=2500;subplot(2,2,2);imshow(trueImage);title(origine image:I);%对原图象进行DCT变换dctF1=dct2(H:Documents and SettingssunhwMy DocumentsMy Picturesbiaozhun.bmp);m,n=size(dctF1);%找出水印嵌入位置(幅值较大的n个频域成分)A=dctF1(:);Y1,I1=sort(A);x=m*n;k=LENGTH;M=zeros(x,1);%修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)for i=1:xif k=1M(x)=Y1(x)*(1+alfa*Y0(k);k=k-1;elseM(x)=Y1(x);endx=x-1;endN=zeros(x,1);x=m*n;for i=1:xN(I1(i)=M(i);enda=1;for j=1:nfor i=1:mdctF2(i,j)=N(a);a=a+1;endend%DCT反变换,得到嵌入水印的图象idctF1=idct2(dctF2);subplot(2,2,4);imshow(log(abs(idctF1), );title(embeded image:D);%endI=imread(D:lena1.jpg);disp(I);I=double(I)/255;disp(I);I=ceil(I);%显示水印图像%figure(1);subplot(2,3,1);imshow(I),title(水印图像)dimI=size(I);rm=dimI(1);cm=dimI(2);%5以下生成水印信息 %mark=I;alpha=0.05;V=imread(D:lenalena.jpg);i u=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviter W=W.*(V./(W*H)*H); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W); H=H.*(W*(V./(W*H);endk1=H;psnr_cover=double(V);subplot(2,3,2),imshow(a0,),title(载体图像);r,c=size(a0);cda0=blkproc(a0,8,8,dct2);% 嵌入 %cda1=cda0; % cda1 = 256_256for i=1:rm% i=1:32 for j=1:cm% j=1:32 x=(i-1)*10;y=(j-1)*10; if mark(i,j)=1 k=k1; else k=k2; end cda1(x+1,y+8)=cda0(x+1,y+8)*(1+alpha*k(1); cda1(x+2,y+7)=cda0(x+2,y+7)*(1+alpha*k(2); cda1(x+3,y+6)=cda0(x+3,y+6)*(1+alpha*k(3); cda1(x+4,y+5)=cda0(x+4,y+5)*(1+alpha*k(4); cda1(x+5,y+4)=cda0(x+5,y+4)*(1+alpha*k(5); cda1(x+6,y+3)=cda0(x+6,y+3)*(1+alpha*k(6); cda1(x+7,y+2)=cda0(x+7,y+2)*(1+alpha*k(7); cda1(x+8,y+1)=cda0(x+8,y+1)*(1+alpha*k(8); endend% 嵌入水印后图像 %a1=blkproc(cda1,8,8,idct2);a_1=uint8(a1);imwrite(a_1,withmark.bmp,bmp);subplot(2,3,3),imshow(a1,),title(嵌入水印后的图像);size=256;block=8;blockno=size/block;%一行有32格LENGTH=size*size/64;Alpha1=0.025;Alpha2=0.1;T1=3;I=zeros(size,size);%产生全矩阵D=zeros(size,size);BW=zeros(size,size);Block_dct1=zeros(block,block);%产生水印,并显示水印信息;subplot(3,2,1);Info=dcf;InfoStrSize=length(Info);%将字符串转换为位数组array=zeros(1,InfoStrSize*8);for m=1:InfoStrSizeInfochar=double(Info(m);% c为99for n=1:8 array(8*(m-1)+n)=bitget(Infochar,n);%获得Infochar第n位的值endendplot(array);title(原始水印信息);%显示原图subplot(3,2,2);i=imread(lena.bmp);imshow(i,);title(原始图像)%显示prewitt为算子的边缘图BW=edge(i,prewitt);%BW=edge(I,Roberts);%BW=edge(I,Sobel);%BW=edge(I,zerocross);subplot(3,2,3);imshow(BW);Title(原始图像边缘图);%嵌入水印l=1;k=1;for m=1:blocknofor n=1:blockno x=(m-1)*block+1; y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格 block_dct1=H(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。block_dct1=dct2(block_dct1);%对二维数组进行离散余弦变换。dct是有损压缩如jpeg使用的技术。Dct是可逆的运算 BW_8_8=BW(x:x+block-1,y:y+block-1);%得到边界矩阵。 if m=1|nT1 Alpha=Alpha2; %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k); if l=(InfoStrSize*8) block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*array(l); l=l+1; end else Alpha=Alpha1; % block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k); end Block_dct=idct2(block_dct1); D(x:x+block-1,y:y+block-1)=Block_dct; k=k+1;endend%显示嵌入水印后的图像subplot(3,2,4);imshow(D,);title(嵌入水印图像)%保存该图像D=uint8(D);imwrite(D,marked.bmp);2:%提取水印 D=imread(marked.bmp); D=double(D);I=imread(lena.bmp);I=double(I);array2=zeros(1,InfoStrSize*8);K=1;l=1;for m=1:blocknofor n=1:blockno x=(m-1)*block+1; y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格 block_dct1=I(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。 block_dct2=D(x:x+block-1,y:y+block-1);Block_dct1=dct2(block_dct1);%对二维数组进行离散余弦变换。dct是有损压缩如jpeg使用的技术。Dct是可逆的运算Block_dct2=dct2(block_dct2); BW_8_8=BW(x:x+block-1,y:y+block-1);%得到边界矩阵。 if m=1|nT1 Alpha=Alpha2; %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k); if lrow i1=mod(i1,row); end if j1colum j1=mod(j1,colum); end if i1= =0 i1=row; end if j1= =0 j1=colum; end w1(i1,j1)=w0(i,j); end end w0=w1;end r=w0;%提取水印for p=1:size/Bfor q=1:size/Bx=(p-1)*B+1; y=(q-1)*B+1;if (I_W(x,y)-P(x,y)0F(p,q)=1;elseF(p,q)=0;endendendfigure(5); imshow(F,); title(提取出的水印);%攻击实验disp(input you choice according to the following image processing operation:);disp(0-exit);disp(1-smoothing patterns);%添加噪音disp(2-adding uniorm noise 添加噪音); %滤波disp(3-adding filter 10 10 滤波);%剪切disp(4-cutting part of the image 剪切);%压缩disp(5-10 quality JPEG compressing 压缩); %旋转45度disp(6-rotate 45 旋转); %d=input(please input you choice(1,2,3,4,5,6):);while d=0switch d case 1watermark_detect(idctF1,Y1,I0,waterMark1);case 2 WImage2=idctF1; noise0=10*rand(size(WImage2); WImage2=WImage2+noise0; figure;imshow(WImage2, );title(adding uniform noise 添加噪音); watemark_detect(WImage2,Y1,I0,waterMark1);case 3 WImage3=idctF1; H=fspcial(gaussian高斯,10,10,5); WImage3=imfilter(WImage3,H); figure; imshow(WImage3, ); title(through filter 10,10 滤波); watemark_detect(WImage3,Y1,I0,waterMark1);case 4 WImage4=idctF1; WImage4(1:128,1;128)=256; figure; imshow(WImage4); title(cutting part of the image 剪切); watemark_detect(WImage4,Y1,I0,waterMark1); case 5 WImage5=idctF1; WImage5=im2double(WImage5); cnum=10; dctm=dctmtx(8); p1=dctm; p2=dctm.; imageDCT=blkproc(WImage5,8,8,p1*p2*x,dctm,dctm.); DCTvar=im2col(imageDCT,8,8,distinct).; n=size(DCTvar,1); DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).2)/n; dum,order=sort(DCTvar); cnum=64-cnum; mask=ones(8,8); mask(order(1:cnum)=zeros(1,cnum); im88=zeros(9,9); im88(1:8,1:8)=mask; im128128=kron(im88(1:8,1:8),ones(16); dctm=dctmtx(8); p1=dctm.; p2=mask(1;8,1:8); p3=dctm;Wimage5=bikproc(imageDCT,8,8,p1*(x.8p2)*p3,dctm.,mask(1:8,1:8),dctm); figure; imshow(Wimage5); title(JPEG Image 压缩); watemark_detect(WImage5,Y1,I0,waterMark1);case 6 WImage6=idctF1; WImage6=imrotate(WImage6,45,bilinear,corp); figure; imshow(Wimage6); title(rotate 45 旋转); watemark_detect(WImage6,Y1,I0,waterMark1);case 0 break;otherwise error(you have a valid value(您的输入错误);endd=input(please input you choice(请输入您的选择):);end%结束f=imread(watermark.jpg);%将含水印图像f归一化,以便于攻击处理。m=max(max(I_W);I_W=double(I_W )./double(m);%-攻击-attack=0;switch attack case 0, attackf= I_W; att=未攻击; case 1,%1. JPEG 压缩imwrite(I_W,attackf.jpg,jpg,quality,30);attackf=imread(attackf.jpg);attackf=double(attackf)/255;att=JPEG压缩; case 2,% %2. 高斯低通滤波h=fspecial(gaussian,3,1);attackf=filter2(h, I_W);att=高斯低通滤波; case 3,%3. 直方图均衡化attackf=histeq(I_W);att=直方图均衡化; case 4,%4. 图像增亮attackf=imadjust(I_W,0.4,1);att=图像增亮; case 5,%5. 图像变暗attackf=imadjust(I_W,0,0.85);att=图像变暗; case 6,%6. 增加对比度attackf=imadjust(I_W,0.3,0.6,);att=增加对比度; case 7,%7. 降低对比度attackf=imadjust(I_W,0.2,0.8);att=降低对比度; case 8,%8. 添加高斯噪声attackf=imnoise(I_W,gaussian,0,0.01);att=添加高斯噪声; case 9,%9. 椒盐噪声attackf=imnoise(I_W,salt & pepper,0.06);att=椒盐噪声; case 10,%10. 添加乘积性噪声attackf=imnoise(I_W,speckle,0.08);att=添加乘积性噪声;end;%-攻击后处理-I_W=attackf.*double(m);figure(2);imshow(uint8(I_W);%显示水印嵌入图攻击后效果title(att);imwrite(uint8(I_W),watermark.jpg);%-提取水印-% clear;a=imread(watermark.jpg);t=sdwt_ex(double(a),db2,tkey);%根据密钥树分解w,map=extract(t,tkey);%抽取水印r,c=size(w);figure(3);for i=1:r subplot(ceil(r/3),3,i) imshow(255-100*abs(uint8(reshape(w(i,:),map(1),map(2); title(strcat(抽取水印图,num2str(i);end;V=imread(D:lenalena.jpg);Alfa=0.05;LENGTH=2500; i u=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviter W=W.*(V./(W*H)*H); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W); H=H.*(W*(V./(W*H);endY1,10=sort(H)L=imread(D:lena1.jpg);Y0,10=sort(L)x=m*n;k=LENGTH;M=zeros(x,1);%修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)for i=1:x if k=1 M(x)=Y1(x)*(1+alfa*Y0(k); k=k-1; else M(x)=Y1(x); end x=x-1;endN=zeros(x,1);x=m*n;for i=1:x N(I1(i)=M(i);enda=1;for j=1:nfor i=1:m N(i,j)=N(a); a=a+1;endend%重构图像,得到嵌入水印的图象B=W.*H;figure(1);imshow(B);title(嵌入水印后的图象);endclear all; clc; start_time=cputime; % 读取水印图像 % I=imread(mark.bmp); I=rgb2gray(I); I=double(I)/255; I=ceil(I); %显示水印图像% figure(1); subplot(2,3,1); imshow(I),title(水印图像) dimI=size(I); rm=dimI(1);cm=dimI(2); %5 以下生成水印信息 % mark=I; alpha=50, k1=randn(1,8); k2=randn(1,8); a0=imread(lena.bmp); psnr_cover=double(a0); subplot(2,3,2),imshow(a0,),title(载体图像); r,c=size(a0); cda0=blkproc(a0,8,8,dct2); % 嵌入 % cda1=cda0; % cda1 = 256_256 for i=1:rm % i=1:32 for j=1:cm % j=1:32 x=(i-1)*8;y=(j-1)*8; if mark(i,j)=1 k=k1; else k=k2; end cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1); cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2); cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3); cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4); cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5); cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6); cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7); cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8); end end % 嵌入水印后图像 % a1=blkproc(cda1,8,8,idct2); a_1=uint8(a1); imwrite(a_1,withmark.bmp,bmp); subplot(2,3,3),imshow(a1,),title(嵌入水印后的图像); disp(嵌入水印处理时间); embed_time=cputime-start_time, % disp(对嵌入水印的图像的攻击实验,请输入选择项:); disp(1-添加白噪声); disp(2-高斯低通滤波); disp(3-JPEG 压缩); disp(4-图像剪切); disp(5-旋转10度); disp(6-直接检测水印); disp(其他-不攻击); d=input(请输入选择(1-6):); start_time=cputime; figure(1); switch d case 6 subplot(2,3,4); imshow(a1,); title(未受攻击的含水印图像); M1=a1; case 1 WImage2=a1; noise0=20*randn(size(WImage2); WImage2=WImage2+noise0; subplot(2,3,4); imshow(WImage2,); title(加入白噪声后图像); M1=WImage2; M_1=uint8(M1); imwrite(M_1,whitenoise.bmp,bmp); case 2 WImage3=a1; H=fspecial(gaussian,4,4,0.2); WImage3=imfilter(WImage3,H); subplot(2,3,4); imshow(WImage3,); title(高斯低通滤波后图像); M1=WImage3; M_1=uint8(M1); imwrite(M_1,gaussian.bmp,bmp); case 4 WImage4=a1; WImage4(1:64,1:512)=512; %WImage4(224:256,1:256)=256; %WImage4(1:256,224:256)=256; %WImage4(1:256,1:32)=256; WImage4cl=mat2gray(WImage4); figure(2); subplot(1,1,1); %subplot(2,3,4); imshow(WImage4cl); title(部分剪切后图像); figure(1); M1=WImage4cl; %M_1=uint8(M1); %imwrite(M_1,cutpart.bmp,bmp); case 3 WImage5=a1; WImage5=im2double(WImage5); cnum=10; dctm=dctmtx(8); P1=dctm; P2=dctm.; imageDCT=blkproc(WImage5,8,8,P1*x*P2,dctm,dctm.); DCTvar=im2col(imageDCT,8,8,distinct).; n=size(DCTvar,1); DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).2)/n; dum,order=sort(DCTvar); cnum=64-cnum; mask=ones(8,8); mask(order(1:cnum)=zeros(1,cnum); im88=zeros(9,9); im88(1:8,1:8)=mask; im128128=kron(im88(1:8,1:8),ones(16); dctm=dctmtx(8); P1=dctm.; P2=mask(1:8,1:8); P3=dctm; WImage5=blkproc(imageDCT,8,8,P1*(x.*P2)*P3,dctm.,mask(1:8,1:8),dctm); WImage5cl=mat2gray(WImage5); %figure(2); subplot(2,3,4); imshow(WImage5cl); title(经JPEG压缩后图像); %figure(1); M1=WImage5cl; case 5 WImage6=a1; WImage6=imrotate(WImage6,10,bilinear,crop); WImage6cl=mat2gray(WImage6); figure(2); subplot(1,1,1); imshow(WImage6cl); title(旋转10度后图像); figure(1); M1=WImage6cl; otherwise disp(你输入的是无效数字,图像未受攻击,将直接检测水印); subplot(2,3,4); imshow(a1,); title(未受攻击的含水印图像); M1=a1; end %6666666666666666666666666666666666666666 提取水印 % psnr_watermarked=M1; dca1=blkproc(M1,8,8,dct2); p=zeros(1,8); for i=1:dimI(1) for j=1:dimI(2) % j=1:32 x=(i-1)*8;y=(j-1)*8; p(1)=dca1(x+1,y+8); p(2)=dca1(x+2,y+7); p(3)=dca1(x+3,y+6); p(4)=dca1(x+4,y+5); p(5)=dca1(x+5,y+4); p(6)=dca1(x+6,y+3); p(7)=dca1(x+7,y+2); p(8)=dca1(x+8,y+1); %sd1=sum(sum(p.*k1)/sqrt(sum(sum(p.2); %sd2=sum(sum(p.*k2)/sqrt(sum(sum(p.2); %if sd1sd2 if corr2(p,k1)corr2(p,k2),warning off MATLAB:divideByZero; mark1(i,j)=1; else mark1(i,j)=0; end end end %mark=round(mark1); % 防止出现的那些小数,影响10-2进制的转换 subplot(2,3,5); imshow(mark1,),title(提取的水印图像); subplot(2,3,6); imwrite(mark1,getmark.bmp,bmp); imshow(mark),title(原嵌入水印比较); % time % disp(攻击与提取处理时间) attack_recover_time=cputime-start_time, % psnr % disp(载体图像与含水印图像峰值信噪比) PSNR=psnr(psnr_cover,psnr_watermarked,c,r), % Oringinal mark and mark test % disp(原水印图像与提取水印图像互相关系数) NC=nc(mark1,mark), 1、 数字水印的概念数字水印技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。通过这些隐藏在多媒体内容中的信息,可以确定内容的创建者,判断内容的真实完整性。数字水印技术需要增加鲁棒性要求,以对抗各种可能的攻击。2、 数字水印的基本特征隐藏性:数字产品加入数字水印后,应不会引起数字作品的明显质降,并不易被接收者察觉。安全可靠性:水印体制要商业应用,其算法必须公开。算法的安全性完全取决于密钥,而不是对算法进行保密。另外,数字水印应能对抗非法的探测和解码,面对非法的攻击也能以极低的差错率识别作品,同时数字水印应很难被他人复制和伪造。鲁棒性:能在多种无意或有意的信号处理过程后,仍能保持水印的完整性和鉴别的准确性。对数字水印来说,其隐藏水印的鲁棒性在实际应用中是有由两部分组成:(1)在整体数据出现失真后,其内嵌水印仍存在;(2)在数据失真后,水印探测算法仍能准确探测出水印的存在。计算复杂度:不同应用对水印嵌入算法和提取算法的计算复杂度有不同的要求。3、 数字水
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辅警法律知识培训
- 农业银行2025秋招结构化面试经典题及参考答案甘肃地区
- 建设银行2025神农架林区秋招笔试价值观测评题专练及答案
- 中国银行2025东营市笔试英文行测高频题含答案
- 2025年3D打印的金属材料性能优化
- 2025年3D打印的食品制造
- 2025可再生能源的全球合作机制
- 2025新兴行业商业模式创新实践
- 商业项目代理合同3篇
- 中国银行2025锡林郭勒盟秋招笔试EPI能力测试题专练及答案
- 医务人员职业素养提升知识试题及答案
- Unit 3 A Lets learn湖北公开课课件
- 2025年上半年湖南湘西州龙山县事业单位招聘工作人员41人易考易错模拟试题(共500题)试卷后附参考答案
- 精神科进修汇报:专业护理实践与挑战
- 加油站员工绩效考核制度或加油站员工激励约束办法
- 食堂验货标准培训
- 电动叉车安全操作培训
- 浆砌石挡墙拆除施工技术方案
- 人教版九年级化学上册教学工作计划(及进度表)
- T-SEEPLA 09-2024 四川省功能区声环境质量监测站(点)布设技术规范
- 2025年湖南民族职业学院单招职业适应性测试题库必考题
评论
0/150
提交评论