How to convert invisible watermark to visible watermark? Please help

2 次查看(过去 30 天)
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 个评论
Lester
Lester 2013-3-6
okay sir did that. There is this another query. What line of code should we add/remove in order to have the extracted image in the RGB format?
Currently we are getting the extracted image in the gray format.
clc;
clear all;
start_time=cputime;
blocksize=8;
file_name1='C:\Users\Public\Pictures\Sample Pictures\dct1_watermarked_circuit.jpg';
watermarked_image=(imread(file_name1));
cover_object = double(watermarked_image(:,:,1)); %red plane
Mw=size(watermarked_image,1);
Nw=size(watermarked_image,2);
max_message = floor(Mw/blocksize) * floor(Nw/blocksize); % floor rounds of the integer values
% max_message=Mw*Nw/(blocksize^2);
file_name2='C:\Users\Public\Pictures\Sample Pictures\tulips.jpg';
orig_watermark=imread(file_name2);
Mo=size(orig_watermark,1);
No=size(orig_watermark,2);
x=1;
y=1;
for (kk = 1:max_message)
dct_block=dct2(watermarked_image(y:y+blocksize-1,x:x+blocksize-1));
if dct_block(5,2) > dct_block(4,3)
message_vector(kk)=0;
else
message_vector(kk)=1;
end
if (x+blocksize) >= Nw
x=1;
y=y+blocksize;
else
x=x+blocksize;
end
end
message=reshape(message_vector(1:Mo*No),Mo,No);
elapsed_time=cputime-start_time,
subplot(212);imshow(message,[]);title('Recovered Message')
subplot(211);imshow(watermarked_image,[]);title('Watermarked Image')
Walter Roberson
Walter Roberson 2013-3-6
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.

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2013-3-6
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 个评论
Walter Roberson
Walter Roberson 2013-3-7
Ask the author of the code you found, or write the code yourself (as you were likely intended to do when you were assigned the project.)

请先登录,再进行评论。

更多回答(1 个)

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

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by