Watermark Crypt
Transcript of Watermark Crypt
-
8/12/2019 Watermark Crypt
1/3
%Name: Chris Shoemaker%Course: EER-280 - Digital Watermarking%Project: Threshold-Based Correlation in DCT mid-band% Uses two PN sequences; one for a "0" and another for a "1"% Watermark Embeding
clear all;
% save start timestart_time=cputime;
k=20; % set gain factor for embedingblocksize=8; % set the dct blocksize
midband=[ 0,0,0,1,1,1,1,0; % defines the mid-band frequencies of an 8x8dct
0,0,1,1,1,1,0,0;0,1,1,1,1,0,0,0;1,1,1,1,0,0,0,0;
1,1,1,0,0,0,0,0;1,1,0,0,0,0,0,0;1,0,0,0,0,0,0,0;0,0,0,0,0,0,0,0 ];
% read in the cover objectfile_name='cameraman.tif';cover_object=double(imread(file_name));
% determine size of cover imageMc=size(cover_object,1); %HeightNc=size(cover_object,2); %Width
% determine maximum message size based on cover object, and blocksizemax_message=Mc*Nc/(blocksize^2);
% read in the message imagefile_name='rice.png';message=double(imread(file_name));Mm=size(message,1); %HeightNm=size(message,2); %Width
% reshape the message to a vectormessage=round(reshape(message,Mm*Nm,1)./256);
% check that the message isn't too large for cover
if(length(message) > max_message)error('Message too large to fit in Cover Object')
end
% pad the message out to the maximum message size with ones'smessage_vector=ones(1,max_message);message_vector(1:length(message))=message;
% generate shell of watermarked image
-
8/12/2019 Watermark Crypt
2/3
watermarked_image=cover_object;
% read in key for PN generatorfile_name='_key.bmp';key=double(imread(file_name))./256;
% reset MATLAB's PN generator to state "key"rand('state',key);
% generate PN sequencepn_sequence_zero=round(2*(rand(1,sum(sum(midband)))-0.5));
% process the image in blocksx=1;y=1;for(kk = 1:length(message_vector))
% transform block using DCTdct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1));
% if message bit contains zero then embed pn_sequence_zero into the mid-band
% componants of the dct_blockll=1;if(message_vector(kk)==0)
forii=1:blocksizeforjj=1:blocksize
if(midband(jj,ii)==1)dct_block(jj,ii)=dct_block(jj,ii)+k*pn_sequence_zero(ll);ll=ll+1;
endend
endend
% transform block back into spatial domainwatermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block);
% move on to next block. At and of row move to next rowif(x+blocksize) >= Nc
x=1;y=y+blocksize;
elsex=x+blocksize;
endend
% convert to uint8 and write the watermarked image out to a filewatermarked_image_int=uint8(watermarked_image);imwrite(watermarked_image_int,'dct2_watermarked.bmp','bmp');
% display processing timeelapsed_time=cputime-start_time,
% display psnr of watermarked image
-
8/12/2019 Watermark Crypt
3/3
psnr=psnr(cover_object,watermarked_image,Nc,Mc),
% display watermarked imagefigure(1)imshow(watermarked_image,[])title('Watermarked Image')