麻烦帮我解释下matlab数字水印程序这是所有的程序:M=256; N=32; K=8; I=zeros(M,M); J=zeros(N,N); BLOCK=zeros(K,K);subplot(1,8,2); J=imread('C:\new\3.jpg'); imshow(J); title('水印图像'); subplot(1,3,2); I=imread('C:\new\2.jpg');

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/18 13:25:14
麻烦帮我解释下matlab数字水印程序这是所有的程序:M=256; N=32; K=8; I=zeros(M,M); J=zeros(N,N); BLOCK=zeros(K,K);subplot(1,8,2); J=imread('C:\new\3.jpg'); imshow(J); title('水印图像'); subplot(1,3,2); I=imread('C:\new\2.jpg');
xVOW"G*ssVsAlB(yjNl f]QK_4;@t3 afO9$Cwuկ~U=l[R!#m;)A_tŷD^oRũZtUY8!U#\8]%%xi"Zl-Ͽv$^䵸"-V֢M#S~߲867lտ9m1X #߬m0+~qx[=,' b9:XԇE,FQ?f2D+t<=,>-Jv>|B}fQ0$&w$qݘ"3 ;ښ٢,ulؕ b[$%>i_BClBnzChYm;q\3Naxa@p#E&ɥ`|5_0* r׭60cCPS  ͺ& [/qM6Uigs_.gHI:Rj" Ta+qn{FWJZ wkoq8P`,ZJ U?/.U45f`Ñ(s1I] Z6?p1LZu?n{`>%|(xwaϐ r9c#A<6[J4ıѰo rzІJV/Rn `Dr9gF2``z5/ˎjWISTY vLAuhW.aP୩D>k\l)]V!Dt(4` ;b&w~ U9yQz8QT4#^E@ lԴID7ܢb 8)fU V_9F ~"W6":kJjhԕD!'5b0"q!NV"@GSk2X1FQZΕڹ"_ {)}3+|=|2 ;'U|v

麻烦帮我解释下matlab数字水印程序这是所有的程序:M=256; N=32; K=8; I=zeros(M,M); J=zeros(N,N); BLOCK=zeros(K,K);subplot(1,8,2); J=imread('C:\new\3.jpg'); imshow(J); title('水印图像'); subplot(1,3,2); I=imread('C:\new\2.jpg');
麻烦帮我解释下matlab数字水印程序
这是所有的程序:
M=256; N=32; K=8; I=zeros(M,M); J=zeros(N,N);
BLOCK=zeros(K,K);
subplot(1,8,2); J=imread('C:\new\3.jpg'); imshow(J); title('水印图像'); subplot(1,3,2); I=imread('C:\new\2.jpg'); imshow(I); title('原始图像');
tem=1;
for p=1:N
for q=1:N
x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK=I(x:x+K-1,y:y+K-1);
BLOCK=dct2(BLOCK);
if J(p,q)==0
a=-1;
else
a=1;
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01);
BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
subplot(1,3,3);
imshow(I); title('嵌入水印后的图像'); imwrite(I,'C:\new\4.bmp');
麻烦主要解释下这几段:
tem=1;
for p=1:N
for q=1:N
x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK=I(x:x+K-1,y:y+K-1);
BLOCK=dct2(BLOCK);
if J(p,q)==0
a=-1;
else
a=1;
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01);
BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
麻烦帮解释下上面的主要几段

麻烦帮我解释下matlab数字水印程序这是所有的程序:M=256; N=32; K=8; I=zeros(M,M); J=zeros(N,N); BLOCK=zeros(K,K);subplot(1,8,2); J=imread('C:\new\3.jpg'); imshow(J); title('水印图像'); subplot(1,3,2); I=imread('C:\new\2.jpg');
对256*256大小的图像进行8*8DCT分块,就是把图像分成32*32个8*8大小的图像块,
for p=1:N
for q=1:N
x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK=I(x:x+K-1,y:y+K-1); 这一部分程序就是对图像进行分块,每个块用BLOCK表示,
BLOCK=dct2(BLOCK); 是对每块进行DCT变换,这时候的BLOCK表示的是每块经过DCT变换后的系数块
if J(p,q)==0
a=-1;
else
a=1;
end
这段程序是,J(p,q)代表的二值水印图像,二值水印图像的像素值只有0和1,所以if J(p,q)==0,a=-1 ,是如果水印图像像素值是0的话,让a=-1,当水印像素值为1的话,让a=1,我个人认为是为了提取时候好提取,因为下面的这句 BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01)是水印嵌入的一个公式,是将水印信息嵌入到每块的低频系数(2,1)里,0.01是嵌入强度,是个固定值,你可以自己取,取太大的话对图像影响比较大,效果不太好,嵌入水印后的图像不清晰了,a代表的是水印信息,这句就是个嵌入公式的套用,BLOCK=idct2(BLOCK); 这个是你开始对图像进行DCT变换了,现在需要反变换才能得到原来的图像,I(x:x+K-1,y:y+K-1)=BLOCK; 这句是用变换后的区域取代原先的区域,这样水印才算嵌入进去了,这是我的理解,希望说明白了