How to convert invisible watermark to visible watermark? Please help

11 views (last 30 days)
clc;
clear all;
start_time=cputime;
k=50;
blocksize=8;
file_name1='C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg';
%cover_object=double(rgb2gray(imread(file_name1)));
cover_image = imread(file_name1);
cover_object = double(cover_image(:,:,1)); %red plane
Mc=size(cover_object,1);
Nc=size(cover_object,2);
max_message = floor(Mc/blocksize) * floor(Nc/blocksize);
%max_message=Mc*Nc/(blocksize^2);
file_name2='C:\Users\Public\Pictures\Sample Pictures\desert1.jpg';
message=double(rgb2gray(imread(file_name2)));
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);
watermarked_red = cast(watermarked_image, class(cover_image));
watermarked_image = cat(3, watermarked_red, cover_image(:,:,[2 3]));
imwrite(watermarked_image,'C:\Users\Public\Pictures\Sample Pictures\dct1_watermarked_circuit.jpg','jpg');
elapsed_time=cputime-start_time,
subplot(2,1,1);imshow(cover_image,[]);title('Original Image')
subplot(2,1,2);imshow(watermarked_image,[]);title('Watermarked Image')
  6 Comments
Walter Roberson
Walter Roberson on 6 Mar 2013
We went through this earlier. After you have watermarked the red plane, cat(3) it with the original G and B planes in order to get a colour image out.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 6 Mar 2013
Instead of affecting the least significant bit, affect a higher bit. Keep going for higher bits until you find the one that makes the watermark acceptably visible.
  5 Comments

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 4 Mar 2013
Why don't you just take the average of the two images?

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!