octave:2> [y,depth,dim,mmm,nbfoto]=fr_load(10000); 5 images .pgm.oct trouvées file = 1alban.pgm.oct file = 1etienne.pgm.oct file = 1jerome.pgm.oct file = 1pean.pgm.oct file = 1seb.pgm.oct octave:3> who *** currently compiled functions: columns fr_load isempty mean printf reshape rows strcmp *** local user variables: depth dim mmm nbfoto y octave:4> dim dim = 100 100 octave:5> yc=y-ones(dim(1)*dim(2),nbfoto)*depth/2; octave:6> imshow(reshape(yc,dim(1),nbfoto*dim(2))) octave:7> % on obtient la galerie d'image normalisé octave:7> v=cov(yc) v = 730.18 461.69 534.37 570.64 507.03 461.69 739.02 457.75 449.85 425.81 534.37 457.75 674.33 528.90 488.97 570.64 449.85 528.90 804.26 598.13 507.03 425.81 488.97 598.13 917.86 octave:8> [b,l]=eig(v) b = 0.711632 0.273072 0.432817 0.171945 0.449573 0.054311 -0.197444 -0.631212 0.632283 0.399820 -0.669828 0.513801 0.252685 0.199108 0.428772 -0.190191 -0.761204 0.361913 -0.161553 0.476777 0.076079 0.207424 -0.468413 -0.710570 0.476305 l = 164.13221 0.00000 0.00000 0.00000 0.00000 0.00000 196.24860 0.00000 0.00000 0.00000 0.00000 0.00000 297.24862 0.00000 0.00000 0.00000 0.00000 0.00000 415.25215 0.00000 0.00000 0.00000 0.00000 0.00000 2792.76171 octave:9> t = yc*b; octave:10> imshow(reshape(t,dim(1),nbfoto*dim(2))) octave:11> who -variables *** local user variables: b depth dim l mmm nbfoto t v y yc octave:12> clear b;clear depth;clear dim;clear l;clear mmm;clear nbfoto;clear v;clear y;clear yc; octave:13> who -variables *** local user variables: t octave:14> % on passe à la personnalisation octave:14> % un usager veut "s'abonner" au système octave:14> load 1mat.pgm.oct octave:15> who *** currently compiled functions: colormap fr_load imshow mean rows columns gray is_matrix printf saveimage cov image isempty reshape strcmp *** local user variables: X dims ncol t octave:16> size(X) ans = 100 100 octave:17> yc=reshape(X,dims(1)*dims(2),1); octave:18> size (yc) ans = 10000 1 octave:19> yc=yc-ones(dims(1)*dims(2),1)*127; octave:20> vprime=cov(t,yc) vprime = 128.699 -31.620 -67.140 93.068 757.393 octave:21> % on a la clésignature de 1mat.pgm.oct depuis t octave:21> % on inscrit ce vprime en carte octave:21> % il faudra creer une fonction adaptateur octave:21> % pour mettre en forme cette matrice dans octave:21> % un format lisible par ZeitControlBasic par exemple octave:21> % octave:21> clear X; clear dims; clear ncol;clear yc octave:22> who -variables *** local user variables: t vprime octave:23> % on passe a l'authentification octave:23> % on laisse t la cle publique octave:23> % et vprime qui est lue depuis la carte à puce octave:23> % octave:23> % on prend un cliché de l'usager octave:23> load 1mat2.pgm.oct octave:24> who *** currently compiled functions: colormap fr_load imshow mean rows columns gray is_matrix printf saveimage cov image isempty reshape strcmp *** local user variables: X dims ncol t vprime octave:25> X=reshape(X,dims(1)*dims(2),1); octave:26> yc=X-ones(dims(1)*dims(2),1)*127; octave:27> vseconde=cov(t,yc) vseconde = 97.1495 -9.3351 -26.3722 -27.5079 1276.9406 octave:28> vprime vprime = 128.699 -31.620 -67.140 93.068 757.393 octave:33> % essayons de trouver des facteurs octave:33> vprime./vseconde ans = 1.32475 3.38721 2.54588 -3.38334 0.59313 octave:34> vseconde./vprime ans = 0.75486 0.29523 0.39279 -0.29557 1.68597 octave:35> % ceci est plus interessant, on repere que ce vecteur octave:35> % "d'erreur" approx. (représentant les facteurs communs entre eigenfaces respectifs du visage authentique et du visage à authentifier octave:35> %) contient : octave:35> % octave:35> % 3 valeurs comprises (dans l'absolu) 29.5% % 1 valeur supérieure à 75% octave:35> % elle correspond au visage mineur octave:35> % 1 valeur supérieur à 168% octave:35> % elle correspond au visage majeur octave:35> quit