![]() |
求助脆弱水印问题(请高手指点)
%用矩阵分解法嵌入数字水印
Z=double(imread('d:/2.bmp')); Mc=size(Z,1);%图像高度 Nc=size(Z,2);%图像宽度 c=Mc/8;d=Nc/8; m=c*d; blocksize=8; %将图像分为 8x8 块 %设定嵌入信息的矩阵B B=[ 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0]; ZM=floor(Z./2)*2;%向负无穷大方向取整 x=1;y=1; for(kk=1:m) [q,u]=qr(ZM(x:x+blocksize-1,y:y+blocksize-1)); %qr分解 满足ZM=q*u,u为一个上三角矩阵 tra=floor(trace(abs(u))*10000); % trace对角元素取和 for ii=1:blocksize for jj=1:blocksize if (B(ii,jj)==1&tra~=0) ZM(x+ii-1,y+jj-1)=ZM(x+ii-1,y+jj-1)+mod(tra,2); tra=floor(tra/2); end end end if(y+blocksize)>=Nc y=1;x=x+blocksize; else y=y+blocksize; end end Z1=imread('d:/2.bmp'); figure, subplot(2,2,1);imshow(Z1,[]);title('原图'); subplot(2,2,2);imshow(ZM,[]);title('嵌入水印后的图象'); %进行图像攻击 ZB=double(imread('d:/1.bmp')); ZM(65:136,209:256)=ZB(209:280,289:336); ZA=uint8(ZM); subplot(2,2,3); imshow(ZA,[]);title('攻击后图像'); imwrite(ZA,'watermarked.bmp','bmp'); %水印的提取和改动识别 Z=double(imread('watermarked.bmp')); Mc=size(Z,1);%图像高度 Nc=size(Z,2);%图像宽度 c=Mc/8;d=Nc/8;m=c*d; blocksize=8; %将图像分为 8x8 块 %设定信息提取的矩阵 B=[ 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0]; ZM=floor(Z./2)*2; ZX=Z-ZM; x=1;y=1; for(kk=1:m) [q,u]=qr(ZM(x:x+blocksize-1,y:y+blocksize-1)); %qr分解 tra=floor(trace(abs(u))*10000); k=0; tra1=0; trae=tra; for ii=1:blocksize for jj=1:blocksize if (B(ii,jj)==1&tra~=0) tra1=ZX(x+ii-1,y+jj-1)*2^k+tra1; k=k+1; trae=floor(trae/2); end end end if(tra1~=tra) %Z(x:x+blocksize-1,y:y+blocksize-1)=Z(x:x+blocksize-1,y:y+blocksize-1); %else Z(x:x+blocksize-1,y:y+blocksize-1)=1; end if(y+blocksize)>=Nc y=1;x=x+blocksize; else y=y+blocksize; end end ZA=uint8(Z); subplot(2,2,4);imshow(ZA,[]);title('识别改动的图像'); 这个是我的数字水印嵌入和提取的算法,但是不能抵抗精密的拼贴攻击。翻阅论文,给出下面的改进算法,但我不知道具体怎么编写,自己编写总是出错,请指教。 改进算法: Bs=blocksize; x=9;y=9; for(kk=1:m) mean=mean2(ZM(y-4:y+Bs-1+4,x-4:x+Bs-1+4)); mean=mod(floor(mean*10),10); meann=mean; i=0; while (meann~=0) ZM(y+Bs-1,x+Bs-4+i)=ZM(y+Bs-1,x+Bs-4+i)+mod(meann,2); meann=floor(meann/2); i=i+1; end if (x+2*Bs)>=Nc x=9;y=y+Bs; else x=x+Bs; end end |
请高手帮忙指点。
还想请教个问题,如果我想把篡改的部分用红色或其他颜色标记出来,该怎么做。 谢谢了! |
所有时间均为北京时间。现在的时间是 12:34。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.