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:
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:
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:
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 end
merci d'avance!Code:
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