Problem in extracting the watermark ! !
    조회 수: 10 (최근 30일)
  
       이전 댓글 표시
    
Dear Sir,
I have an issue in extracting the watermark..
PROPOSED APPROACH :
1.Bring the image to frequency domain by applying the DCT
2.generate a watermark signal
3.Use the thousand largest coefficients of the original image to embed a watermark sequence of length 1000.
4.Coefficients are modified according to the stream bits of the message using the equation below,
 CAW = CA (1 + α Wi)
5.Extraction process – simply subtracting the original DCT coefficients from the watermarked image coefficients.
--------------------------------------------------------------------------------------------------------------------------------
*The code for embedding and extraction is as follows :*
______________________________________________________________
[fname pthname]=uigetfile('*.jpg;*.png;*.tif;*bmp','Select the Asset Image'); %select image 
        I=imread([pthname fname]);
      wmsz=1000; %watermark size
       I=I(:,:,1);%get the first color in case of RGB image 
      [r,c]=size(I); 
      D=dct2(I);%get DCT of the Asset 
      D_vec=reshape(D,1,r*c);%putting all DCT values in a vector 
      [D_vec_srt,Idx]=sort(abs(D_vec),'descend');%re-ordering all the absolute values 
      W=randn(1,wmsz);%generate a Gaussian spread spectrum noise to use as watermark signal 
      Idx2=Idx(2:wmsz+1);%choosing 1000 biggest values other than the DC value 
      %finding associated row-column order for vector values 
      IND=zeros(wmsz,2); 
      for k=1:wmsz 
      x=floor(Idx2(k)/r)+1;%associated culomn in the image 
      y=mod(Idx2(k),r);%associated row in the image 
      IND(k,1)=y; 
      IND(k,2)=x; 
      end 
      D_w=D; 
      for k=1:wmsz 
      %insert the WM signal into the DCT values 
      D_w(IND(k,1),IND(k,2))=D_w(IND(k,1),IND(k,2))+.1*D_w(IND(k,1),IND(k,2)).*W(k); 
      end 
      I2=idct2(D_w);%inverse DCT to produce the watermarked asset
      %The extraction process is simply subtracting the original DCT %coefficients from the 
      %watermarked image ones. The code can be written like below: 
      W2=[];%will contain watermark signal extracted from the image 
      for k=1:wmsz 
      W2=[W2(D_w(IND(k,1),IND(k,2))/D(IND(k,1),IND(k,2))-1)*10];%watermark extraction 
      end
_____________________________________________________________
The ERROR appears as follows in the 25th line :
??? Attempted to access W2(-0.0432565); index must be a positive integer or logical.
Error in ==> pooya at 29 
W2=[W2(D_w(IND(k,1),IND(k,2))/D(IND(k,1),IND(k,2))-1)*10];%watermark extraction
-----------------------------------------------------------
Please help
Thank you.
댓글 수: 1
  Walter Roberson
      
      
 2011년 12월 14일
				http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup
채택된 답변
  Eric Pahlke
      
 2011년 12월 15일
        There's a lot of code to sort through to figure out exactly what you need to fix, but what stands out is this line:
D_w(IND(k,1),IND(k,2))=D_w(IND(k,1),IND(k,2))+.1*D_w(IND(k,1),IND(k,2)).*W(k);
You're using D_w as an index on line 25(where you get the error), which means it has to be an integer.
However in the line above you're assigning fractional values to D_w:
    (D_w(stuff) = D_w(stuff) + .1*D_w(stuff)
Was the .1* intended to be a .* ?
댓글 수: 2
  Walter Roberson
      
      
 2012년 3월 17일
				You have a division in your subscript calculations, but you are expecting the result will always be an integer ??
추가 답변 (4개)
  mcc mscelec
 2012년 3월 18일
        댓글 수: 5
  Pardeep Kumar
 2013년 4월 15일
				
      편집: Walter Roberson
      
      
 2013년 4월 15일
  
			pls correct these errors
fw=D_w(IND(k,1),IND(k,2));
and
%WATERMARK EXTRACTION
W2=(2500000);
for k=1:wmsz
    W2(k)=((D_w(IND(k,1),IND(k,2))/D(IND(k,1),IND(k,2))-1)*10);
end
subplot(2,3,4),plot(W2),title('Extracted Watermark');
  mcc mscelec
 2012년 4월 14일
        댓글 수: 1
  Pardeep Kumar
 2013년 5월 26일
				sir ,there is error showing in the line store(k)=WM_detect(ext_wm,orig_wm);
ie.value assigned to variable store might be unused .
  Lester
 2013년 3월 2일
        sir ,
may i know what are the steps followed for embedding and extracting the image in DCT domain in the above code....???
댓글 수: 0
  Alaa Eleyan
 2013년 11월 22일
        the code is working properly..
You just need to add space between W2 and (D_w(....... in the for loop :
Wrong : W2=[W2(D_w(IND(k,1),IND(k,2))/D(IND(k,1),IND(k,2))-1)*10];
Correct : W2=[W2 (D_w(IND(k,1),IND(k,2))/D(IND(k,1),IND(k,2))-1)*10];
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!