天天看点

图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的

运行没错误,不过嵌入水印后的彩色图像显示不出来,压缩后的也是一片空白,大家帮帮忙,分析下原因,谢谢!

%定义常量

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 上传

图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的
图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的

运行结果

图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的

colorw.jpg

(10.25 KB, 下载次数: 342)

2009-3-28 18:21 上传

图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的
图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的

运行结果

图像处理matlab水印,Matlab图像处理中嵌入水印和压缩后怎么是白色的