📄 test.m
字号:
imageSize=256;
blockSize=8;
numOfBlock=32;
image=imread('cameraman.tif');
image=double(image)/255;
fun=@dct2;
dctImage=blkproc(image,[8 8],fun);
markSize=64;
waterMark=imread('rice.bmp');
%the arnold transform
metrix=[1 1;1 2];
for i=1;5
for j=1:markSize
for k=1:markSize
tmp=[j;k];
tmp=metrix*tmp;
tmp=mod(tmp,markSize);
if(tmp(1)==0)
tmp(1)=markSize;
end
if(tmp(2)==0)
tmp(2)=markSize;
end
changedMark(tmp(1),tmp(2))=waterMark(j,k);
end
end
end
%put the waterMark into the image
deta=0.15
for i=1:numOfBlock
for j=1:numOfBlock
if (changedMark((i-1)*2+1,(j-1)*2+1)==0)
dctImage((i-1)*8+2,(j-1)*8+6)=(dctImage((i-1)*8+1,(j-1)*8+6)+dctImage((i-1)*8+2,(j-1)*8+5)....
+dctImage((i-1)*8+2,(j-1)*8+7)+dctImage((i-1)*8+3,(j-1)*8+6))/4-deta;
else
dctImage((i-1)*8+2,(j-1)*8+6)=(dctImage((i-1)*8+1,(j-1)*8+6)+dctImage((i-1)*8+2,(j-1)*8+5)...
+dctImage((i-1)*8+2,(j-1)*8+7)+dctImage((i-1)*8+3,(j-1)*8+6))/4+deta;
end
if (changedMark((i-1)*2+1,(j-1)*2+2)==0)
dctImage((i-1)*8+4,(j-1)*8+5)=(dctImage((i-1)*8+3,(j-1)*8+5)+dctImage((i-1)*8+5,(j-1)*8+5)...
+dctImage((i-1)*8+4,(j-1)*8+4)+dctImage((i-1)*8+4,(j-1)*8+6))/4-deta;
else
dctImage((i-1)*8+4,(j-1)*8+5)=(dctImage((i-1)*8+3,(j-1)*8+5)+dctImage((i-1)*8+5,(j-1)*8+5)...
+dctImage((i-1)*8+4,(j-1)*8+4)+dctImage((i-1)*8+4,(j-1)*8+6))/4+deta;
end
if (changedMark((i-1)*2+2,(j-1)*2+1)==0)
dctImage((i-1)*8+6,(j-1)*8+4)=(dctImage((i-1)*8+5,(j-1)*8+4)+dctImage((i-1)*8+7,(j-1)*8+4)...
+dctImage((i-1)*8+6,(j-1)*8+3)+dctImage((i-1)*8+6,(j-1)*8+5))/4-deta;
else
dctImage((i-1)*8+6,(j-1)*8+4)=(dctImage((i-1)*8+5,(j-1)*8+4)+dctImage((i-1)*8+7,(j-1)*8+4)...
+dctImage((i-1)*8+6,(j-1)*8+3)+dctImage((i-1)*8+6,(j-1)*8+5))/4+deta;
end
if(changedMark((i-1)*2+2,(j-1)*2+2)==0)
dctImage((i-1)*8+7,(j-1)*8+2)=(dctImage((i-1)*8+6,(j-1)*8+2)+dctImage((i-1)*8+8,(j-1)*8+2)...
+dctImage((i-1)*8+7,(j-1)*8+1)+dctImage((i-1)*8+7,(j-1)*8+3))/4-deta;
else
dctImage((i-1)*8+7,(j-1)*8+2)=(dctImage((i-1)*8+6,(j-1)*8+2)+dctImage((i-1)*8+8,(j-1)*8+2)...
+dctImage((i-1)*8+7,(j-1)*8+1)+dctImage((i-1)*8+7,(j-1)*8+3))/4+deta;
end
end
end
%idct2
fun=@idct2;
newImage=blkproc(dctImage,[8 8],fun);
%newImage=round(newImage);
imwrite(newImage,'newCameraMan.tif','tif');
imwrite(newImage,'cameraman_70.jpg','jpeg','Quality',70);
jpg70Image=imread('cameraman_70.jpg');
imwrite(newImage,'cameraman_50.jpg','jpeg','Quality',50);
jpg50Image=imread('cameraman_50.jpg');
imwrite(rot90(newImage,1),'cameraman_rot90.tif','tif');
rotate90Image=imread('cameraman_rot90.tif');
subplot(3,4,1);
imshow(image);
title('Original Image');
subplot(3,4,2);
imshow(waterMark);
title('Original watermark');
subplot(3,4,3);
imshow(newImage);
title('after inputting the waterMark');
pickedMark=getTheWaterMark(newImage,numOfBlock,markSize);
subplot(3,4,4);
imshow(pickedMark);
title('the waterMark picked out');
subplot(3,4,5);
imshow(jpg70Image);
title('compress for jpeg 70%');
pickedMark=getTheWaterMark(jpg70Image,numOfBlock,markSize);
subplot(3,4,6);
imshow(pickedMark);
title('watermark from 70% jpeg');
subplot(3,4,7);
imshow(jpg50Image);
title('compress for jpeg 50%');
pickedMark=getTheWaterMark(jpg50Image,numOfBlock,markSize);
subplot(3,4,8);
imshow(pickedMark);
title('watermark from 50% jpeg');
subplot(3,4,9);
imshow(rotate90Image);
title('rotate 90 degree');
pickedMark=getTheWaterMark(rotate90Image,numOfBlock,markSize);
subplot(3,4,10);
imshow(pickedMark);
title('watermark from image rotated 90 degree');
for i=1:imageSize
for j=1:imageSize/4
newImage(i,j)=255;
end
end
imwrite(newImage,'cameraman_cutToThirdFour.tif','tif');
thirdFourImage=imread('cameraman_cutToThirdFour.tif');
subplot(3,4,11);
imshow(thirdFourImage);
title('cut to 3/4');
pickedMark=getTheWaterMark(thirdFourImage,numOfBlock,markSize);
subplot(3,4,12);
imshow(pickedMark);
title('watermark from 3/4 of image');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -