【正文】
(BW)。Title(39。原始圖像邊緣圖39。)。%嵌入水印l=1。k=1。for m=1:blocknofor n=1:blockno x=(m1)*block+1。 y=(n1)*block+1。%算出每格圖像的坐標(biāo)(x,y),block=8,8*8的圖像小格 block_dct1=H(x:x+block1,y:y+block1)。%取原始圖像小格中的像素點(diǎn)到block_dct1矩陣中。block_dct1=dct2(block_dct1)。%對二維數(shù)組進(jìn)行離散余弦變換。dct是有損壓縮如jpeg使用的技術(shù)。Dct是可逆的運(yùn)算 BW_8_8=BW(x:x+block1,y:y+block1)。%得到邊界矩陣。 if m=1|n=1 T=0。 else T=sum(BW_8_8)。 T=sum(T)。 end if TT1 Alpha=Alpha2。 %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k))。 if l=(InfoStrSize*8) block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*array(l))。 l=l+1。 end else Alpha=Alpha1。 % block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k))。 end Block_dct=idct2(block_dct1)。 D(x:x+block1,y:y+block1)=Block_dct。 k=k+1。endend%顯示嵌入水印后的圖像subplot(3,2,4)。imshow(D,[])。title(39。嵌入水印圖像39。)%保存該圖像D=uint8(D)。imwrite(D,39。39。)。2:%提取水印 D=imread(39。39。)。 D=double(D)。I=imread(39。39。)。I=double(I)。array2=zeros(1,InfoStrSize*8)。K=1。l=1。for m=1:blocknofor n=1:blockno x=(m1)*block+1。 y=(n1)*block+1。%算出每格圖像的坐標(biāo)(x,y),block=8,8*8的圖像小格 block_dct1=I(x:x+block1,y:y+block1)。%取原始圖像小格中的像素點(diǎn)到block_dct1矩陣中。 block_dct2=D(x:x+block1,y:y+block1)。Block_dct1=dct2(block_dct1)。%對二維數(shù)組進(jìn)行離散余弦變換。dct是有損壓縮如jpeg使用的技術(shù)。Dct是可逆的運(yùn)算Block_dct2=dct2(block_dct2)。 BW_8_8=BW(x:x+block1,y:y+block1)。%得到邊界矩陣。 if m=1|n=1 T=0。 else T=sum(BW_8_8)。 T=sum(T)。 end if TT1 Alpha=Alpha2。 %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k))。 if l=(InfoStrSize*8) tmp=(Block_dct2(1,1)/Block_dct1(1,1)1)。 tmp=tmp/Alpha。 tmp2=round(tmp)。 array2(l)=double(tmp2)。 l=l+1。 end else Alpha= Alpha1。 %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k))。 end k=k+1。endendsubplot(3,2,5)。plot(array2)。title(39。提取水印39。)。extractedInfo=zeros(InfoStrSize,1)。for m=1:InfoStrSizeinfochar=0。for n=1:8 if array2(8*(m1)+n)==1 infochar=infochar+bitset(0,n,1)。 endendextractedInfo(m)=infochar+extractedInfo(m)。endresultStr=char(extractedInfo)。subplot(3,2,6)。plot(array2)。r=Arnold(w0,row,colum,times) for k=1:times for i=1:row for j=1:colum i1=i+j。 j1=i+2*j。 if i1row i1=mod(i1,row)。 end if j1colum j1=mod(j1,colum)。 end if i1= =0 i1=row。 end if j1= =0 j1=colum。 end w1(i1,j1)=w0(i,j)。 end end w0=w1。end r=w0。%提取水印for p=1:size/Bfor q=1:size/Bx=(p1)*B+1。 y=(q1)*B+1。if (I_W(x,y)P(x,y))0F(p,q)=1。elseF(p,q)=0。endendendfigure(5)。 imshow(F,[])。 title(39。提取出的水印39。)。%%攻擊實(shí)驗(yàn)disp(39。input you choice according to the following image processing operation:39。)。disp(39。0exit39。)。disp(39。1smoothing patterns39。)。%添加噪音disp(39。2adding uniorm noise 添加噪音39。)。 %濾波disp(39。3adding filter [10 10] 濾波39。)。%剪切disp(39。4cutting part of the image 剪切39。)。%壓縮disp(39。510 quality JPEG pressing 壓縮39。)。 %旋轉(zhuǎn)45度disp(39。6rotate 45 旋轉(zhuǎn)39。)。 %d=input(39。please input you choice(1,2,3,4,5,6):39。)。while d~=0switch d case 1watermark_detect(idctF1,Y1,I0,waterMark1)。case 2 WImage2=idctF1。 n