Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-06-09, 01:44   #1
panhao1102
初级会员
 
注册日期: 2008-04-17
年龄: 38
帖子: 2
声望力: 0
panhao1102 正向着好的方向发展
默认 求助脆弱水印问题(请高手指点)

%用矩阵分解法嵌入数字水印
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
panhao1102 当前离线   回复时引用此帖
旧 2008-06-09, 01:47   #2
panhao1102
初级会员
 
注册日期: 2008-04-17
年龄: 38
帖子: 2
声望力: 0
panhao1102 正向着好的方向发展
默认

请高手帮忙指点。
还想请教个问题,如果我想把篡改的部分用红色或其他颜色标记出来,该怎么做。
谢谢了!
panhao1102 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
请问“去噪”和“增强”步骤是二值化之前还是之后呢? 天外飞仙 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


所有时间均为北京时间。现在的时间是 09:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.