Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-04-17
年龄: 38
帖子: 2
声望力: 0 ![]() |
![]()
%用矩阵分解法嵌入数字水印
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 |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
请问“去噪”和“增强”步骤是二值化之前还是之后呢? | 天外飞仙 | MATLAB论坛 | 0 | 2008-09-13 20:24 |
[讨论]记录留存在你心目中的漫画片 | dnping | 学术科研 | 7 | 2008-05-31 19:13 |
【求助】图象特征区域提取 | erkun | MATLAB论坛 | 3 | 2008-04-23 15:57 |
[求助]matlab画曲面图的自变量取值问题 | 心际依然 | MATLAB论坛 | 5 | 2008-04-20 17:18 |
[求助]请教用sovle函数求解带参数的非线性方程问题 | sohot | MATLAB论坛 | 0 | 2008-04-01 23:17 |