# Rilevatore di Harris

Il rilevatore di Harris è un rilevatore di angoli introdotto da Chris Harris e Mike Stephens nel 1988, estensione del rilevatore di Moravec che ne migliora l'accuratezza nel distinguere gli angoli dai bordi.
Benché sia stato sopravanzato da altri rilevatori come SIFT, SURF e ORB, il rilevatore di Harris rimane un algoritmo importante in visione artificiale, del quale esistono diverse estensioni, e ha applicazioni in registratura, mosaicizzazione, ricostruzione tridimensionale, rilevamento del movimento, riconoscimento di oggetti, image retrieval e video tracking.

## Descrizione

In un'immagine digitale, un angolo è un punto $P$ che si trova all'intersezione di due bordi, ovvero il gradiente dell'intensità in un intorno di $P$ presenta due direzioni dominanti distinte. Gli angoli sono caratteristiche importanti in un'immagine e contengono informazioni per rappresentarne il contenuto in molti problemi di visione artificiale.
Il rilevatore di Harris determina l'angolarità di un punto analizzando il cambiamento di intensità in un intorno del punto in funzione di una traslazione dell'intorno. Data un'immagine digitale $I$ in scala di grigi e un intorno $W$ centrato in $(x,y)$, se $W$ è soggetto a una traslazione $(\Delta x,\Delta y)$ la somma dei quadrati residui $SSD(\Delta x,\Delta y)$ dell'intensità tra $W$ e la sua traslazione assumerà un valore elevato se la direzione $(\Delta x,\Delta y)$ è ortogonale a un bordo, o un valore piccolo se l'intorno del punto è una regione piatta o se $(\Delta x,\Delta y)$ è parallela a un bordo.
Se si considerano tutte le possibili direzioni di traslazione, il punto in analisi è probabilmente parte di una regione piatta se la $SSD$ ha un valore limitato in ogni direzione, è probabilmente situato in prossimità di un bordo se la $SSD$ ha un valore dominante in una direzione (ortogonale al bordo), oppure è probabilmente situato in prossimità di un angolo se la $SSD$ assume valori elevati in ogni direzione.
La somma dei quadrati residui può essere espressa come
    $SSD(\Delta x,\Delta y)={\underset {(x_{k},y_{k})\in W}{\sum }}\left(I(x_{k},y_{k})-I(x_{k}+\Delta x,y_{k}+\Delta y)\right)^{2}.$
Approssimando $I(x+\Delta x,y+\Delta y)$ con un'espansione in serie di Taylor, dove $I_{x}$ e $I_{y}$ sono le derivate parziali dell'intensità $I$
    $I(x+\Delta x,y+\Delta y)\approx I(x,y)+I_{x}(x,y)\Delta x+I_{y}(x,y)\Delta y$
si ottiene che
    $SSD(\Delta x,\Delta y)\approx {\underset {(x,y)\in W}{\sum }}\left(I_{x}(x,y)\Delta x+I_{y}(x,y)\Delta y\right)^{2},$
che può essere riscritta in forma matriciale come
    $SSD(\Delta x,\Delta y)\approx {\begin{pmatrix}\Delta x&\Delta y\end{pmatrix}}M{\begin{pmatrix}\Delta x\\\Delta y\end{pmatrix}},$
dove $M$ è noto come tensore di struttura
    $M={\underset {(x,y)\in W}{\sum }}{\begin{bmatrix}I_{x}^{2}&I_{x}I_{y}\\I_{x}I_{y}&I_{y}^{2}\end{bmatrix}}={\begin{bmatrix}{\underset {(x,y)\in W}{\sum }}I_{x}^{2}&{\underset {(x,y)\in W}{\sum }}I_{x}I_{y}\\{\underset {(x,y)\in W}{\sum }}I_{x}I_{y}&{\underset {(x,y)\in W}{\sum }}I_{y}^{2}\end{bmatrix}}.$
Gli autovettori del tensore di struttura determinano le direzioni di massima e minima variazione della somma dei quadrati residui, e i corrispondenti autovalori $\lambda _{1}$ e $\lambda _{2}$ quantificano la variazione lungo le rispettive direzioni. Se entrambi gli autovalori sono piccoli, la SSD ha valori piccoli in ogni direzione e il punto in analisi è probabilmente parte di una regione piatta, se un autovalore è significativamente maggiore dell'altro, la SSD ha una direzione dominante e il punto è probabilmente locato in prossimità di un bordo, mentre se entrambi gli autovalori sono elevati la SSD ha valori elevati in ogni direzione e il punto è probabilmente locato in prossimità di un angolo.
Per quantificare l'angolarità di un punto viene definita una funzione di risposta $R$
    $R=\det(M)-k(\operatorname {tr} (M))^{2}=\lambda _{1}\lambda _{2}-k(\lambda _{1}+\lambda _{2})^{2}$
dove $k$ è una costante, empiricamente determinata come $k\in [0.04,0.06]$.
L'algoritmo di Harris può essere riassunto come:
* conversione dell'immagine in scala di grigi;
* riduzione del rumore tramite un filtro Gaussiano;
* approssimazione del gradiente tramite l'operatore di Sobel;
* per ogni pixel dell'immagine, calcolo della funzione di risposta $R$ in un intorno di dimensione $3\times 3$;
* determinazione dei punti di massimo locale di $R$, che rappresentano gli angoli rilevati nell'immagine.