Parte II — Feature hand-crafted · Capitolo 5

Feature di forma e sistemi CBIR

~40 min di lettura4 widget interattivi4 tavole

In questo capitolo

  1. Le proprietà delle feature di forma
  2. Estrazione del contorno e polygon evolution
  3. Indicatori geometrici di base
  4. Chain code
  5. Shape matrix e Beam Angle Statistics
  6. Shape signatures: le funzioni monodimensionali
  7. Descrittori di Fourier
  8. I sistemi CBIR
  9. Fusione di score e relevance feedback
  10. Verifica le tue conoscenze

1. Le proprietà delle feature di forma

Gli oggetti possono essere riconosciuti sulla base del loro contorno: la forma (shape) è una caratteristica fondamentale per la rappresentazione degli oggetti. L'efficacia delle feature di forma è legata alla presenza di alcune proprietà fondamentali:

ProprietàSignificato
IdentificabilitàOggetti visivamente simili devono essere rappresentati da descrittori simili.
Invarianza a trasformazioni affiniRotazioni, traslazioni e cambiamenti di scala non devono alterare il descrittore.
Robustezza al rumoreI descrittori non devono risentire (eccessivamente) della presenza di una quantità ragionevole di rumore.
Invarianza rispetto a possibili occlusioniUn oggetto parzialmente coperto deve restare riconoscibile.
Indipendenza statistica e ripetibilitàDescrittore compatto e riproducibile per una stessa tipologia di pattern.

Sono i criteri con cui giudicare ogni descrittore delle sezioni seguenti: il chain code, per esempio, fallisce clamorosamente su robustezza al rumore e invarianza alla rotazione, mentre i descrittori di Fourier normalizzati soddisfano quasi tutte le proprietà.

2. Estrazione del contorno e polygon evolution

Molti descrittori di forma si basano su un'analisi del contorno degli oggetti e richiedono pertanto che questo sia estratto dall'immagine di partenza tramite operazioni di vario tipo: segmentazione basata su colore, operatori morfologici, estrazione degli edge. La pipeline tipica è immagine originale → segmentazione → operatori morfologici → estrazione degli edge, cioè esattamente il capitolo 3 usato come pre-processing.

Polygon evolution

L'approssimazione poligonale di una forma è utile per ignorare le variazioni minime che una forma può avere e considerare invece la struttura complessiva dell'oggetto: riduce gli effetti del rumore che può nascere dall'operazione di discretizzazione del contorno.

Uno degli approcci possibili è la polygon evolution, un approccio iterativo che prevede, a ogni passo, la sostituzione di due segmenti consecutivi s₁, s₂ con un singolo segmento che congiunge i punti estremi di s₁ e s₂.

L'ordine con cui si analizzano i segmenti è determinato sulla base della rilevanza, calcolata come:

              β(s₁, s₂) · l(s₁) · l(s₂)
K(s₁, s₂) = ─────────────────────────────
                   l(s₁) + l(s₂)

dove β(s₁, s₂) è l'angolo relativo al vertice comune tra s₁ e s₂ e l(α) è la lunghezza del segmento α normalizzata rispetto alla lunghezza totale della curva poligonale. La formula è leggibile: la rilevanza cresce con l'angolo (un vertice netto conta più di uno appena accennato) e con la lunghezza dei due segmenti coinvolti. Si eliminano per primi i vertici a rilevanza minima, cioè quelli quasi allineati tra segmenti corti — il rumore.

3. Indicatori geometrici di base

Analizzando il contorno dell'oggetto è possibile estrarre una serie di indicatori di base, principalmente di tipo geometrico, che hanno un potere discriminante limitato ma possono comunque contribuire al calcolo della similarità tra immagini se combinati con altri descrittori.

