148 lines
9.5 KiB
Markdown
148 lines
9.5 KiB
Markdown
I problemi che occorrono nel riconoscimento 2D sono dovuti soprattutto a variazioni A-PIE (PIE + Ageing) e a possibili travestimenti da parte di impostori.
|
|
Questi problemi possono essere risolti con il riconoscimento 3D, introducendo però chiaramente altre complicanze (maggiore complessità di acquisizione e maggiore complessità nel gestire i dati acquisiti).
|
|
|
|
| Variazione | 2D | 3D |
|
|
| ---------------------- | --- | --- |
|
|
| Posa | X | V |
|
|
| Illuminazione | X | V |
|
|
| Espressione | X | X |
|
|
| Invecchiamento | X | X |
|
|
| Makeup | X | V |
|
|
| Chirurgia plastica | X | X |
|
|
| Occhiali, sciarpe ecc. | X | X |
|
|
(X = la variazione è un problema, V = la variazione non causa problemi)
|
|
|
|
###### Possibili implementazioni:
|
|
- **2D:**
|
|
- **Intensity image:** la classica "foto" ad es. in RGB
|
|
- **Immagini da altri sensori:** fotocamere termiche o near-infrared (infrarossi)
|
|
- **Immagini processate:** immagine processata con filtri (tipo wavelets o LBP)
|
|
- **2.5D:**
|
|
- **Range image:** immagini 2D che oltre al colore mantengono una quarta informazione, la distanza dal sensore
|
|
- **3D:**
|
|
- **Shared model:** serie di punti connessi tra loro (solitamente tramite triangolazione) formano un "mesh" 3D. Vari metodi di acquisizione, ognuno ha i suoi pro e contro.
|
|
|
|
###### Tipologie di scanner 3D:
|
|
- **Fotocamere stereoscopiche:** con due sensori. Si scattano foto con diversi punti di vista
|
|
- **Structured light scanner:**
|
|
- un pattern di luce viene proiettato su una superficie (faccia)
|
|
- il pattern viene deformato dalla faccia
|
|
- catturando diversi punti di vista si può ottenere un modello 3D completo
|
|
- costo medio-alto, accuratezza medio-alta, robustezza all'illuminazione medio-alta, dai 3 agli 8 secondi per una scansione
|
|
- funziona in modo simile al Kinect![[Pasted image 20241107090827.png]]\
|
|
- **Laser scanner:**
|
|
- way more accurate
|
|
- un fascio laser viene proiettato sulla faccia
|
|
- il fascio viene deformato dalla struttura 3D della faccia
|
|
- la cattura va ripetuta da diversi punti di vista
|
|
- è il metodo più costoso, ma ha un'ottima accuratezza, ottima robustezza all'illuminazione, 6-30 secondi per una scansione. Ma **è pericoloso per gli occhi**. ![[Pasted image 20241107091228.png]]
|
|
|
|
I dati acquisiti possono presentare alcuni problemi:
|
|
- presenza di spike o rumore
|
|
- presenza di "buchi" nel mesh 3D
|
|
- decentramento
|
|
|
|
Per questo sono necessarie diverse tecniche per la rimozione del rumore: filtri o operazioni manuali; per riempire i "buchi" devo aggiungere informazioni non presenti nel segnale: smoothing gaussiano, interpolazione lineare (collego due punti con una linea), interpolazione simmetrica, operazioni morfologiche.
|
|
|
|
#### $2D \to 3D$
|
|
Un modello 3D si può produrre integrando diverse scansioni 2.5D da diversi punti di vista.
|
|
- Per ogni immagine 2.5D viene prodotta una "nuvola" di punti 3D
|
|
- i punti vengono triangolarizzati (viene derivata una mesh di triangoli adiacenti) ![[Pasted image 20241107092327.png]]
|
|
- maggiore è il numero di triangoli, maggiore sarà il costo computazionale per generare il mesh ma maggiori saranno i dettagli
|
|
|
|
#### Modello 3D
|
|
- un poligono è una sequenza di punti complanari connessi da segmenti
|
|
- la complanarità è ciò che causa l'approssimazione quando rappresentiamo una superficie tramite un mesh di poligoni
|
|
- un lato (side) è un segmento che connette due vertici
|
|
- un poligono è composto quindi da un insieme di lati (il primo vertice del primo lato corrisponde al secondo vertice dell'ultimo lato)
|
|
- ogni vertice nel mesh è adiacente almeno a due lati
|
|
- ogni lato appartiene ad almeno un poligono
|
|
- per determinare l'orientamento di una superficie nello spazio 3D utilizziamo i normali ai vertici o ai poligoni![[Pasted image 20241107093019.png]]
|
|
|
|
Dopo aver costruito la mesh dobbiamo assegnare colori ai vertici e/o poligoni
|
|
- si può assegnare un colore a un vertice
|
|
- si può assegnare un colore a un poligono sulla base del colore dei suoi vertici
|
|
|
|
Texture map: per calcolare la posizione e l'orientamento di una texture su una superficie. Dobbiamo mappare i pixel della texture sulla superficie, possiamo farlo utilizzando diversi tipi di proiezioni:![[Pasted image 20241107093316.png]]
|
|
|
|
#### Shape from shading
|
|
Sfruttando le proprietà di shading (come la luce riflette su una superficie) è possibile stimare informazioni come la profondità e ricavare così un mesh 3D a partire da immagini 2D.
|
|
Possiamo farlo usando le leggi di Lambertian:
|
|
- Lambertian reflectance è la proprietà che definisce la superficie opaca o riflettente ideale, la luminosità è la stessa indipendentemente dall'angolo di vista dell'osservatore
|
|
- Lambertś cosine law:
|
|
> [!PDF|yellow] [[LEZIONE7_Face recognition3D.pdf#page=9&selection=69,0,72,0&color=yellow|LEZIONE7_Face recognition3D, p.9]]
|
|
> > Lambert's cosine law
|
|
>
|
|
> approfondisci
|
|
|
|
> [!PDF|red] [[LEZIONE7_Face recognition3D.pdf#page=9&selection=96,0,107,7&color=red|LEZIONE7_Face recognition3D, p.9]]
|
|
> > From 2D representation to 3D model: shape from shading
|
|
>
|
|
> shading più nel dettaglio
|
|
|
|
#### Shape from morphing
|
|
Un'altra tecnica è il **morphing**, dove viene creata una faccia 3D di riferimento e viene poi modellata per ottenere un risultato congruo a un'immagine di una persona. Questo ci permette di poter cambiare alcune caratteristiche del modello 3D così da poter stimare un modello sotto variazioni di espressione o età ad esempio.
|
|
|
|
La geometria di una faccia è rappresentata come un vettore S della forma (shape) composto da coordinate X, Y e Z degli n vertici 3D. Un vettore simile invece rappresenta la texture della faccia tramite valori RGB.
|
|
Una faccia viene costruita utilizzando un dataset di m esemplari, ognuno rappresentato dai suoi vettori Si e Ti. Le nuove forma e texture possono essere ottenute tramite una combinazione lineare di forme e texture degli m esemplari.
|
|
|
|
![[Pasted image 20241107101136.png]]
|
|
Possibili configurazioni. Non è necessario che sia gallery che probe siano entrambi 3D o entrambi 2D! Da un modello 3D si possono aggiustare la posa e calcolare la normal map, per confrontarla con altre normal map.
|
|
|
|
#### 3D allignment
|
|
##### Coarse
|
|
si possono usare i landmark
|
|
1. trovando un numero finito di punti caratteristici (bordi degli occhi, punta del naso...)
|
|
2. allineando facce minimizzando la distanza tra punti corrispondenti
|
|
|
|
##### Fine
|
|
Algoritmo ICP (Iterative Closest Point)
|
|
https://www.youtube.com/watch?v=QWDM4cFdKrE
|
|
Date due superfici 3D
|
|
1. trova un iniziale match tra le due (mapping di punti/superfici/linee/curve)
|
|
2. calcola la distanza tra le superfici con il metodo least squares
|
|
3. calcola la trasformazione che minimizza la distanza
|
|
4. eseguila e reitera la procedura finché la distanza non è inferiore a una threshold
|
|
|
|
##### Con normal maps
|
|
1. acquisizione e generazione della faccia
|
|
2. proiezione della geometria 3D su uno spazio 2D
|
|
3. generazione della mappa normale
|
|
![[Pasted image 20241107102227.png]]
|
|
Le mappe normali sono comunemente memorizzate come immagini RGB dove i componenti RGB corrispondono alle coordinate XYZ della superficie normale.
|
|
|
|
La lunghezza del vettore è rappresentata dall'intensità del colore.![[Pasted image 20241107102503.png]]
|
|
|
|
Usiamo le mappe normali perché processare un'immagine 2D è molto più veloce di processare un modello 3D. E se riusciamo a rappresentare un modello 3D in un'immagine 2D... Why not!
|
|
|
|
Tornando al face recognition, calcolando la differenza tra le due mappe ottengo la difference map, in cui ogni pixel rappresenta la distanza angolare tra le due mappe normali in quel punto.
|
|
|
|
Un tool per generare il modello 3D di una faccia usando il morphing è
|
|
> [!PDF|yellow] [[LEZIONE7_Face recognition3D.pdf#page=17&selection=81,0,81,7&color=yellow|LEZIONE7_Face recognition3D, p.17]]
|
|
> > FaceGen
|
|
>
|
|
> approfondisci facegen
|
|
|
|
#### iso-Geodesic Stripes
|
|
i modelli facciali 3D non sono sensibili all'illuminazione e alla posa, ma sono molto sensibili alle espressioni facciali (più delle immagini 2D). Per cui espressioni diverse possono causare grosse variazioni.
|
|
|
|
La distanza geodetica è il path più breve che congiunge due punti in uno spazio curvo, quindi il path non è una linea dritta ma segue l'andamento curvilineo dello spazio.
|
|
- le distanze geodetiche non sono molto affette dalle variazioni dell'espressione
|
|
- la geometria delle regioni convesse della faccia sono poco affette dalle variazioni dell'espressione, rispetto alle regioni concave.
|
|
|
|
- Degli studi hanno dimostrato che le distanze euclidee e geodetiche e l'angolo tra 47 fiducial points sono sufficienti per catturare tutte le informazioni rilevanti. Il problema è riconoscere e estrarre questi punti.
|
|
|
|
In questo approccio tutti i punti della faccia sono presi in considerazione, le informazioni rilevanti sono codificate in un grafo, riducendo così il problema del face recognition al matching di grafi. Ogni nodo nel grafo rappresenta iso-geodesic facial stripes (strisce composte dai punti che hanno la stessa distanza geodetica dalla punta del naso, vedi figura) di uguale o crescente distanza dalla punta del naso.
|
|
|
|
Gli archi sono arricchiti con **3D Weighted Walkthroughs (3DWWs)**, descrittori che catturano spostamenti (displacement) spaziali tra punti corrispondenti delle strisce. I 3DWWs sono robusti rispetto alle deformazioni delle espressioni.
|
|
È molto efficiente.
|
|
|
|
![[Pasted image 20241107104144.png]]
|
|
strisce iso-geodetiche
|
|
|
|
> [!PDF|red] [[LEZIONE7_Face recognition3D.pdf#page=21&selection=32,22,47,7&color=red|LEZIONE7_Face recognition3D, p.21]]
|
|
> > n be directly derived from the weights of the 3DWW matrix. Iso-geodesic stripes
|
|
>
|
|
> integrare questo
|
|
|
|
|