Iuj ajgenvizaĝoj el la AT&T Laboratorio Kembriĝo.
**Ajgenvizaĝo** estas nomo por ajgenvektoroj, en la kunteksto de komputila vizaĝrekonado. La metodon rekoni vizaĝon per ajgenvizaĝo inventis Sirovich kaj Kirby (1987) kaj plenumis Matthew Turk kaj Alex Pentland por vizaĝklasado. La ajgenvizaĝoj devenas de la kunvarianca matrico de la probablodistribuo super alt-dimensia vektora spaco de bildoj de vizaĝo. La ajgenvizaĝo mem formas bazo-aron por ĉiuj bildoj uzitaj por komputi la kunvariancan matricon. Ĉi tio malmultigas dimension, ĉar oni uzas la malgrandan aron por reprezenti la originajn trejnajn bildojn. Oni povas ankaŭ klasi bildojn per ilia reprezento en la bazo-aro.

Historio
--------

La inventado de la metodo komencis kiel studo por malalt-dimensia reprezentado de vizaĝo.

Sirovich kaj Kirby (1987) aplikis analizon al principaj konsisteroj je kolekto da bildoj de vizaĝo por formi aron da bazoj. La bazaj bildoj, nomiĝante la ajgenbildoj, povas afine kombiniĝi por rekonstrui bildojn en la origina datumaro. Pli da ajgenbildoj eldonas malpli da eraroj, tamen la nombro estu ĉiam malpli ol la origina nombro.

En 1991 M. Turk kaj A. Pentland etendis la rezulton kaj proponis ajgenvizaĝojn kiel metodo por rekoni vizaĝon. Ili planis sistemon por aŭtomate rekoni vizaĝon per ajgenvizaĝoj. Ili ankaŭ montris metodon, kiu ebligas al tiutempaj komputiloj komputi la ajgenvektorojn de la kunvarianca matrico kun multe da bildoj.

Oni plu etendis la metodon por inkluzivi antaŭtraktadon por pliprecizigo. Aliaj sternaĝaj metodoj estis proponitaj por konstrui aron da ajgenvizaĝoj por diversaj celoj kaj kun malsamaj trajtoj, ekzemple, okuloj.

Komputado
---------

Oni povas komputi **aron da ajgenvizaĝoj** per analizo al precipaj konsisteroj (PCA) je aro da bildoj de malsamaj vizaĝoj. Neforme, ajgenvizaĝoj formas aron da "normaj komponantoj de vizaĝoj", ke ĉiu vizaĝo povas konsideriĝi kiel kombinado de ĉi tiuj normaj komponantoj.

Komputitaj ajgenvizaĝoj aperas kiel helaj kaj malhelaj areoj kiuj formas iun strukturon. Por iuj strukturoj, ekzemple vizaĝhararo kaj okulvitroj, oni povas evalui la simetrion. Aliajn bildojn eble estas malfacile rekoni, eĉ ne ŝajnas kiel vizaĝo.

### Praktika plenumo

1. Prepari aron da trejnaj bildoj. La bildoj fotiĝu en simila lumado kaj laŭliniiĝus, la okuloj kaj buŝo estu en la samaj lokoj. Ĉiu bildo estu specimenata laŭ la sama rastrumo (*r* × *c*) kaj vektoriĝu kiel vertikala vektoro kun dimensio *r* × *c*. Kombinu la vektorojn en matricon **T**.
2. Subtrahi la mezan bildon. Oni kalkulu la mezan bildon **a** kaj subtrahi ĉiujn vertikalojn de **T** per **a**.
3. Komputi la ajgenojn kaj ajgenvektorojn de la kunvarianca matrico **S**. La ajgenvektoroj de S nomiĝas ajgenvizaĝoj, ĉar ili mem havas la saman dimension kiel la bildoj. La ajgenvizaĝoj reprezentas la direktojn, en kiuj la bildoj devenas el la meza bildo.
4. Elekti la *k* pli gravajn principajn konsisterojn. La tuta varianco de la trejna ekzemplo estas {\displaystyle v=n\cdot (\lambda \_{1}+\lambda \_{2}+...+\lambda \_{n})} la k bazoj do reprezentas {\displaystyle {\frac {n(\lambda \_{1}+\lambda \_{2}+...+\lambda \_{k})}{v}}} da origina varianco.

### Ekzempla programo per Matlab

Jen estas ekzempla programo por komputi ajgenvizaĝojn en *Extended Yale Face Database B*. Por eviti komputan kaj memoran limojn, la bildoj estas subspecimenitaj je faktoro 4x4=16.

