Lo strumento si basa sul riconoscimento dei bordi, in particolare delle linee rette e sull'analisi
della loro inclinazione. Nella nuova versione rappresenta un ulteriore passo verso la costruzione di uno strumento più elaborato,
basato su una vera e proprio "shape detection" (riconoscimento delle forme).
Per ottenere una stima della rotazione necessaria per allineare le foto che si vogliono utilizzare per
ottenere l'immagine HDR si parte scegliendo l'area in cui cercare la linea retta (o, adesso, anche le rette) da
come riferimento. Essa viene individuata attraverso lo stesso rettangolo con bordo rosso che si può
utilizzare per analizzare in modo automatico lo shift. Basta quindi cliccare una volta sull'immagine
meno esposta per aprirlo, e cliccare poi due volte per chiuderlo. Bisogna considerare che conviene,
ovviamente, scegliere un rettangolo che sia orientato parallelamente al bordo da analizzare:
rettangolo verticale per borti ca. verticali e rettangoli orizzontali per bordi ca. orizzontali.
Adesso non è più necessario che nella zona scelta sia presente un unico bordo ben delimitato, perché l'algoritmo
ha acquisito la capacità di analizzare più rette contemporaneamente in uno stesso riquadro.
Si consiglia comunque di evitare "situazioni troppo complicate", con molti bordi ditribuiti su più
angoli diversi, perché ciò potrebbe comunque causare errori!
Questa nuova versione dell'algoritmo risulta poi molto più veloce della precedente!
L'algoritmo si basa sull'individuazione dei punti in cui il gradiente è maggiore, per poi creare la migliore
retta di regressione e utilizzare l'inclinazione di quest'ultima come riferimento per confrontare le foto.
La capacità di gestire più rette è stata ottenuta attraverso l'aggiunta dei seguenti passaggi:
- Inserimento di tutti i vettori gradiente dei punti individuati in un datatable
- Ordinamento secondo l'angolo rilevato e creazione di un istogramma in modo da selezionare
gli angoli più rappresentati.
- Ordinamento dei punti corrispondenti ad ognuno degli angoli più rappresentati sull'asse che più si
avvicina ad essere ortogonale alla retta che approssima la distribuzione di tali punti (dopo avere
scorporato la pendenza corrispondente all'angolo trovato) in modo da individuare le
coordinate più rappresentate.
Questo passaggio è per separare i bordi paralleli.
- Determinazione per ognuno di tali sottogruppi di punti della retta di regressione che meglio ne approssima
la distribuzione.
- Confronto delle angolazioni delle rette di regressione omologhe nelle due o tre foto inserite,
dopo avere scartato quelle non presenti in tutte le foto.
- Calcolo della rotazione che meglio permette di descrivere le differenze di angolazione fra le rette presenti nelle varie foto.
Il vettore gradiente è in generale composto da due componenti diversi: uno relativo alla luminosità (ovvero
al modulo del vettore che descrive il colore presente nel pixel) e uno relativo all'orientamento (ovvero
al versore del vettore che descrive il colore presente nel pixel). Ad esempio, al passaggio da una zona grigio chiara
ad una nera il primo componente è grande, mentre il secondo è nullo. Al contrario, passando da una zona
blu puro (#0000ff) ad una verde puro (#00ff00) il primo componente è nullo, mentre il secondo è massimo.
Sono disponbili quattro modalità di calcolo del gradiente totale:
- Pesato: Il gradiente totale viene calcolato facendo pesare di più il componente predominante,
in modo da esaltare le differenze
- Predominante: In ogni punto si considera solo il componente predominante
- Cromatico: si considera solo il componente relativo all'orientamento dei vettori
- Luminosità: si considera solo il componente relativo al modulo dei vettori. E' la scelta più conveniente
nella maggior parte dei casi.
I parametri su cui si può agire per ottimizzare il processo sono due. Il primo è la frazione minima del modulo del
vettore gradiente
totale rispetto al massimo gradiente trovato nella zona indagata, affinché il punto venga considerato
(Min modulo che si adatta perciò in automatico al variare della luminosità delle immagini da analizzare).
Il secondo è la soglia frazionaria dei picchi nella distribuzione degli angoli da superare perché un picco venga considerato
(come riferimento si utilizza il valore del picco più alto).
Per ottenere angoli corretti è necessario scegliere opportunamente i parametri, in particolare
modulo minimo e il tipo di gradiente da utilizzare. Se il modulo minimo è troppo piccolo, allora
non ci saranno abbastanza punti per creare la retta di regressione, se il modulo minimo è
troppo grande, allora il bordo non verrà evidenziato verrà mascherato da punti che non appartengono ad esso.
Per quanto riguarda invece la soglia frazionaria dei picchi nella distribuzione degli angoli,
una soglia troppo alta può
portare a scartare bordi pur presenti in maniera univoca, se il gradiente è poco marcato,
una soglia troppo bassa può portare invece a considerare rilevanti angoli che in realtà corrispondono
a gradienti distribuiti in modo casuale e senza alcun significato.
Consideriamo a titolo di esempio tre immagini, in realtà sempre la stessa ruotata di angoli noti (0.05°
e 0.1°):
Immagine ruotata di 0.05°
|
Immagine originale di 0.1°
|
Immagine originale
|
In questo caso è possibile stabilire di analizzare la zona come qui di seguito in figura
Utilizzando Min Modulo = 0.5, Soglia picchi angoli = 0.85 e Gradiente Luminosità (di regola quello più affidabile), si ottiene
quanto segue. Nelle tre figure i pixel bianchi sono quelli considerati per il calcolo della retta di regressione.
con il suggerimento di ruotare (correttamente) la prima immagine di -0.053° e la seconda
di -0.099°.
Notare il caso, invece, in cui nel rettangolo sono presenti due bordi contemporaneamente:
Utilizzando i medesimi parametri si ottiene allora quanto segue:
con il suggerimento di ruotare le immagini rispettivamente di -0.055° e -0.102°. un risultato, quindi,
appena meno corretto che nel caso precedente!
Le immagini sono apribili e scaricabili in originale per poterle utilizzare per fare esercizio!
Ovviamente lo strumento presentato si presta in particolare per foto di architettura, mentre risulta
tendenzialmente inutile nel caso di paesaggi, dove sarebbe necessario un approccio basato su un processo
di fit pixel per pixel!