- Stated an ambiguous question in the heading
- Pasted a large chunk of code that nobody can run. (we don't have your file_name1, file_name2, etc)
- Pasted your code unformatted (I think Walter has come around and cleaned it up each time)
- Provided no further text clarifying your question
- Provided no further information about what is actually wrong (error messages etc)
How to convert invisible watermark to visible watermark? Please help
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Walter Roberson
el 6 de Mzo. de 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.
Respuesta aceptada
Walter Roberson
el 6 de Mzo. de 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 comentarios
Walter Roberson
el 7 de Mzo. de 2013
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.)
Más respuestas (1)
Image Analyst
el 4 de Mzo. de 2013
Why don't you just take the average of the two images?
0 comentarios
Ver también
Categorías
Más información sobre Image Processing Toolbox en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!