这是一个非盲水印利用小波低频系数来实现的水印算法,它的提取过程需要原图像。应该是设计时考虑了一定鲁棒性的。
嵌入部分:
for i=1:N %·····这里开始什么意思
for j=1:N
if imagew(i,j)==0
else
a=1;
end
Ca(i,j)=cas(i,j)*(1+a*0.03);%····到这里什么意思 求解
end
end
水印 imagew应该是NxN的2值图像,N=size(image1,1)/4。一个bit一个bit的将水印嵌入到原图的第2级LL小波系数里,如果嵌入信息为0,则2级LL小波系数cas(i,j)不变,否则该小波系数变为cas(i,j)=cas(i,j)*1.03。
话说回来,程序应该是贴错了吧?cas的size只有ca的1/4啊。而且看提取流程,这里应当只是改变2级LL系数而已。当然,如果Ca和ca不同,那么应该是在前面加一句 Ca=zeros(size(cas));更好。
提取部分:
for p=1:N %····还有这里开始
for q=1:N
a=caas(p,q)/cas(p,q)-1;
if a<0
W(p,q)=0;
else
W(p,q)=255; %·····到这里,是什么意思求解
end
end
end
和嵌入部分实际上是互逆的,如果嵌入水印后图像(imaged)的某处2级LL小波系数值比原始图像(image1)的系数大,那么很可能是因为在嵌入步骤做了cas(i,j)*1.03的处理(当然还有可能是因为受到攻击),也就是该处水印嵌入值为1,否则嵌入值为0。
程序用0和255来表示0和1,只是为了显示灰度图时方便,不建议这样使用。最好还是
if a<0
W(p,q)=0;
else
W(p,q)=1;
end