Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

This is a dct code on watermark embedding. Please fix it

Asked by Lester

Lester

on 27 Feb 2013
Latest activity Commented on by Amanurdeep Ka

Amanurdeep Ka

on 11 Apr 2014
Accepted Answer by Walter Roberson

Walter Roberson

The error I'm encountering is this -->

Warning: Size vector should be a row vector with integer elements.
> In watermarkemb at 27
??? Index exceeds matrix dimensions.
Error in ==> watermarkemb at 36
    dct_block=dct2(cover_object(x:x+blocksize-1,y:y+blocksize-1));

This is the code -->

clc;
clear all;
start_time=cputime;
k=50;
blocksize=8;
file_name='scene.jpg';
cover_object=double(rgb2gray(imread(file_name)));
Mc=size(cover_object,1);	     
Nc=size(cover_object,2);	        
max_message=Mc*Nc/(blocksize^2);
file_name='fishy.jpg';
message=double(rgb2gray(imread(file_name)));
Mm=size(message,1);	    
Nm=size(message,2);	                
message=round(reshape(message,Mm*Nm,1)./256);
if (length(message) > max_message)
    error('Message too large to fit in Cover Object')
end
message_pad=ones(1,max_message);
message_pad(1:length(message))=message;
watermarked_image_r=cover_object;
x=1;
y=1;
for (kk = 1:length(message_pad))
      dct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1));
      if (message_pad(kk) == 0)
          if (dct_block(5,2) < dct_block(4,3))
                  temp=dct_block(4,3);
                  dct_block(4,3)=dct_block(5,2);
                  dct_block(5,2)=temp;
          end
      elseif (message_pad(kk) == 1)
          if (dct_block(5,2) >= dct_block(4,3))
                  temp=dct_block(4,3);
                  dct_block(4,3)=dct_block(5,2);
                  dct_block(5,2)=temp;
          end
      end
      if dct_block(5,2) > dct_block(4,3)
          if dct_block(5,2) - dct_block(4,3) < k
              dct_block(5,2)=dct_block(5,2)+(k/2);
              dct_block(4,3)=dct_block(4,3)-(k/2);            
          end
      else  
           if dct_block(4,3) - dct_block(5,2) < k
              dct_block(4,3)=dct_block(4,3)+(k/2);  
              dct_block(5,2)=dct_block(5,2)-(k/2);
          end
      end
      watermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block);    
      if (x+blocksize) >= Nc
          x=1;
          y=y+blocksize;
      else
          x=x+blocksize;
      end
  end
watermarked_image_int=uint8(watermarked_image);
imwrite(watermarked_image_int,'dct1_watermarked_circuit.jpg','jpg');
elapsed_time=cputime-start_time,
subplot(211);imshow(cover_object,[]);title('Original Image')
subplot(212);imshow(watermarked_image,[]);title('Watermarked Image')

0 Comments

Lester

Lester

Tags

2 Answers

Answer by Walter Roberson

Walter Roberson

on 27 Feb 2013
Accepted answer

Put in a breakpoint and check the value of max_message

19 Comments

Davinderjeet

Davinderjeet

on 25 May 2013

can you please suggest some websites for getting the code???

Davinderjeet

Davinderjeet

on 29 May 2013

walter roberson please if you could suggest some topic for thesis work or websites which could be of some help. thank you

Walter Roberson

Walter Roberson

Answer by Lester

Lester

on 27 Feb 2013

How do you go about embedding the watermark in the color planes? I didn't get you sir

3 Comments

Walter Roberson

Walter Roberson

on 27 Feb 2013

Currently you have

cover_object=double(rgb2gray(imread(file_name)));

Change that to

cover_image = imread(file_name);
cover_object = double(cover_image(:,:,1));  %red plane

Then after you have created watermarked_image but before you write it out,

watermarked_red = cast(watermarked_image, class(cover_image));
watermarked_image = cat(3, watermarked_red, cover_image(:,:,[2 3]));
Lester

Lester

on 27 Feb 2013

Thank you sir. It worked perfectly fine. You solved all my problems.

Amanurdeep Ka

Amanurdeep Ka

on 11 Apr 2014

hi, m also getting the same error "index exceeds matrix dimensions" in the above code , I have also made the changes told by Walter Roberson i.e.

Currently you have

cover_object=double(rgb2gray(imread(file_name)));

Change that to

cover_image = imread(file_name); cover_object = double(cover_image(:,:,1)); %red plane

Then after you have created watermarked_image but before you write it out,

watermarked_red = cast(watermarked_image, class(cover_image)); watermarked_image = cat(3, watermarked_red, cover_image(:,:,[2 3]));

BUT STILL GETTING THE SAME ERROR. CAN ANYBODY HELP ME.

Lester

Lester

Contact us