Bonsoir,
j'ai développé une fonction d'insertion de la méthode RCM mais j'ai des bugs qui sortent après l'exécution sur matlab et ça dérange pour faire l'extraction du watermark après!
Aidez moi s'il vous plait pour trouver la faille!
Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 function insertionRCM global key; global img; global xc; xc=0; key=randperm(4096); keye=key(1:2:4096); keyi=key(2:2:4096); l=1; ii=1; water=zeros(2048,16); img=imread('lena512.bmp'); ss=img; taille=size(img); for i=1:8:taille(1,1) for j=1:8:taille(1,2) wt=genwtblk(i,j); taillew=length(wt); water(ii,1:taillew)=wt; ii=ii+1; end end water=water(keye,:); size(water) while l<=length(keyi) indice=keyi(l); indicei=fix((indice-1)/64)+1; indicej=mod(indice-1,64)*8+1; ta=size(water); ta=ta(1,2); wt=water(l,1:ta); mat=insertinblk(indicei,indicej,wt); img=mat; l=l+1; end x=0; for i=1:1:512 for j=1:1:512 if ss(i,j)~=mat(i,j) x=x+1; end end end figure,imshow(img); figure,imshow(mat); imwrite(mat,'lenatest.bmp');
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function wt=genwtblk(il,ic) global img; k=0; wt(1)=0; global xc for i=il:1:il+7 for j=ic:2:ic+6 if NonAp(img(i,j),img(i,j+1)),%(x,y) n'appartient pas à Dc; xc=xc+1; [i,j] k=k+1; wt(k)= mod(img(i,j),2); end end end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function s=NonAp(x,y) s=false; p1=2*x- y; p2=2*y- x; if ((p1<1|p1>255|p2<1|p2>255)); s= true; else if odd(x,y) if p1==1 | p1==255 | p2==1 | p2==255 s=true; end end end endmerci d'avance!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 function mat=insertinblk(ii,ij,wt) global img; mat=img; count=0; s=size(wt); s=s(1,2); k=0; for i=ii:1:ii+7, for j=ij:2:ij+6, if NonAp(img(i,j),img(i,j+1)),%n'appartient pas àDc; mat(i,j)=img(i,j)-1;%forcer le lsb de x à 0; else %appartient à Dc; k=k+1; if(k<= s), if(odd(img(i,j),img(i,j+1))), %(x,y)impair et appartient à Dc; mat(i,j)=img(i,j)-1;%mettre le lsb de x à 0; %stocker le bit dans le lsb de y; if(wt(1,k)==0), mat(i,j+1)= img(i,j+1)-1; end else %pas les 2impairs; mat(i,j)=2*img(i,j) - img(i,j+1); mat(i,j+1)=2*img(i,j+1) - img(i,j); count=count+1; %mettre le lsb de x à 1; mat(i,j)=set1(img(i,j)); %stoker bit dans le lsb de y; if (wt(1,k)==1), mat(i,j+1)=set1(img(i,j+1)); else mat(i,j+1)=set0(img(i,j+1)); end end end end end end
Partager