IndicatoreDefinizione
Centro di gravità Il centroide dei punti della figura: G = (g_x, g_y) con g_x = (1/N)·Σᵢ xᵢ e g_y = (1/N)·Σᵢ yᵢ, dove N è il numero di punti che costituiscono la forma.
Bounding box Il più piccolo rettangolo in grado di contenere tutti i punti della forma. Da essa si calcolano eccentricity = L/W ed elongation = 1 − L/W.
Convexity Rapporto tra il perimetro del convex hull e quello della forma: C_convexity = O_convexhull / O. Misura quanto la forma è frastagliata o rientrante.
Numero di Eulero Descrive la relazione tra il numero di parti continue (S) e il numero di buchi (N) nella forma: Eul = S − N. Esempi: una figura piena senza buchi ha Eul = 1; una figura con due buchi ha Eul = −1; una figura con un buco ha Eul = 0.
G W L bounding box, centroide, convex hull numero di Eulero: Eul = S − N Eul = 1 1 parte, 0 buchi Eul = −1 1 parte, 2 buchi Eul = 0 1 parte, 1 buco
Tavola 5.1 — Gli indicatori geometrici elementari. Presi singolarmente discriminano poco (infinite forme diverse condividono la stessa eccentricità), ma combinati con descrittori più ricchi contribuiscono alla misura di similarità.

4. Chain code

Il chain code è un approccio comune per la rappresentazione di forme come sequenze connesse di segmenti caratterizzati da una specifica lunghezza e orientazione.

Il primo chain code proposto descrive gli spostamenti lungo una sequenza di pixel di contorno usando la cosiddetta 8-connectivity o la 4-connectivity. La direzione di ciascuno spostamento è codificata sulla base di uno schema di numerazione {i | i = 0, 1, ..., 7} oppure {i | i = 0, 1, 2, 3}, che indica una rotazione in senso antiorario pari a 45° × i oppure 90° × i rispetto all'asse x positivo.

8-connectivity: 45°×i, antiorario 0123 4567 esempio di percorso di contorno chain code: 0 0 1 2 2 3 4 4 5 6 6 7
Tavola 5.2 — Lo schema di numerazione a 8 direzioni e un contorno codificato. Il codice descrive spostamenti relativi: per questo è invariante alla traslazione ma non alla rotazione, che rinumera tutte le direzioni.

Limiti e varianti

Il chain code è invariante per traslazione (la codifica è relativa) ma è molto sensibile al rumore e non invariante per rotazione. Per ovviare a queste problematiche sono state proposte alcune varianti:

Costruttore di chain code

Premi i pulsanti direzionali per tracciare un contorno: il codice si costruisce a ogni passo. Il differential chain code è calcolato come differenza tra direzioni consecutive modulo 8. Usa "Ruota di 45°" per verificare che il codice cambia ma il codice differenziale no.

5. Shape matrix e Beam Angle Statistics

Shape matrix

La shape matrix è una matrice di dimensione M × N che descrive una forma. Due modelli:

Square model shape matrix: data una forma S si costruisce un quadrato centrato nel centro di gravità G di S; la dimensione di ciascun lato è 2L, dove L è la massima distanza euclidea di G da un punto del bordo. Il quadrato viene diviso in N × N sottoquadrati (indicati con S_ij, i, j = 1, ..., N). Ciascun elemento della shape matrix SM = [B_ij] è:

         ⎧ 1    se  μ(S_ij ∩ S) ≥ μ(S_ij)/2
B_ij =   ⎨
         ⎩ 0    altrimenti

dove μ(F) è l'area della regione F. In parole: la cella vale 1 se la forma ne occupa almeno metà.

Polar model shape matrix: l'area circostante il centro di gravità viene in questo caso partizionata in settori definiti in termini di coordinate polari rispetto al centro. Il calcolo degli elementi della matrice è analogo al caso precedente.

Beam Angle Statistics

Il descrittore beam angle statistics (BAS) si basa sui raggi (beam) originati da un punto del contorno, definiti come le linee che congiungono il punto agli altri punti del contorno.

