Bonjour,
j'ai écris deux programmes sous matlab, le premier effectue un tatouage avec la dct et le deuxième effectue la récupération de la mark (tatouage) de l'image tatouée.
ces deux programmes sont longs et je veux les transformer en fonction afin de les utiliser dans d'autre programme. Veuiller m'aider à les transfomer s'il vous plait le plus vite possible.
Voici le programme qui effectue le tatouage:
clear all;
% save start time
start_time=cputime;
k=50; % set gain factor for embeding
blocksize=8; % set the dct blocksize
midband=[ 0,0,0,1,1,1,1,0; % defines the mid-band frequencies of an 8x8 dct
0,0,1,1,1,1,0,0;
0,1,1,1,1,0,0,0;
1,1,1,1,0,0,0,0;
1,1,1,0,0,0,0,0;
1,1,0,0,0,0,0,0;
1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0 ];
% read in the cover object
file_name='Lena_512x512_Grey.bmp';
cover_object=double(imread(file_name));
% display original image
figure(1)
imshow(cover_object)
title('original Image')
% process the image in blocks
x=1; % col
y=1; % lign
for (kk = 1:length(message_vector))
% transform block using DCT
dct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1));
% if message bit contains zero then embed pn_sequence_zero into the mid-band
% componants of the dct_block
ll=1;
if (message_vector(kk)==0)
for ii=1:blocksize
for jj=1:blocksize
if (midband(ii,jj)==1)
dct_block(ii,jj)=dct_block(ii,jj)+k*pn_sequence_zero(ll);
ll=ll+1;
end
end
end
end
% transform block back into spatial domain
watermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block);
% move on to next block. At end of row move to next row
if (y+blocksize) >= Mc
y=1;
x=x+blocksize;
else
y=y+blocksize;
end
end
% convert to uint8 and write the watermarked image out to a file
watermarked_image_int=uint8(watermarked_image);
imwrite(watermarked_image_int,'dct2_watermarked.bmp','bmp');
% display processing time
elapsed_time=cputime-start_time,
% process the image in blocks
x=1;
y=1;
for (kk = 1:max_message)
% transform block using DCT
dct_block=dct2(watermarked_image(y:y+blocksize-1,x:x+blocksize-1));
% extract the middle band coeffcients
ll=1;
for ii=1:blocksize
for jj=1:blocksize
if (midband(ii,jj)==1)
sequence(ll)=dct_block(ii,jj);
ll=ll+1;
end
end
end
% calculate the correlation of the middle band sequence to pn sequence
correlation(kk)=corr2(pn_sequence_zero,sequence);
% move on to next block. At and of row move to next row
if (y+blocksize) >= Mw
y=1;
x=x+blocksize;
else
y=y+blocksize;
end
end
% if correlation exceeds threshold, set bit to '0', otherwise '1'
for (kk=1:Mo*No)
if (correlation(kk) >= mean(correlation(1:Mo*No)))
message_vector(kk)=0;
else
message_vector(kk)=1;
end
end
% reshape the embeded message
message=reshape(message_vector(1:Mo*No),Mo,No);
% display processing time
elapsed_time=cputime-start_time,
function sortie = nom_de_la_fonction (paramètre1, paramètre2, ...)
... ;
... ;
sortie = quelque_chose;
end
Elle s'utilise comme ça:
variable = nom_de_la_fonction(params);
A noter que si on désire écrire ses fonctions dans le même fichier que le code appelant, il faut également englober le code principal dans une fonction du type:
function nom_du_fichier()
... ;
appel de fonctions;
...;
end