⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.asv

📁 利用matlab将一个图片作为水印插入另一个图片
💻 ASV
字号:
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;4
    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.2
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;
 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 + -