```
clear all;
close all;
load yalefaces
[h,w,n] = size(yalefaces);
d = h\*w;
% vectorigi bildojn
x = reshape(yalefaces,[d n]);
x = double(x);
% subtrahi mezan bildon
x=bsxfun(@minus, x, mean(x,2));
% komputi kunvariancon
s = cov(x’);
% komputi ajgenon kaj ajgenvektoron
[V,D] = eig(s);
eigval = diag(D);
% ordigi ajgenon malpliiĝe
eigval = eigval(end:-1:1);
V = fliplr(V);
% bildigi precipajn ajgenvektorojn 0 ĝis 15
eig0 = reshape(mean(x,2), [h,w]);
figure,subplot(4,4,1)
imagesc(eig0)
colormap gray
for i = 1:15
subplot(4,4,i+1)
imagesc(reshape(V(:,i),h,w))
end

```
Notu, ke kvankam la kunvarianca matrico S eldonas multe da ajgenvizaĝojn, oni bezonas nur etan parton de ili por bone reprezenti la plejmulton da bildoj. Ekzemple, por reprezenti 95% de la tuta varianco en ĉiuj vizaĝaj bildoj, necesas la 43 ajgenvektoroj kun nur la grandaj. La rezulton oni komputu jene:

```
% taksi la nombron de precipaj konsisteroj necesaj por reprezenti 95% de tuta varianco
eigsum = sum(eigval);
csum = 0;
for i = 1:d
csum = csum + eigval(i);
tv = csum/eigsum;
if tv > 0.95
k95 = i;
break
end ;
end;

```

### Komputi la ajgenvektorojn

Rekte apliki PCA-on je la kunvarianca matrico de bildoj estas kompute neeble. Ekzemple, se oni uzus 100 × 100 senkolorajn bildojn, ĉiu bildo estus punkto en 10,000-dimensia spaco. Do la kunvarianca matrico **S** havus 10,000 × 10,000 = 108 elementojn. Tamen, la rango de la matrico estas finia kaj funkcio de la nombro de trejnaj ekzemploj: por *N* trejnaj bildoj, estus apenaŭ *N* − 1 ajgenvektoroj kun nenula ajgeno. Do se la nombro de trajnaj ekzemploj estas malpli multa ol la bildo-dimensio, oni povus komputi la precipajn konsisterojn pli facile jene.

**T** estu la matrico de antaŭtraktitaj trejnaj ekzemploj, kies ĉiu vertikalo estas vektorigita bildo minus la meza bildo. La kunvarianca matrico estas **S** = **TT**T kaj la ajgen-malkomponado de **S** komputiĝas kiel

{\displaystyle \mathbf {Sv} \_{i}=\mathbf {T} \mathbf {T} ^{T}\mathbf {v} \_{i}=\lambda \_{i}\mathbf {v} \_{i}}
Ĉar **TT**T estas granda oni povas anstataŭe malkomponi

{\displaystyle \mathbf {T} ^{T}\mathbf {T} \mathbf {u} \_{i}=\lambda \_{i}\mathbf {u} \_{i}}
Sekve oni povas ĝin maldekstre mulltipliki per **T**, kio donas

{\displaystyle \mathbf {T} \mathbf {T} ^{T}\mathbf {T} \mathbf {u} \_{i}=\lambda \_{i}\mathbf {T} \mathbf {u} \_{i}}
Kio signifas, ke se **u**i estas ajgenvektoro de  **T**T**T**, **v**i = **Tu**i estas ajgenvektoro de **S**. Se oni trejnas per 300 bildoj kun 100 × 100 bilderoj, la matrico **T**T**T** havus dimension 300 × 300, ege pli facila ol la kunvarianca matrico kun dimensio 10,000 × 10,000. Notu tamen ke la rezulto **v**i ne estas unuigitaj.

### Rilato kun SVD