Sia B = {P₁, P₂, ..., P_N} il contorno rappresentato come sequenza connessa di punti P_i = (x_i, y_i), i = 1, ..., N. Per ciascun punto P_i il beam angle tra il beam vector successivo V_{i+k} = P_i P_{i+k} e quello precedente V_{i−k} = P_i P_{i−k}, nel neighborhood system di ordine k, viene calcolato come:

C_k(i) = θ(V_{i+k}) − θ(V_{i−k})

dove   θ(V_{i+k}) = arctan( (y_{i+k} − y_i) / (x_{i+k} − x_i) )
       θ(V_{i−k}) = arctan( (y_{i−k} − y_i) / (x_{i−k} − x_i) )

Una rappresentazione compatta si può ottenere considerando i beam angle di ciascun punto C_k(i) come una variabile casuale con distribuzione di probabilità P(C_k(i)) e calcolandone i momenti di diverso ordine (media, varianza, ecc.). È lo stesso trucco dei color moments del capitolo 4: una distribuzione si riassume con pochi momenti.

6. Shape signatures: le funzioni monodimensionali

Il calcolo di alcuni descrittori di forma richiede una rappresentazione monodimensionale del contorno. Le funzioni monodimensionali si derivano dalle coordinate dei punti di contorno e vengono chiamate shape signatures. La shape signature offre una descrizione completa della forma e viene spesso usata come rappresentazione di partenza per l'estrazione di altri descrittori (Fourier, Wavelet).

La funzione associa semplicemente a ciascun punto del contorno P_n(x(n), y(n)), con n ∈ [1, N], il numero complesso generato dalle sue coordinate:

z(n) = ( x(n) − g_x ) + i · ( y(n) − g_y )

dove (g_x, g_y) è il centroide. Grazie alla sottrazione del centroide la rappresentazione è invariante per traslazione.

La funzione associa a ciascun punto del contorno la sua distanza dal centroide:

r(n) = [ (x(n) − g_x)² + (y(n) − g_y)² ]^(1/2)

Anche questa è invariante per traslazione grazie alla sottrazione del centroide. Prove sperimentali hanno mostrato che è la migliore funzione per il calcolo della shape signature in vista dei descrittori di Fourier.

La funzione analizza l'area del triangolo formato da due punti consecutivi del contorno e il centroide. Al variare del punto lungo il contorno si ottiene di nuovo una funzione monodimensionale.

7. Descrittori di Fourier

In generale i descrittori di Fourier si ottengono applicando la trasformata di Fourier a una shape signature. Poiché — come detto — la migliore funzione risulta essere la centroid distance function r(t), la sua trasformata di Fourier discreta è:

       1   N−1
a_n = ───  Σ   r(t) · exp( −j2πnt / N ),        n = 0, 1, ..., N−1
       N   t=0

Poiché la centroid distance function è invariante solo per traslazione e rotazione, i coefficienti di Fourier devono essere normalizzati per renderli invarianti a cambiamenti di scala e rispetto al punto di partenza. La normalizzazione si effettua dividendo ogni coefficiente a_n per il primo coefficiente a₁.

Idea chiave

La logica dei descrittori di Fourier è la stessa del filtraggio passa basso del capitolo 2, applicata al contorno anziché all'immagine: i coefficienti di ordine basso descrivono la struttura complessiva della forma, quelli di ordine alto i dettagli fini e il rumore. Troncando la serie si ottiene un descrittore corto e robusto — l'equivalente analitico della polygon evolution della sezione 2.

Centroid distance function e ricostruzione di Fourier

A sinistra la forma (nera) con la sua ricostruzione da k coefficienti di Fourier (blu); a destra la centroid distance function r(t). Riduci k e osserva sparire prima i dettagli, poi la struttura: con pochissimi coefficienti resta un cerchio.

