运行没错误,不过嵌入水印后的彩色图像显示不出来,压缩后的也是一片空白,大家帮帮忙,分析下原因,谢谢!
%定义常量
size=256;block=8;blockno=size/block;LENGTH=size*size/64;
Alpha1=0.02; Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block);J= zeros(size,size);W= zeros(blockno,blockno);L= zeros(size,size);block1= zeros(size,size);block2= zeros(size,size);
%产生高斯水印,并显示水印信息;
randn('seed',10);mark=randn(1,LENGTH);
subplot(4,3,1);plot(mark);title('高斯水印');
%显示原图
subplot(4,3,2);I=imread('apple.jpg');
imshow(I);title('原图');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);%RGB分解
subplot(4,3,3);
imshow(R):title('R分量');
subplot(4,3,4);
imshow(G):title('G分量');
subplot(4,3,5);
imshow(B):title('B分量');
%显示prewitt为算子的边缘图
BW_B=edge(B,'prewitt');
BW_G=edge(G,'prewitt');
BW_R=edge(R,'prewitt');
subplot(4,3,6);imshow(BW_R);title('R边界');
subplot(4,3,7):imshow(BW_G);title('G边界');
subplot(4,3,8):imshow(BW_B);title('B边界');
BW(:,:,1)=BW_R;
BW(:,:,2)=BW_G;
BW(:,:,3)=BW_B;
subplot(4,3,9);imshow(BW);title('边界图');
%嵌入水印
k=1;
for m=1:blockno
for n=1:blockno
x=(m-1)*block+1; y=(n-1)*block+1;
block_dct1=R(x:x+block-1,y:y+block-1);
block_dct1=dct2(block_dct1);
BW_8_R=BW_R(x:x+block-1,y:y+block-1);
if m<=1|n<=1
T=0;
else
T=sum(BW_8_R); T=sum(T);
end
if T>T1
Alpha=Alpha2;
else
Alpha=Alpha1;
end
block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); block_dct1=idct2(block_dct1);
D_R(x:x+block-1,y:y+block-1)=block_dct1;
k=k+1;
end
end
%显示嵌入水印后的图像
subplot(4,3,10);imshow(D_R,[]);title('嵌入水印后的R图像');
imwrite(D_R,'e:\with mark R.bmp','bmp');
%嵌入水印
k=1;
for m=1:blockno
for n=1:blockno
x=(m-1)*block+1; y=(n-1)*block+1;
block_dct1=G(x:x+block-1,y:y+block-1);
block_dct1=dct2(block_dct1);
BW_8_G=BW_G(x:x+block-1,y:y+block-1);
if m<=1|n<=1
T=0;
else
T=sum(BW_8_G); T=sum(T);
end
if T>T1
Alpha=Alpha2;
else
Alpha=Alpha1;
end
block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); block_dct1=idct2(block_dct1);
D_G(x:x+block-1,y:y+block-1)=block_dct1;
k=k+1;
end
end
%显示嵌入水印后的图像
subplot(4,3,11);imshow(D_G,[]);title('嵌入水印后的G图像');
imwrite(D_G,'e:\with mark G.bmp','bmp');
%嵌入水印
k=1;
for m=1:blockno
for n=1:blockno
x=(m-1)*block+1; y=(n-1)*block+1;
block_dct1=B(x:x+block-1,y:y+block-1);
block_dct1=dct2(block_dct1);
BW_8_B=BW_B(x:x+block-1,y:y+block-1);
if m<=1|n<=1
T=0;
else
T=sum(BW_8_B); T=sum(T);
end
if T>T1
Alpha=Alpha2;
else
Alpha=Alpha1;
end
block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); block_dct1=idct2(block_dct1);
D_B(x:x+block-1,y:y+block-1)=block_dct1;
k=k+1;
end
end
%显示嵌入水印后的图像
subplot(4,3,12);imshow(D_B,[]);title('嵌入水印后的B图像');
imwrite(D_B,'e:\with mark B.bmp','bmp');
D(:,:,1)=D_R;
D(:,:,2)=D_G;
D(:,:,3)=D_B;
figure;
subplot(1,2,1);imshow(D,[]);title('嵌入水印后图像');
imwrite(D,'e:\with mark.bmp','bmp');
% 对入水印后图像进行JPEG压缩
L=imread( 'e:\with mark.bmp','bmp');
imwrite (L,'e:\JPEG attack.jpg','jpeg','Quality',70);
J=imread('e:\JPEG attack.jpg','jpeg');
subplot(1,2,2);
imshow(J);title('压缩攻击后的图像')
[本帖最后由 mooni 于 2009-3-28 19:44 编辑]
colorwa.jpg
(29.42 KB, 下载次数: 19)
2009-3-28 18:21 上传
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5yMxgDMxUmYmRjYycDMjZWN2QTOlJWZmNDN5MTNhJDN08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
运行结果
colorw.jpg
(10.25 KB, 下载次数: 342)
2009-3-28 18:21 上传
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5yMxgDMxUmYmRjYycDMjZWN2QTOlJWZmNDN5MTNhJDN08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
运行结果