X estu datum-matrico kun dimensio **malsukcesis analizi formulon (Sintakseraro): {\displaystyle <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>d</mi> <mo>×</mo> <mi>n</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle d\times n}</annotation> </semantics> }**
{\displaystyle d\times n}, kies vertikalo **malsukcesis analizi formulon (Sintakseraro): {\displaystyle <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>x</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>i</mi> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex"><nowiki>{\displaystyle x\_{i}}</nowiki></annotation> </semantics> }**
estas bildo vektoro minus la meza bildo. Do

{\displaystyle covariance(X)={\frac {XX^{T}}{n}}}
La singulara-valora malkomponado (SVD, SVM) de X estu:

{\displaystyle X=U{\Sigma }V^{T}}
Do la ajgenmalkomponado de {\displaystyle XX^{T}} estas

{\displaystyle XX^{T}=U{\Sigma }{{\Sigma }^{T}}U^{T}=U{\Lambda }U^{T}}, kie Λ=diag (ajgeno de {\displaystyle XX^{T}})
Do estas evidente, ke:

Ajgenvizaĝo = {\displaystyle U}, la maldekstra singulara vektoraro de X
La i-a ajgeno de {\displaystyle XX^{T}={\frac {1}{n}}(} i-a singulara valoro de {\displaystyle X)^{2}}
Se oni uzus SVD por X, ne necesus komputi la kunvariancan matricon por ajgenvizaĝoj.

Rekoni vizaĝon
--------------

Intuicie, por rekoni bildon oni unue projekcias la mendan bildon en la vizaĝo-spacon de la ajgenvizaĝoj kaj kalkulas la plej proksimuman bildon en la datumbazo.

Kvazaŭprogramo  

* Por bildo {\displaystyle U\in \Re ^{n}}kaj la meza bildo {\displaystyle M}de la datumbazo, komputi la pezon de la *k*-a ajgenvizaĝo jene:
{\displaystyle w\_{k}=V\_{k}^{T}(U-M)}
Kaj formi pezo-vektoron:{\displaystyle W=[w\_{1},w\_{2},...w\_{k},...w\_{n}]}
* Kompari W kun pezo-vektoro {\displaystyle W\_{m}} de bildoj en la datumbazo per eŭklida distanco  

{\displaystyle d=||W-W\_{m}||^{2}}
* Se {\displaystyle d<\epsilon \_{1}}, elektu la nunan bildon kiel rezulto de rekonado
* Se {\displaystyle \epsilon \_{1}<d<\epsilon \_{2}}, U eble estas nekonata vizaĝo. Endatumbazigu U por estonta rekonado.
* Se {\displaystyle d>\epsilon \_{2}}, U ne estas vizaĝo.

La pezoj de bildoj nur priskribas la bildoj mem, ne la fotitoj. Fotoj de la sama vizaĝo, sub malsamaj lumado, eldonas tre malsamajn pezojn. Ĉi tio limigas la precizon de la sistemo. Eksperimentoj kun la origina metodo montris ke 96% da pezo estas rilataj al variado de lumo, 85% al direkto, kaj 64% al grandeco.

Plibonigo
---------

Multe da plibonigon proponiĝis por ajgenvizaĝo.

Metodo "Eigenfeatures" kombinas vizaĝajn trajtojn (mezuro de distancoj inter vizaĝpartoj) kaj la ajgenvizaĝoj.

Fisher-vizaĝo bazas sur lineara diskriminanta analizo. Ĉi tiu metodo estas malpli influita de variado de lumado kaj direkto de vizaĝo, kaj utiliĝas speciale por vizaĝo-klasado.

Plua alternativo al ambaŭ ajgenvizaĝo kaj fischer-vizaĝo estas la modelo de aktiva apero. Ĉi tiu metodo uzas modelon de aktiva formo, kiu priskirbas la konturon de la vizaĝo. PCA sur la konturoj eldonas bazo-aron, kiu enkaptas la variancon de malsamaj vizaĝoj.

Notoj
-----

1. ↑   (November 2002) "Analysis and Comparison of Eigenspace-Based Face Recognition Approaches", *International Journal of Pattern Recognition and Artificial Intelligence* **16** (7), p. 817–830. doi:10.1142/S0218001402002003.
2. ↑  Turk, Matthew A and Pentland, Alex P.  *Face recognition using eigenfaces*.
3. ↑  Turk, Matthew A and Pentland, Alex P. *Face recognition using eigenfaces*.
4. ↑  Draper, Bruce A. and Yambor, Wendy S and Beveridge, J Ross.
5. ↑  Belhumeur, {P,N} and Kriegman, D. *What is the set of images of an object under all possible lighting conditions?*
6. ↑  Burnstone J and Yin H. *Eigenlights: Recovering Illumination From Face Images*.
7. ↑  Moghaddam, B and Wahid, W and Pentland, A. *Beyond eigenfaces: probabilistic matching for face recognition*.
8. ↑   "Eigenfaces for Recognition". doi:10.1162/jocn.1991.3.1.71.
9. ↑  Belhumeur,P N, and Hespanha, {J,P}, and Kriegman, D.*Eigenfaces vs.*

Eksteraj ligiloj
----------------

* Face Recognition Homepage
* PCA on the FERET Dataset
* Developing Intelligence Eigenfaces and the Fusiform Face Area
* A Tutorial on Face Recognition Using Eigenfaces and Distance Classifiers
* Matlab example code for eigenfaces
* OpenCV + C++Builder6 implementation of PCA
* Java applet demonstration of eigenfaces Arkivigite je 2011-11-01 per la retarkivo Wayback Machine
* Introduction to eigenfaces
* Face Recognition Function in OpenCV Arkivigite je 2014-11-09 per la retarkivo Wayback Machine
* Eigenface-based Facial Expression Recognition in Matlab