zunny 发表于 2006-4-19 13:58

[求助]大家帮我看看这段程序错在哪?

<P>程序如下:<BR>%读入二值水印图像,变换化为一个一维序列<BR>Water=imread('D:\My Essay\草稿\H','bmp');<BR>Encry=reshape(Water,1,1024);</P>
<P><BR>%读入载体图像Lena<BR>Lena=imread('D:\My Essay\草稿\Lena','bmp');<BR>I=im2double(Lena);</P>
<P>%水印的嵌入,DCT变换<BR>k=0;<BR>for i=1:32<BR>    for j=1:32<BR>    x=(i-1)*8+1;<BR>    y=(j-1)*8+1;<BR>    BLOCK=I(x:x+8-1,y:y+8-1);<BR>    BLOCK_dct=dct2(BLOCK);            %图像8、8分块然后DCT<BR>    BLOCK_zig=zigzag(BLOCK_dct);   %这个zigzag函数为自己编写,使之之字形排列,经验证无误的。同样下面的izigzag是把之字形后的恢复,也无误。<BR>    BLOCK_wtrz=BLOCK_zig;<BR>    k=k+1;<BR>    if Encry(k)==0<BR>          e=-1;<BR>    elsee=1;<BR>    end<BR>    BLOCK_wtrz(2)=BLOCK_zig(2)*(1+0.01*e);<BR>    BLOCK_wtr=izigzag(BLOCK_wtrz);<BR>    BLOCK_wtrd=idct2(BLOCK_wtr);<BR>    Iw(x:x+8-1,y:y+8-1)=BLOCK_wtrd;<BR>    end<BR>end</P>
<P><BR>%水印析出<BR>count=0;<BR>for i=1:32<BR>    for j=1:32<BR>      count=count+1;<BR>      x=(i-1)*8+1;<BR>      y=(j-1)*8+1;    <BR>      iBLOCK=I(x:x+8-1,y:y+8-1);<BR>      iBLOCKw=Iw(x:x+8-1,y:y+8-1);<BR>      iBLOCK_dct=dct2(iBLOCK);<BR>      iBLOCKw_dct=dct2(iBLOCKw);<BR>      iBLOCK_zig=zigzag(iBLOCK_dct);<BR>      iBLOCKw_zig=zigzag(iBLOCKw_dct);<BR>      if iBLOCKw_zig(2)&lt;iBLOCK_zig(2)<BR>         Decry(count)=0;<BR>      else<BR>         Decry(count)=1;<BR>      end<BR>   end<BR>end<BR><BR>理论上,应该是Encry(水印数据)和Decry(从图中析出后的水印数据)相等的,可实际执行之后,二者变化很大。<BR>有一些现象,如Encry是double array;而Decry却为logical array.<BR>请问,怎么改动才可使两者一样呢。</P>

zunny 发表于 2006-4-19 16:38

怎么没有人回答啊,随便说点看法也好啊,起码会有点灵感出来

zunny 发表于 2006-4-21 11:39

我再把它顶起来,看看是否有人可以给出解决方案阿

tracy_dan 发表于 2006-4-21 13:01

太难了

happy 发表于 2006-4-21 22:11

回复:(zunny)[求助]大家帮我看看这段程序错在哪?

能否把你的图片传上来
页: [1]
查看完整版本: [求助]大家帮我看看这段程序错在哪?