Con il termine feature invarianti si denotano caratteristiche estratte dai pattern che siano costanti (il più possibile) rispetto alle possibili variazioni intra-classe. Due semplici feature invarianti rispetto a trasformazioni affini sono l'area e il perimetro di un oggetto.
Uno dei maggiori dilemmi nelle applicazioni di PR è se l'invarianza dei pattern debba essere gestita a livello di feature (attraverso la scelta e l'estrazione di feature invarianti) oppure a livello di classificazione (attraverso la scelta e il progetto di metodi in grado di sopportare feature non invarianti).
Feature invarianti → Classificazione triviale
Feature non invarianti → Classificazione più complessa
Nessuno dei due metodi è preferibile in assoluto, e molto spesso gli approcci scelti sono ibridi: gestiscono l'invarianza a livello di feature solo per alcuni tipi di variabilità. Due considerazioni guidano la scelta:
Questo dilemma attraversa tutto il corso. SIFT (capitolo 6) è l'esempio più puro di invarianza nella feature: il descrittore è costruito per essere invariante a scala, rotazione e illuminazione, così che il matching sia una banale distanza euclidea. Le CNN (capitolo 9) stanno all'estremo opposto: le feature grezze non sono invarianti e l'invarianza emerge dall'architettura (pesi condivisi, pooling) e dai dati (data augmentation).
Le applicazioni tipiche delle feature invarianti mostrate a lezione sono tre: ricerche di similarità, classificazione e localizzazione.
| Approccio | Definizione |
|---|---|
| Hand-crafted features | Rappresentazione numerica ottenuta attraverso processi di feature extraction definiti dal progettista, allo scopo di codificare al meglio le caratteristiche salienti delle immagini: colore, forma, tessitura. |
| Representation learning | Apprendimento automatico di feature salienti attraverso tecniche di deep learning. Le reti ricevono in input pattern "grezzi" (es. immagini) e in modo autonomo apprendono la rilevanza delle feature a diversi livelli di astrazione. |
Le tecniche basate su deep learning cercano di apprendere rappresentazioni gerarchiche significative automaticamente, attraverso un processo di apprendimento costituito da più livelli: low-level features → mid-level features → high-level features → classificatore → output. Ogni livello opera una sorta di trasformazione non lineare di feature, i cui parametri possono essere appresi automaticamente. Il riferimento classico per la visualizzazione di queste feature è il lavoro di Zeiler e Fergus (2013) su una rete convoluzionale addestrata su ImageNet.
La gerarchia ha un'interpretazione semantica sorprendentemente uniforme tra domini diversi:
riconoscimento di immagini: pixel → edge → texton → motif → part → object
riconoscimento di testi: character → word → word group → clause → sentence → story
Non esiste una tecnica universalmente migliore dell'altra; applicazioni diverse richiedono tecniche diverse.
| Hand-crafted | Deep learning |
|---|---|
|
|
I capitoli 4-8 percorrono la prima colonna, i capitoli 9-12 la seconda.
Un color histogram è una rappresentazione della distribuzione dei colori in un'immagine. Nel caso di immagini digitali l'istogramma si ottiene:
Se indichiamo con b_i il numero di bin in cui è stato discretizzato il canale i dello spazio colore (RGB o altro), il numero totale di bin dell'istogramma 3D è il prodotto:
N = Π b_i (istogramma 3D, congiunto)
i
La scelta del numero di bin deve essere valutata attentamente, perché influenza notevolmente le prestazioni sia in termini di efficacia (ciascun bin dovrebbe contenere colori effettivamente simili) sia in termini di efficienza (aumentando il numero di bin aumenta la complessità computazionale).
| Istogramma 3D congiunto | Tre istogrammi 1D separati |
|---|---|
Numero di bin elevato: N = Π b_i. Rappresentazione più ricca: conserva la correlazione tra i canali, quindi distingue "rosso e blu in parti diverse dell'immagine" da "viola ovunque". |
Numero di bin ridotto: N = Σ b_i. Rappresentazione più sintetica: perde la correlazione tra canali, ma è molto più compatta ed economica. |
Con 16 bin per canale, per esempio, la differenza è tra 16³ = 4096 bin e 16·3 = 48 bin: due ordini di grandezza.
Una slide del corso è composta da un solo punto interrogativo, e la domanda implicita è questa: l'istogramma colore butta via completamente l'informazione spaziale. Due immagini che nulla hanno a che vedere possono avere lo stesso istogramma. È il motivo per cui, nella sezione 5, si introducono i color moments locali, e nel capitolo 7 i BoW con suddivisione in sottoregioni.
Ai fini del confronto tra immagini sulla base degli istogrammi colore è necessario definire una metrica che ne esprima la similarità (o dissimilarità). Le due più usate viste a lezione:
Σ_I ( H₁(I) − H̄₁ ) · ( H₂(I) − H̄₂ )
d(H₁, H₂) = ───────────────────────────────────────────
sqrt( Σ_I (H₁(I) − H̄₁)² · Σ_I (H₂(I) − H̄₂)² )
dove H̄_k = (1/N) · Σ_J H_k(J)
È il coefficiente di correlazione tra i due vettori-istogramma: vale 1 per istogrammi identici e decresce al divergere delle distribuzioni.
d(H₁, H₂) = Σ_I min( H₁(I), H₂(I) )
Somma, bin per bin, il minimo tra i due conteggi: misura letteralmente "quanti pixel i due istogrammi hanno in comune". Con istogrammi normalizzati vale 1 per istogrammi identici e 0 per istogrammi con supporti disgiunti.
Sposta e allarga il secondo istogramma rispetto al primo e osserva come rispondono le due metriche. Nota che l'intersezione crolla appena i supporti si separano, mentre la correlazione resta sensibile alla forma delle distribuzioni.
I color moments sono descrittori del colore molto utilizzati per la loro semplicità ed efficacia. Si basano sull'assunzione che la distribuzione dei colori in un'immagine possa essere interpretata come una distribuzione di probabilità, caratterizzata da un certo numero di momenti che possono essere sfruttati per descrivere l'immagine stessa.
Data un'immagine I di N pixel, definiamo p_ij il canale i del pixel j. I tre momenti più utilizzati sono:
N
Media: E_i = Σ (1/N) · p_ij colore medio nell'immagine
j=1
N
Dev. std: σ_i = sqrt( (1/N) · Σ (p_ij − E_i)² ) radice della varianza
j=1
N
Skewness: s_i = cbrt( (1/N) · Σ (p_ij − E_i)³ ) asimmetria della distribuzione
j=1
Il descrittore dell'immagine è costituito dai momenti calcolati per i diversi canali (RGB o altro spazio): con 3 canali e 3 momenti si ottiene un vettore di soli 9 valori — molto più compatto di un istogramma. Per il confronto tra descrittori solitamente si usa la distanza euclidea, eventualmente pesata.
I color moments, se calcolati sull'intera immagine, non mantengono informazioni di tipo spaziale — esattamente come gli istogrammi. Per arricchire il descrittore con informazioni locali è possibile dividere l'immagine in regioni e calcolare per ciascuna i relativi color moments. Due varianti:
La stessa strategia può essere usata con altri descrittori globali: è un pattern di progetto ricorrente, non una tecnica specifica dei momenti.
L'applicazione tipica sono i Content Based Image Retrieval Systems (CBIR): sistemi che consentono di reperire immagini sulla base del loro contenuto, senza utilizzare informazioni (keyword, metadati) associate all'immagine stessa. Sfruttano spesso il paradigma query by example e possono implementare meccanismi di relevance feedback per il miglioramento progressivo del risultato sulla base dell'interazione con l'utente.
L'architettura è semplice: il database di immagini passa per l'image feature extraction e popola il feature space; la query image viene proiettata nello stesso spazio; una distance measure produce le retrieved images. Il capitolo 5 riprende i CBIR in dettaglio.
In diverse applicazioni di PR (per esempio nel telerilevamento) i pattern presentano superfici non omogenee caratterizzate da trame più o meno regolari, dette texture, che possono essere sfruttate per la loro classificazione o riconoscimento.
Le texture sono generalmente caratterizzate da primitive che si ripetono secondo alcune regole che ne descrivono la trama. Dal punto di vista percettivo si distinguono tre aspetti:
Per la discriminazione di texture sono stati introdotti diversi metodi: matrici di co-occorrenza, gray-level difference, autocorrelazione, morfologia, frattali, banchi di filtri. Le sezioni seguenti approfondiscono i tre trattati a lezione: co-occorrenza, filtri di Gabor e Local Binary Pattern.
Le matrici di co-occorrenza sono istogrammi bidimensionali che descrivono le co-occorrenze di coppie di livelli di grigio secondo specificate direzioni.
Una matrice M_dx,dy è generata da una distanza e una direzione, specificate sotto forma di un vettore spostamento [dx, dy]. L'elemento M_dx,dy[i, j] rappresenta la probabilità che il pixel [x,y] abbia intensità i e il pixel [x+dx, y+dy] abbia intensità j.
Vengono generalmente calcolate le 4 matrici fondamentali: M₋₁,₀, M₋₁,₋₁, M₀,₋₁, M₊₁,₋₁, corrispondenti alle quattro direzioni a 0°, 45°, 90° e 135°.
Immagine 6×6 a 2 livelli di grigio, vettore spostamento d = (−1, −1):
0 1 0 0 1 0
1 1 0 1 1 0
0 1 0 0 1 0 d = (−1, −1)
1 1 0 1 1 0
0 1 0 0 1 0
1 1 0 1 1 0
Con questo spostamento le coppie valide sono quelle con x ≥ 1 e y ≥ 1, cioè 5 × 5 = 25 coppie. Contandole una per una si ottiene:
j=0 j=1
i=0 ⎡ 2 10 ⎤
M₋₁,₋₁ = ⎢ ⎥ × 1/25
i=1 ⎣ 9 4 ⎦
Verifica: 2 + 10 + 9 + 4 = 25. La lettura è istruttiva: gli elementi fuori diagonale (10 e 9) dominano, cioè lungo la diagonale a 45° i livelli tendono a cambiare. È esattamente ciò che ci si aspetta da una texture a righe verticali osservata in diagonale.
Clicca le celle per modificare l'immagine binaria e cambia il vettore spostamento. Con l'immagine di default e d = (−1,−1) ritrovi esattamente la matrice delle slide.
Dalle 4 matrici — o dalla loro media, la cosiddetta matrice non orientata — possono essere estratte numerose caratteristiche riassuntive. Sono queste, non le matrici, a entrare nel vettore di feature:
| Misura | Formula | Interpretazione |
|---|---|---|
| Energia | Σ_{i,j} M(i,j)² |
Raggiunge valori alti quando la distribuzione dei livelli di grigio dell'immagine è uniforme o periodica. |
| Contrasto | Σ_{i,j} (i − j)² · M(i,j) |
Misura l'entità delle variazioni locali di luminosità: pesa le co-occorrenze in base a quanto i due livelli differiscono. |
| Entropia | − Σ_{i,j} M(i,j) · log M(i,j) |
Ha valori elevati in immagini con texture non uniforme (la matrice ha molti valori bassi). Misura il grado di disordine. |
| Omogeneità | Σ_{i,j} M(i,j) / (1 + |i − j|) |
Attribuisce peso massimo (1) agli elementi della diagonale e peso decrescente agli elementi extra-diagonali. |
L'approccio a banchi di filtri consiste nell'eseguire la convoluzione dell'immagine con una serie di filtri (il banco) e nell'estrarre dalle immagini ottenute alcuni indicatori di sintesi (media, varianza, momenti, ...).
Un insieme di filtri molto utilizzati sono i filtri di Gabor (Daugman, 1988), per i quali sono state trovate forti analogie con alcuni meccanismi del sistema visivo umano. Ogni filtro è costituito da una funzione sinusoidale attenuata progressivamente da una gaussiana. Il filtro, costituito da una parte reale e una immaginaria, è regolato da 3 parametri:
Il filtro di Gabor simmetrico bidimensionale ha la forma:
g(x, y : θ, f) = exp( −(1/2) · [ x_θ²/σ_x² + y_θ²/σ_y² ] ) · cos( 2π f x_θ )
dove θ è l'orientazione del filtro, f la frequenza della sinusoide, σ_x e σ_y le deviazioni standard della gaussiana sugli assi x e y, e [x_θ, y_θ] le coordinate di [x, y] dopo una rotazione in senso orario degli assi cartesiani di un angolo pari a (90° − θ):
⎡ x_θ ⎤ ⎡ cos(90° − θ) sin(90° − θ) ⎤ ⎡ x ⎤
⎢ ⎥ = ⎢ ⎥ ⎢ ⎥
⎣ y_θ ⎦ ⎣ −sin(90° − θ) cos(90° − θ) ⎦ ⎣ y ⎦
Per la generazione del banco di filtri, una volta definiti i range di interesse, si esegue una discretizzazione (in uno dei tanti modi possibili) dei 3 parametri fondamentali. L'esempio mostrato a lezione copre il dominio delle frequenze con 6 orientazioni e 4 scale, per un totale di 24 filtri.
Una questione pratica decisiva: su quali punti si calcola la risposta? Le tre strategie viste a lezione:
| Strategia | Caratteristiche |
|---|---|
| Su tutti i pixel dell'immagine | Massima informazione, ma il vettore di feature risultante ha dimensione molto (troppo) elevata. |
| Sui nodi di una griglia uniforme sovrapposta all'immagine | Compromesso standard: campionamento regolare e dimensione controllata. |
| In corrispondenza dei punti salienti (es. del volto) | Si calcola una saliency image e la relativa saliency map, e si applicano i filtri solo dove l'informazione è più densa. |
In tutti i casi, il feature vector finale si ottiene concatenando la risposta (modulo o parte reale) ai diversi filtri nei punti di applicazione della convoluzione.
Vale la pena notare l'analogia strutturale: un banco di Gabor è una collezione di filtri a diverse orientazioni e scale, le cui risposte vengono concatenate in un vettore. Il primo layer convoluzionale di una CNN è esattamente la stessa cosa — con la differenza che i filtri sono appresi. Non a caso, visualizzando i filtri del primo layer di AlexNet si ottengono strutture molto simili ai filtri di Gabor.
Il Local Binary Pattern (LBP) è un operatore introdotto da Ojala per l'analisi della tessitura delle immagini. L'operatore assegna ai pixel di un'immagine, in un intorno di dimensione 3×3, un valore binario (0 o 1): il valore è assegnato confrontando il valore del pixel con quello del pixel centrale dell'intorno. Se il pixel ha un valore superiore o uguale a quello del pixel centrale gli è assegnato il valore 1, 0 in caso contrario. Concatenando gli 8 bit si ottiene una stringa come 11101001.
L'operatore LBP di base è stato esteso per gestire intorni di dimensione variabile. In questo caso si usa il concetto di intorno circolare di un pixel e i punti campione sono individuati tramite interpolazione. L'operatore è definito da due parametri:
Le configurazioni tipiche mostrate a lezione: P=8, R=1.0; P=12, R=2.5; P=16, R=4.0.
I pattern binari più interessanti sono quelli uniformi, in quanto rappresentano le strutture locali più rilevanti (edge, spot, ecc.). Un pattern è detto uniforme quando, considerato in modo circolare, contiene al massimo due transizioni 0-1 o 1-0. Per esempio i pattern 10000011, 11110000, 00000000 sono uniformi.
Considerare solo i pattern uniformi permette di risparmiare memoria: i pattern totali sono 2^P, mentre gli uniformi sono solo P·(P−1) + 2. Con P = 8: 256 pattern totali contro 58 uniformi.
Modifica i valori dell'intorno 3×3 (il centro è la soglia) e osserva codice binario, valore decimale e verifica di uniformità. Prova 10000011 (uniforme, 2 transizioni) e 10101010 (non uniforme, 8 transizioni).
Il vettore di feature associato a un'immagine è un istogramma (eventualmente normalizzato) calcolato come segue:
k² sottofinestre;P·(P−1) + 3: P·(P−1) bin per i pattern con 2 transizioni, 2 bin per i pattern con 0 transizioni (tutti zeri e tutti uni), 1 bin per tutti i pattern non uniformi messi insieme;È di nuovo la strategia "globale + griglia" già vista per i color moments: l'istogramma per sottofinestra reintroduce l'informazione spaziale che il singolo istogramma perderebbe.
Il metodo Binarized Statistical Image Features (BSIF) è stato proposto per l'analisi di tessiture ed è utilizzato per varie applicazioni nell'ambito del riconoscimento del volto (per esempio la presentation attack detection). Analogamente a LBP, rappresenta un'immagine come un istogramma di occorrenze di pattern binari, dove ciascun pattern binario codifica il contenuto visivo di una patch dell'immagine.
La differenza sostanziale è che i singoli pattern binari sono calcolati binarizzando la risposta a un insieme di filtri lineari, e i filtri utilizzati non sono pre-definiti ma appresi attraverso un opportuno addestramento (tipicamente a partire da immagini naturali). I filtri sono stimati in fase di training con l'obiettivo di massimizzare l'indipendenza statistica delle stringhe binarie risultanti dalla loro applicazione, tramite ICA.
Per ciascuna patch X (l × l) e per ciascun filtro W_i:
s_i = Σ_{u,v} W_i(u,v) · X(u,v) risposta al filtro i
⎧ 1 se s_i > 0
b_i = ⎨ binarizzazione
⎩ 0 altrimenti
b = concatenazione dei b_i stringa binaria della patch
L'intera immagine è rappresentata dall'istogramma delle occorrenze delle possibili stringhe binarie b.
BSIF è il ponte concettuale tra le due metà del corso: la struttura è quella hand-crafted (patch, risposta a filtri, binarizzazione, istogramma), ma i filtri sono appresi dai dati. Un passo ancora e si arriva alle CNN, dove sono apprese anche la combinazione dei filtri e la classificazione finale.
La texture che caratterizza un'immagine può essere codificata applicando all'immagine stessa delle maschere binarie che evidenziano particolari variazioni di intensità luminosa: sono le Haar-like features. Ogni valore del vettore di feature è ottenuto posizionando una maschera in una sottoregione dell'immagine; le feature sono applicate modificandone dimensione, forma e posizione.
Il numero che ne risulta è impressionante: usando una sottofinestra di dimensione 24×24, con tutte le possibili combinazioni di posizione (orizzontale e verticale) e scala, si ottengono in totale 49396 feature.
Queste feature sono utilizzate per due ragioni: sono efficaci per molte applicazioni (in particolare la localizzazione del volto) e possono essere calcolate in modo efficiente usando l'immagine integrale.
L'immagine integrale in posizione (r,c) è la somma del valore dei pixel sopra e a sinistra di (r,c):
II(r, c) = Σ I(r', c') con r' ≤ r, c' ≤ c
Può essere calcolata con una sola scansione dell'immagine originale usando le seguenti formule ricorsive:
S(r, c) = S(r, c−1) + I(r, c) somma cumulativa per righe
II(r, c) = II(r−1, c) + S(r, c)
con S(r, −1) = 0 e II(−1, c) = 0
Usando l'immagine integrale è possibile calcolare la somma del valore dei pixel in qualsiasi rettangolo con quattro soli accessi. Con riferimento allo schema classico a quattro punti, la somma all'interno del rettangolo D è data da:
somma(D) = II(4) + II(1) − II(2) − II(3)
Le feature caratterizzate da 2, 3 o 4 rettangoli possono essere calcolate usando rispettivamente 6, 8 e 9 valori di riferimento. Il costo di ogni feature è dunque costante, indipendente dalle dimensioni del rettangolo: è ciò che rende praticabile la valutazione di decine di migliaia di feature in tempo reale.
A sinistra i valori dei pixel, a destra l'immagine integrale calcolata con le formule ricorsive. Clicca due celle nella griglia di sinistra per definire gli angoli di un rettangolo: verrà calcolata la somma per forza bruta e con i 4 riferimenti.
Il localizzatore di Viola e Jones combina tre ingredienti:
Lo schema di funzionamento è x → features → classify → F(x) → y, con y = +1 (face) o y = −1 (non face). La localizzazione è effettuata facendo scorrere una finestra di ricerca (le cui dimensioni possono variare) sull'immagine, estraendo le feature presenti nella finestra e classificando la finestra come volto o non volto. Il capitolo 7 riprende Viola-Jones nel contesto più generale del template matching e della localizzazione.
Sono caratteristiche estratte dai pattern che siano costanti (il più possibile) rispetto alle variazioni intra-classe (esempi affini: area e perimetro). Il dilemma è se gestire l'invarianza a livello di feature (classificazione poi triviale, molto più veloce, adatta a molte classi) o a livello di classificazione (feature non invarianti + classificatore robusto: spesso più accurato e affidabile). Nessuno dei due è preferibile in assoluto; gli approcci reali sono spesso ibridi.
Hand-crafted: la rappresentazione numerica è ottenuta con processi definiti dal progettista per codificare colore, forma e tessitura; applicabili con pochi dati, più interpretabili, ma non è sempre facile esplicitare il contenuto informativo con feature di basso livello. Representation learning: le feature salienti sono apprese automaticamente da pattern grezzi, a livelli di astrazione crescenti; più generale e trasferibile, ma richiede grandi quantità di dati ed è difficilmente interpretabile.
Si quantizza ciascun canale dello spazio colore in un numero prefissato di bin e si contano i pixel che presentano un determinato colore. Con b_i bin per canale, l'istogramma 3D ha N = Π b_i bin. La scelta va valutata attentamente: pochi bin riducono l'efficacia (bin che mescolano colori diversi), molti bin aumentano la complessità computazionale.
L'istogramma 3D ha N = Π b_i bin: rappresentazione più ricca perché conserva la correlazione tra canali. I tre 1D hanno N = Σ b_i bin: rappresentazione più sintetica ma che perde la correlazione. Con 16 bin/canale: 4096 contro 48 valori.
Correlazione: d(H₁,H₂) = Σ_I (H₁(I)−H̄₁)(H₂(I)−H̄₂) / sqrt(Σ_I (H₁(I)−H̄₁)² · (H₂(I)−H̄₂)²), con H̄_k = (1/N)Σ_J H_k(J). Intersezione: d(H₁,H₂) = Σ_I min(H₁(I), H₂(I)). Entrambe sono misure di similarità: crescono al crescere della somiglianza.
Media E_i = (1/N)Σ_j p_ij (colore medio), deviazione standard σ_i = sqrt((1/N)Σ_j (p_ij − E_i)²), skewness s_i = cbrt((1/N)Σ_j (p_ij − E_i)³) (asimmetria). Calcolati sui 3 canali danno un descrittore di 9 valori, confrontato tipicamente con distanza euclidea, eventualmente pesata.
Perché i momenti globali non mantengono informazioni spaziali. Si divide allora l'immagine in regioni e si calcolano i momenti per ciascuna. Il partizionamento può essere in regioni disgiunte (una griglia) oppure in fuzzy regions, cioè regioni parzialmente sovrapposte, più robuste ai piccoli spostamenti dell'oggetto. La stessa strategia si applica a qualunque descrittore globale.
È un istogramma bidimensionale che descrive le co-occorrenze di coppie di livelli di grigio secondo direzioni specificate. L'elemento M_dx,dy[i,j] è la probabilità che il pixel [x,y] abbia intensità i e il pixel [x+dx, y+dy] abbia intensità j. Le 4 fondamentali sono M₋₁,₀, M₋₁,₋₁, M₀,₋₁, M₊₁,₋₁.
Energia Σ M(i,j)²: alta con distribuzione uniforme o periodica. Contrasto Σ (i−j)² M(i,j): entità delle variazioni locali di luminosità. Entropia −Σ M(i,j) log M(i,j): alta con texture non uniforme, misura il disordine. Omogeneità Σ M(i,j)/(1+|i−j|): peso massimo agli elementi diagonali e decrescente agli extra-diagonali. Si calcolano dalle 4 matrici o dalla loro media (matrice non orientata).
Ogni filtro è una sinusoide modulata da una gaussiana, regolata da tre parametri: la frequenza della sinusoide, la sua orientazione θ rispetto al piano x,y e l'ampiezza σ della gaussiana. Il banco si genera discretizzando i tre parametri sui range di interesse; l'esempio a lezione copre il dominio delle frequenze con 6 orientazioni e 4 scale. Il feature vector si ottiene concatenando le risposte (modulo o parte reale) nei punti di applicazione.
Si confronta ogni pixel dell'intorno 3×3 con il pixel centrale: 1 se il valore è superiore o uguale, 0 altrimenti; concatenando i bit si ottiene il codice (es. 11101001). Un pattern è uniforme se, considerato circolarmente, contiene al massimo due transizioni 0-1 o 1-0 (es. 10000011, 11110000, 00000000). I pattern totali sono 2^P, gli uniformi P·(P−1)+2.
L'immagine è partizionata in k² sottofinestre; per ognuna si costruisce un istogramma con P·(P−1)+3 bin: P·(P−1) per i pattern a 2 transizioni, 2 per quelli a 0 transizioni, 1 per tutti i non uniformi insieme. Il vettore finale è la concatenazione degli istogrammi di tutte le sottofinestre.
Entrambi rappresentano l'immagine come istogramma di occorrenze di pattern binari calcolati su patch. In BSIF però i bit derivano dalla binarizzazione della risposta a filtri lineari (b_i = 1 se s_i > 0, con s_i = Σ W_i(u,v)·X(u,v)) e soprattutto i filtri non sono predefiniti ma appresi in fase di training (tipicamente da immagini naturali) massimizzando l'indipendenza statistica delle stringhe binarie tramite ICA.
II(r,c) = Σ I(r',c') con r' ≤ r, c' ≤ c: la somma dei pixel sopra e a sinistra. Si calcola con una sola scansione: S(r,c) = S(r,c−1) + I(r,c) e II(r,c) = II(r−1,c) + S(r,c), con S(r,−1)=0 e II(−1,c)=0. La somma di un rettangolo è II(4)+II(1)−II(2)−II(3); feature a 2, 3 o 4 rettangoli costano rispettivamente 6, 8 e 9 riferimenti.
Con tutte le combinazioni di posizione e scala si ottengono 49396 feature. I tre ingredienti del localizzatore di Viola e Jones sono: estrazione e valutazione di Haar-like feature, classificazione mediante boosting (classificatore robusto come combinazione di molti classificatori semplici) e multiscale detection, con una finestra di ricerca di dimensioni variabili fatta scorrere sull'immagine.