cor_recover.m
上传用户:haoweisi88
上传日期:2010-02-03
资源大小:1950k
文件大小:2k
源码类别:

图形图象

开发平台:

Matlab

  1. %Name: Chris Shoemaker
  2. %Course: EER-280 - Digital Watermarking
  3. %Project:  Threshold-Based Correlation using block processing in the spatial domain
  4. %           Watermark Recovery
  5. clear all;
  6. % save start time
  7. start_time=cputime;
  8. blocksize=16;       % set the size of the block in cover to be used for each bit in watermark
  9. % read in the watermarked object
  10. file_name='cor_watermarked.bmp';
  11. watermarked_image=double(imread(file_name));
  12. % determine size of watermarked image
  13. Mw=size(watermarked_image,1); %Height
  14. Nw=size(watermarked_image,2); %Width
  15. % determine maximum possible message size in object
  16. max_message=Mw*Nw/(blocksize^2);
  17. % read in original watermark
  18. file_name='_copyright.bmp';
  19. orig_watermark=double(imread(file_name));
  20. % determine size of original watermark
  21. Mo=size(orig_watermark,1); %Height
  22. No=size(orig_watermark,2); %Width
  23. % read in key for PN generator
  24. file_name='_key.bmp';
  25. key=double(imread(file_name))./256;
  26. % reset MATLAB's PN generator to state "key"
  27. rand('state',key);
  28. % generate the watermark equal to the size of one block
  29. pn_sequence=round(2*(rand(blocksize,blocksize)-0.5));
  30. % pad message out to maximum message size with ones
  31. message_vector=ones(No*Mo,1);
  32. % process the image in blocks
  33. % for each block determine it's correlation with base pn sequence
  34. x=1;
  35. y=1;
  36. for (kk = 1:length(message_vector))
  37.     % sets correlation to 1 when patterns are identical to avoid /0 errors
  38.     % otherwise calcluate correlation 
  39.     if (watermarked_image(y:y+blocksize-1,x:x+blocksize-1) == pn_sequence)
  40.         correlation(kk)=1;
  41.     else
  42.         correlation(kk)=corr2(watermarked_image(y:y+blocksize-1,x:x+blocksize-1),pn_sequence);
  43.     end
  44.     
  45.     % move on to next block. At and of row move to next row
  46.     if (x+blocksize) >= Nw
  47.         x=1;
  48.         y=y+blocksize;
  49.     else
  50.         x=x+blocksize;
  51.     end
  52. end
  53. % if correlation exceeds average correlation
  54. for kk = 1:length(correlation)
  55.     
  56.     if (correlation(kk) > mean(correlation(1:Mo*No)))
  57.         message_vector(kk)=0;
  58.     end
  59. end
  60. % reshape the message
  61. message=reshape(message_vector(1:Mo*No),Mo,No);
  62. % display processing time
  63. elapsed_time=cputime-start_time,
  64. % display the recovered message
  65. figure(2)
  66. imshow(message,[])
  67. title('Recovered Message')