je travaille sur le tatouage numérique des images en gray et pour cela j'utilise une autre image (noir et blanc ou bien gray). J'ai fais une combinaison entre la fft et svd. Dans la phase d'insertion du tatouage tous fonctionne et j'obtiens les résultats normale mais la phase d'extraction du tatouage j'obtient pas la marque que j'ai insérée. Veuillez me donner un coup de main s'il vous plait!!
Note: l'mage originale et la marque sont de même dimensions.
Voila le programme (sous Matlab):
%%%%%%%phase d'insertion du tatouage%%%%%%%%%%%%
clear all
clc
start_time = cputime;
blocksize = 16;
%lecture de l'image originale
org = double(imread('lena.bmp'));
%LECTURE DU TATOUAGE
water = double(imread('copyright512.bmp'));
%DETERNINATION DES DIMENTIONS DE L'IMAGE ORIGINALE
[mm,nn] = size(org);
%nombre de blocs dans une ligne
m = mm/blocksize;
%nombre de blocs dans une colomne
n = nn/blocksize;
for i=1:n
for j=1:n
%application de la dft2 sur des blocs 16x16 de l'image originale
dft_org = fft2(org(blocksize*(i-1)+1:blocksize*i,blocksize*(j-1)+1:blocksize*j));
%application de la svd sur les blocs 16x16 de l'image originale
[u,s,v] = svd(dft_org);
%application de la dft2 sur des blocs 16x16 de l'image du tatouage
dft_water = fft2(water(blocksize*(i-1)+1:blocksize*i,blocksize*(j-1)+1:blocksize*j));
%application de la svd sur les blocs 8x8 de l'image du tatouage
[uu,ss,vv] = svd(dft_water);
%l'ajout des éléments du tatouage à l'image originale en utilisant
%les vecteurs v de chacune des images
S = s + 0.01*ss;
%application de la svd inverse
W = u*S*v';
%application de la dft inverse
WW = ifft2(W);
WW = abs(WW);
%reconstitution de l'image===>image tatouée
watermarked_image(blocksize*(i-1)+1:blocksize*i,(j-1)*blocksize+1:blocksize*j)= round(uint8(WW));
end
end
%%%%%%%%%%%%%%%phase d'extraction du tatouage%%%%%%%%%%%%%
clear all
clc
start_time = cputime;
blocksize = 16;
k = 0.01;
%lecture de l'image originale
org = double(imread('lena.bmp'));
%lécture de l'image tatouée
watermarked = double(imread('watermarked_fft_svd.bmp'));
%lécture du tatouage
water = double(imread('copyright512.bmp'));
%determination des dimentions de l'image originale et le tatouage
[mm,nn] = size(org);
%nombre de block 16x16 dans l'image originale
m = mm/16;
n = nn/16;
for i = 1:m
for j = 1:n
% appliquation de la fft2 sur l'image tatouée
dft_watermarked = fft2(watermarked(blocksize*(i-1)+1:blocksize*i,blocksize*(j- 1)+1:blocksize*j));
%application de la svd sur la fft de l'image tatouée
[u,s,v] = svd(dft_watermarked);
%application de la fft sur l'image originale
dft_org = fft2(org(blocksize*(i-1)+1:blocksize*i,blocksize*(j-1)+1:blocksize*j));
%application dela svd sur la fft de l'image originale
[uu,ss,vv] = svd(dft_org);
%application de la fft sur le tatouage
dft_water = fft2(water(blocksize*(i-1)+1:blocksize*i,blocksize*(j-1)+1:blocksize*j));
%application dela svd sur la fft du tatouage original
[uuu,sss,vvv] = svd(dft_water);
%récupération des matrices du tatouage
sw = (s-ss)/k;
%récupération du tatouage dans le domaine fréquentiel(application
%de la svd inverse)
ww = uuu*sw*vvv';
%récupération du tatouage (application de la fft inverse===>domaine
%spacial)
w = ifft2(ww);
w = abs(w);
W(blocksize*(i-1)+1:blocksize*i,blocksize*(j-1)+1:blocksize*j) = (w);
end
end