contorno + centroide r(t) centroid distance function DFT |a_n| normalizzati (a_n / a₁)
Tavola 5.3 — La catena completa: il contorno diventa una funzione 1D della distanza dal centroide, la DFT ne estrae i coefficienti e la divisione per a₁ li rende invarianti a scala e punto di partenza. La stella a 5 punte produce un picco netto sull'armonica 5.

8. I sistemi CBIR

I sistemi CBIR (Content Based Image Retrieval) ricercano immagini sulla base del loro contenuto — l'esempio quotidiano è Google Image Search. Le applicazioni pratiche sono numerose: digital photo album e piattaforme come Flickr, immagini mediche, musei digitali, ricerca di marchi.

Le componenti principali del sistema sono tre:

  1. Estrattore di feature — la rappresentazione delle immagini (i capitoli 4 e 5 al completo);
  2. Query engine — il calcolo della similarità tra immagini;
  3. Interfaccia utente.

Formulazione della query

Le modalità di formulazione della query sono diverse: query by keywords, query by sketch (l'utente disegna ciò che cerca), query by example (l'utente fornisce un'immagine simile). È possibile adottare meccanismi di relevance feedback per il miglioramento interattivo del risultato.

Il query engine e il semantic gap

La ricerca nei sistemi CBIR è necessariamente approssimata, basata sul concetto di similarità. Qui si annida il problema centrale, il semantic gap: la similarità è certamente un concetto soggettivo e di alto livello, mentre le feature estratte sono di basso livello. Due immagini con istogrammi quasi identici possono raffigurare cose completamente diverse; due foto dello stesso soggetto con illuminazione diversa possono avere descrittori lontanissimi.

Per mitigare il problema, i sistemi CBIR combinano feature diverse per sfruttare al meglio tutte le informazioni disponibili. È necessario definire un meccanismo in grado di combinare informazioni diverse, attribuendo un peso a ciascuna tipologia di feature. Due strade:

9. Fusione di score e relevance feedback

Borda Count

L'esempio classico di fusione di score è il Borda Count:

Nell'esempio visto a lezione, con 4 immagini, il descrittore di colore assegna i punteggi 4, 3, 2, 1 alle immagini in ordine di rilevanza; il descrittore di forma fa lo stesso con il proprio ordine; la fusione somma i punteggi ottenendo 7, 6, 3, 2 e ne deriva il ranking finale. Il vantaggio del metodo: non richiede che i punteggi delle diverse feature siano confrontabili tra loro (bastano gli ordini), il che elimina il problema della normalizzazione tra metriche eterogenee.

Fusione Borda Count

Assegna la posizione di ciascuna immagine nei due ranking (1 = più simile alla query) e osserva il ranking fuso. Prova il caso in cui le due feature sono in disaccordo totale: la fusione produce un pareggio, ed è esattamente l'informazione utile.

query image image database feature extraction distance measure retrieved images relevance feedback dell'utente query point movement + re-weighting
Tavola 5.4 — L'architettura CBIR: database e query attraversano lo stesso estrattore di feature, una misura di distanza produce il ranking, e il feedback dell'utente richiude il ciclo aggiornando la metrica di similarità.

Il relevance feedback

Il ciclo del relevance feedback è: query → ricerca → risultato → feedback dell'utente → aggiornamento della metrica di similarità → ricerca. L'utente generalmente indica un set di immagini rilevanti R (esempi positivi) e un set di immagini non rilevanti N (esempi negativi). La ricerca può essere modificata utilizzando due diversi meccanismi:

MeccanismoChe cosa fa
Query point movement Sposta la query q (un punto nello spazio delle feature) avvicinandola agli esempi positivi e allontanandola da quelli negativi.
Re-weighting Modifica il peso delle diverse feature, aumentando quello delle feature che massimizzano la similarità con gli esempi positivi.

I due meccanismi sono complementari e si usano tipicamente insieme.

Gli algoritmi

AlgoritmoMeccanismiFormulazione
Rocchio Query point movement, distanza euclidea q' = α·q + β·(1/|P|)·Σ_{p∈P} p − γ·(1/|N|)·Σ_{n∈N} n
MARS Query point movement, re-weighting, considera solo immagini rilevanti, distanza euclidea pesata d(q,r) = (q − r)ᵀ · W · (q − r) con vettore di pesi W_i = 1/σ_i
Mind Reader Query point movement, re-weighting, distanza di Mahalanobis Generalizza MARS usando la matrice di covarianza completa anziché i soli pesi diagonali

Il peso W_i = 1/σ_i di MARS ha una lettura immediata: una feature che negli esempi rilevanti varia poco (σ piccolo) è evidentemente caratteristica di ciò che l'utente cerca, e riceve peso alto; una feature che varia molto è irrilevante e viene attenuata.

Approccio basato su sottospazi KL

Una famiglia diversa di metodi rappresenta la query (le immagini rilevanti) come sottospazio KL dello spazio delle feature, aggiornato iterativamente in base ai feedback ricevuti dall'utente. La regione non rilevante, data l'eterogeneità delle immagini che la compongono, è invece rappresentata da uno spazio MKL (multiplo). L'asimmetria è concettualmente importante: ciò che l'utente cerca è coerente e sta in un sottospazio; ciò che non cerca è tutto il resto del mondo e non lo si può descrivere con un modello unico.

Verifica le tue conoscenze

Elencate le proprietà fondamentali che rendono efficace una feature di forma.

Identificabilità (oggetti simili → descrittori simili); invarianza a trasformazioni affini (rotazioni, traslazioni, scala); robustezza al rumore; invarianza rispetto a possibili occlusioni; indipendenza statistica e ripetibilità (descrittore compatto e riproducibile per la stessa tipologia di pattern).

Che cos'è la polygon evolution e come si ordina l'eliminazione dei vertici?

È un approccio iterativo di approssimazione poligonale che a ogni passo sostituisce due segmenti consecutivi s₁, s₂ con un unico segmento che unisce i loro estremi, per ignorare le variazioni minime e ridurre gli effetti del rumore di discretizzazione. L'ordine è dato dalla rilevanza K(s₁,s₂) = β(s₁,s₂)·l(s₁)·l(s₂) / (l(s₁)+l(s₂)), con β angolo al vertice comune e l lunghezze normalizzate rispetto alla lunghezza totale della curva.

Come si definiscono eccentricity, elongation, convexity e numero di Eulero?

Dalla bounding box (il più piccolo rettangolo contenente la forma): eccentricity = L/W ed elongation = 1 − L/W. Convexity: rapporto tra il perimetro del convex hull e quello della forma, O_convexhull / O. Numero di Eulero: Eul = S − N, con S numero di parti continue e N numero di buchi (1 per una figura piena, 0 con un buco, −1 con due buchi).

Come funziona il chain code e quali sono i suoi limiti?

Rappresenta la forma come sequenza connessa di segmenti, codificando la direzione di ciascuno spostamento con 8-connectivity (45°×i) o 4-connectivity (90°×i) in senso antiorario rispetto all'asse x positivo. È invariante per traslazione (codifica relativa), ma è molto sensibile al rumore e non invariante per rotazione.

Quali varianti risolvono i limiti del chain code?

Differential chain code: si calcola la differenza tra direzioni consecutive, sottraendo a ciascun elemento quello precedente modulo n (n = connettività); una rotazione rigida aggiunge una costante a tutti gli elementi e la differenza la elimina. Re-sampling chain code: si campiona il contorno in modo più grossolano prima del calcolo, per limitare l'influenza del rumore.

Come si costruisce una square model shape matrix?

Si costruisce un quadrato centrato nel centro di gravità G della forma, di lato 2L con L = massima distanza euclidea di G da un punto del bordo. Il quadrato è diviso in N × N sottoquadrati S_ij, e ogni elemento vale B_ij = 1 se μ(S_ij ∩ S) ≥ μ(S_ij)/2 (la forma occupa almeno metà cella), 0 altrimenti, dove μ è l'area. Nella variante polare si partiziona in settori in coordinate polari rispetto al centro.

Che cosa misura il descrittore Beam Angle Statistics?

Per ogni punto P_i del contorno misura l'angolo tra il beam vector successivo V_{i+k} e quello precedente V_{i−k} nel neighborhood di ordine k: C_k(i) = θ(V_{i+k}) − θ(V_{i−k}), con θ(V) = arctan(Δy/Δx). La rappresentazione compatta si ottiene trattando i C_k(i) come una variabile casuale e calcolandone i momenti (media, varianza, ...).

Che cos'è una shape signature? Elencate le tre viste a lezione.

È una funzione monodimensionale derivata dalle coordinate dei punti di contorno, che offre una descrizione completa della forma e serve da base per altri descrittori (Fourier, Wavelet). Le tre: complex coordinates z(n) = (x(n)−g_x) + i(y(n)−g_y); centroid distance function r(n) = [(x(n)−g_x)² + (y(n)−g_y)²]^(1/2); area function (area del triangolo formato da due punti consecutivi e il centroide). Le prime due sono invarianti per traslazione grazie alla sottrazione del centroide.

Come si calcolano e si normalizzano i descrittori di Fourier?

Si applica la DFT alla shape signature — sperimentalmente la migliore è la centroid distance function: a_n = (1/N)·Σ_{t=0}^{N−1} r(t)·exp(−j2πnt/N). Poiché r(t) è invariante solo per traslazione e rotazione, i coefficienti vanno normalizzati dividendo ogni a_n per il primo coefficiente a₁, ottenendo invarianza a scala e al punto di partenza.

Che cos'è il semantic gap nei sistemi CBIR?

È lo scarto per cui la similarità è un concetto soggettivo e di alto livello, mentre le feature estratte sono di basso livello. La ricerca CBIR è quindi necessariamente approssimata, basata su similarità. Per mitigarlo si combinano feature diverse pesandole, con tecniche di fusione di score o di apprendimento automatico.

Come funziona la fusione con Borda Count?

Ogni tipologia di feature produce un ranking delle immagini in base alla similarità con la query; i ranking vengono convertiti in punteggi (nell'esempio a 4 immagini: 4, 3, 2, 1), i punteggi delle diverse feature vengono sommati (ottenendo per esempio 7, 6, 3, 2) e la somma genera il ranking finale. Il vantaggio è che non richiede che gli score delle diverse feature siano confrontabili: usa solo gli ordini.

Distinguete query point movement e re-weighting.

Query point movement: sposta il punto query nello spazio delle feature avvicinandolo agli esempi positivi R e allontanandolo dai negativi N. Re-weighting: modifica il peso delle diverse feature, aumentando quello delle feature che massimizzano la similarità con gli esempi positivi. Rocchio usa solo il primo; MARS e Mind Reader entrambi.

Confrontate Rocchio, MARS e Mind Reader.

Rocchio: solo query point movement, distanza euclidea, q' = αq + β(1/|P|)Σp − γ(1/|N|)Σn. MARS: query point movement e re-weighting, considera solo le immagini rilevanti, distanza euclidea pesata d(q,r) = (q−r)ᵀW(q−r) con W_i = 1/σ_i. Mind Reader: query point movement e re-weighting con distanza di Mahalanobis, quindi con matrice di covarianza completa.

Perché nell'approccio a sottospazi KL la regione non rilevante si modella diversamente?

Perché le immagini rilevanti sono coerenti e possono essere rappresentate da un sottospazio KL dello spazio delle feature, aggiornato iterativamente con i feedback; la regione non rilevante è invece eterogenea — è "tutto il resto" — e viene perciò rappresentata da uno spazio MKL, cioè multiplo.