Tecniche avanzate di Photo stitching
Control points t1/t2 e opzioni "Layers" di PTgui

16 Marzo 2006

Sei il visitatore numero 14677


Introduzione

Nel secondo articolo della serie abbiamo illustrato le tecniche per eseguire uno Stitch con PTGui 5.5, tralasciando però un paio di aspetti che sono argomento di questo articolo di approfondimento: tratteremo i Control Points t1 e t2, l'utilizzo avanzato dell'Optimizer ed infine la creazione di panoramiche utilizzando le varie strutture "Layers" disponibili.

Aggiornamento Marzo 2008: Inserite alcune note su PTgui 7 ed una illustrazione riferita all'Optimizer di PTgui 6 (nel paragrafo "Control Points t1 e t2")
Revisione Ottobre 2007: layout rinnovato.




PTGui 5.7

Prima di inziare, vorrei presentare alcune novità introdotte nell'ultima versione di PTGUi, la 5.7 rilasciata il 3 Marzo 2006:

- supporto per il formato di uscita PSB di Photoshop, che permette di realizzare immagini di dimensioni enormi, fino a 300.000 x 300.000 pixel, superando la precedente barriera dei 4Gbyte di dimensione massima per una immagine;
- in Tools/Options/Directories&Files possono essere configurate fino a 5 dischi/cartelle contemporaneamente per i files temporanei, in modo da poter espandere secondo le esigenze lo spazio di memorizzazione;
- i dati EXIF vengono adesso letti anche dai files TIFF (oltre che dai JPG), funzione molto comoda per chi scatta in RAW e converte in TIFF: in questo modo la lunghezza focale dell'ottica usata e il formato del sensore vengono associati in automatico.

Sono state inoltre effettuate una serie di correzioni al codice, percui ritengo consigliabile l'upgrade anche a coloro non fossero interessati alle novità sopra menzionate.




Control Points t1 e t2

Fino ad oggi abbiamo discusso solamente dei Control Points che PTGui indica come "Normal", ovvero le coppie di riferimenti che servono all'Optimizer per giuntare correttamente gli scatti appartenenti ad uno Stitch.

Esistono tuttavia altri due tipi di Control Points: i "t1" (Linea verticale) e i "t2" (Linea orizzontale), che possono essere utilizzati per allineare correttamente uno Sticth e per eseguire correzioni prospettiche sulle immagini, siano esse Stitch oppure scatti singoli. In elenco troviamo anche una categoria "t3" (Linea) che era supportata dalle Panotools ma non è attualmente supportata da PTGui.



Per comprendere quali sono le potenzialità dei CP t1 e t2, esaminiamo il caso di una singola immagine che ritrae un particolare della facciata della chiesa di S.Miniato a Monte, Firenze.


Al fine di rendere evidente la correzione prospettica, l'immagine è stata volutamente ripresa da un punto non ottimale. L'obiettivo che ci poniamo è quello di ricostruire una vista "corretta" del mosaico, come se fosse stato ripreso dal punto ottimale, ovvero da posizione frontale e in asse.

Per eseguire questa operazione, PTGui ci offre strumenti estremamente potenti come i Control Points t1 e t2 abbinati all'Optimizer. Si tratta in pratica di indicare a PTGui una serie di linee rette che definiscono assi orizzontali e/o verticali della scena inquadrata: questi dati forniranno indicazioni circa i parametri di ripresa Yaw/Pitch/Roll che, assieme al dato dell'angolo di ripresa dell'ottica utilizzata, consentiranno di effettuare una perfetta correzione prospettica.

Seguiamo dunque passo per passo le operazioni da eseguire.

Si apre un nuovo progetto PTGui in modalità avanzata (Advanced), si passa al pannello "Source images" e si apre l'immagine da correggere (col tasto Add), che nel nostro caso è in formato TIFF:



La versione 5.7 di PTGui riconosce automaticamente i dati di scatto estraendoli dai dati EXIF presenti nel file TIFF. Occorre comunque controllare ogni volta la correttezza di questi dati prima di procedere.

A questo punto si passa direttamente al pannello "Control Points":



I punti di riferimento immessi non definiscono -come detto- i punti di corrispondenza tra le immagini, bensì delle rette che nella realtà sono disposte verticalmente oppure orizzontalmente. La facciata della chiesa di S.Miniato a Monte ci aiuta molto in questa operazione, data la presenza di geometrie molto ben definite.

Come si vede, PTGui apre due finestre (anche se l'immagine è unica) e i punti di riferimento sono inseriti uno per ciascuna immagine. Il CP1 ad esempio, definisce una linea orizzontale il cui estremi sono indicati nelle due finestre. La stessa cosa accade per i CP2 ,5 e 6 (orizzontali) e per i CP3 e 4 (verticali).
Per ottenere un calcolo molto preciso, è necessario inserire diverse linee orizzontali e verticali in modo da interessare tutto il fotogramma. Riferimenti scarsi oppure mal distribuiti porteranno ad errori di calcolo maggiori.

Nel pannello "Panorama settings" si deve solamente impostare la proiezione rettilineare (Rectilinear -flat).
Passiamo adesso al pannello "Optimizer", che stavolta dovremo utilizzare con l'
interfaccia avanzata:


Rappresentazione tridimensionale dei valori Yaw, Pitch e Roll



Pannello "Optimizer" di Ptgui 5.7


Stesse impostazioni sul pannello "Optimizer" di Ptgui 6


Nella modalità avanzata dell'Optimizer è possibile selezionare in maniera individuale quali sono i parametri da ottimizzare in automatico e quali non devono essere ottimizzati, mantenendo così il valore assegnato per default.

Per quanto riguarda i parametri di puntamento della fotocamera (Yaw,Pitch,Roll) ho scelto di ottimizzarli tutti, in quanto durante lo scatto la fotocamera era ruotata su tutti e tre gli assi (in particolare era rivolta verso sinistra, verso l'alto e leggermente ruotata). Se fossi stato certo di aver posizionato la fotocamera perfettamente in bolla, non avrei ottimizzato i parametri relativi, ovvero avrei mantenuto Roll=0 e Pitch=0. Infatti tutti i parametri assumono il valore iniziale di zero.

Nella lista "Use control points of" bisogna specificare quali control points si vogliono utilizzare: normalmente si utilizzano i control points presenti in tutte le immagini del progetto e dunque si spuntano tutte le caselle. Nel nostro caso abbiamo spuntato "Image 0" che è la prima e unica immagine presente.

Nella lista "Lens parameters" bisogna invece indicare quali parametri relativi all'obiettivo utilizzato dovranno essere ottimizzati. Il principio è sempre lo stesso: i parametri dei quali conosciamo con certezza il valore non li faremo ottimizzare, mentre quelli incerti e/o sconosciuti li faremo ricavare in automatico a PTGui spuntando la casella corrispondente.

Nel caso specifico ho selezionato solo "b", che specifica il valore di distorsione barilotto/cuscinetto dell'obiettivo usato (Nikon AI-P 45mm f/2.8), che al momento era sconosciuto. I valori "a" e "c" normalmente si possono considerare zero, dunque ho scelto di non ottimizzarli.

Per quanto riguarda "Field of View" (angolo di campo) ho preferito mantenere i valori impostati manualmente in precedenza, così come ho fatto per i valori di decentramento "Shift" che inizialmente si possono considerare uguali a zero.

I valori di "Shear" non hanno alcun significato nelle immagini riprese con fotocamere digitali, dunque non devono essere ottimizzati.

Prima di verificare il risultato dell'ottimizzazione, rispondo ad una quesito che probabilmente vi sarete posti: dato che l'Optimizer permette di controllare i parametri relativi al puntamento della fotocamera e quelli relativi all'obiettivo utilizzato, perchè non selezionarli sempre tutti?
Ebbene, possiamo immaginare l'ottimizzazione di PTGui come una complessa equazione matematica, in cui
maggiore è il numero di incognite, maggiore è la possibilità di arrivare a risultati incongruenti. Viceversa, potendo fissare con certezza alcuni valori, si focalizza il calcolo solo sulle variabili realmente incognite.
Facciamo un esempio: se dovessimo semplicemente raddrizzare le linee cadenti di un palazzo ripreso dal basso verso l'alto, dovremmo inserire alcuni CP t1 (verticali) e far ottimizzare il Pitch ed eventualmente il Roll, ma sarebbe inutile e probabilmente dannoso far ottimizzare anche lo Yaw.

A questo punto è possibile avviare l'ottimizzazione, cliccando su "Run Optimizer":



I risultati numerici dell'ottimizzazione sembrano molto buoni (addirittura PTGui sottolinea "troppo buoni per essere veri"!), ma è buona norma verificare il lavoro svolto aprendo il "Panorama Editor" (Ctrl+E). Se il risultato finale ci soddisfa, si procede alla creazione dello Stitch finale, selezionando il metodo di interpolazione "Lanczos", per garantire la miglior qualità del risultato.

a.
b.
c.
d.


Nella sequenza di immagini sopra riportata è riassunto l'intero percorso di correzione della prospettiva. Partendo da sinistra, abbiamo:

- a. il ritaglio della zona interessata dell'immagine originale
- b. la ricostruzione dell'immagine corretta, così come appare in "Panorama Editor". Da qui è gia possibile notare la validità di massima dei calcoli, dato che l'immagine risulta sostanzialmente corretta ed è sta collocata nel quadrante in alto a sinistra
- c. nell'immagine successiva si può vedere il ritaglio dello Stitch finale, dove le proporzioni del soggetto sembrano correttamente ricostruite
- d. nell'ultima immagine è stata infine sovrapposta la griglia di Photoshop, in modo da verificare l'ottima correzioni delle linee orizzontali e verticali.

Il risultato, dal punto di vista prettamente geometrico, è da ritenersi eccellente. Le linee verticali ed orizzontali sono state ricostruite molto bene, ed anche la distorsione appare sotto controllo, segno evidente che l'Optimizer aveva a disposizione riferimenti t1/t2 sufficienti e ben distribuiti.
Ovviamente PTGui ricostruisce la scena a livello bidimensionale, ma non può certo ricostruire la scena tridimensionale, cosa impossibile perchè non sono visibili molti elementi come ad esempio la porzione di mosaico nascosta dal timpano centrale.

Nota: questa è una legge fisica alla quale devono sottostare anche le macchine professionali a corpi mobili e le fotocamere dotabili di obiettivi Tilt/Shift, con le quali la correzione della prospettiva è ottenuta direttamente sul campo decentrando verticalmente e/o orizzontalmente l'ottica rispetto alla pellicola. A favore di questi strumenti va però detto che il risultato si ottiene senza alcuna post-produzione e senza necessità di avere precisi riferimenti ortogonali all'interno dell'immagine.


Al fine di determinare la precisione con cui è possibile ricostruire le esatte proporzioni del soggetto, ho eseguito uno scatto con inquadratura simile ad un soggetto di dimensioni conosciute. Questi i risultati:

a.
b.
c.
d.

 

Le immagini si presentano nella stessa sequenza dell'esempio di S.Miniato. La misura del quadretto è di 20,7x30,5cm con un rapporto tra i lati pari a 1,475, mentre sulllo Stitch finale ho misurato 1616x1078 pixel, con un rapporto di 1,499. Tenuto conto delle inevitabili imprecisioni di inserimento dei control points e delle tolleranze di calcolo, il risultato è da ritenersi molto soddisfacente, con un errore di poco superiore al 1,5%.

Tuttavia il calcolo di quest'ultimo progetto non ha prodotto buoni risultati affinchè non ho inserito in modo manuale l'esatto valore di "b" dell'ottica in uso (-0,0058, nel pannello "lens settings") per poi ottimizzare escludendo "b".
Il motivo è da ricondursi alla concentrazione dei riferimenti t1 e t2 in porzioni limitate del fotogramma (la cornice del quadretto), mentre per un calcolo ottimale sarebbero stati necessari altri riferimenti, specialmente nella zona mediana del fotogramma.

Nota: nel caso l'optimizer calcoli valori sballati di distorsione "b" e questo parametro non sia conosciuto, è preferibile lasciarlo al valore inziale (zero), mantenendolo escluso dall'ottimizzazione. Una volta ottimizzato il progetto per Yaw Pitch e Roll, si procede ad una seconda ottimizzazione esclusiva per "b".
Questo non è il workflow ottimale, ma può risolvere egregiamente situazioni del genere.


Da qui nasce l'utilità di costruirsi un database di valori di distorsione per le ottiche in nostro possesso, perlomeno per quelle che utilizziamo normalmente per questo genere di operazioni.

Prima di concludere con questo argomento, vediamo in quali altre situazioni possono essere utili i controlli t1 e t2.
Indubbiamente i casi sono molti, e spaziano dalla correzione prospettica di un singolo scatto -come abbiamo appena visto- all'allineamento di uno Sticth panoramico: infatti i controlli t1 e t2 possono essere utilizzati in combinazione ai CP "normal" usati per la giunzione di più fotogrammi.
Quando ad esempio ci troviamo di fronte ad uno Stitch con la linea dell'orizzonte mal orientata, è possibile agire manualmente sul "Panorama Editor" -come abbiamo visto nel precedente articolo- oppure è possibile introdurre un controllo t2 (orizzontale) in modo da tracciare una linea orizzontale virtuale tra il primo e l'ultimo fotogramma. Dopo una successiva ottimizzazione, la nostra immagine risulterà allineata senza alcun intervento manuale. Lo stesso concetto è ovviamente applicabile alle linee verticali, utilizzando i CP t1 (verticali).

Resta il fatto che PTGui non potrà soddisfare completamente le condizioni richieste se durante i calcoli troverà "condizioni impossibili", ovvero indicazioni di CP t1 e t2 non compatibili tra loro oppure CP normali (di giunzione) che forniscono geometrie incompatibili con i CP t1 e t2 . La misura con la quale la condizione fissata da un CP è stata rispettata (sia esso normale o t1/t2) si può dedurre dal valore Distance (distanza) riportato nella "Control point table": più alto è il valore di Distance, minore è il rispetto della la condizione.

Nota: la procedura di correzione prospettica affrontata in questo capitolo si applica fino alla versione 6.0.3 di PTgui.
A partire dalla versione 7 la gestione dei CP t1/t2 è stata modificata, migliorandone l'efficienza per quanto riguarda l'allineamento dei panorami, ma rendendo impossibili le correzioni prospettiche. L'optimizer di Ptgui 7 infatti considera i CP t1/t2 solamente DOPO aver unito i fotogrammi. Ciò equivale a trascinare un'immagine nel "panorama editor" con l'opzione "edit entire panorama" selezionata, con la quale non si riesce a ricostruire la corretta prospettiva frontale.
Viceversa, PTgui 6 esegue PRIMA la verifica dei CP t1/t2, ricavando la corretta prospettiva per ciascuna immagine, per poi procedere all'unione dei fotogrammi. Ciò equivale a trascinare un'immagine nel "panorama editor" con l'opzione "edit individual images" selezionata.





Uscita in formato "Blended and Layers": modifica delle transizioni.

Come sappiamo, una volta completata la preparazione di uno Stitch, si procede alla creazione dell'immagine finale agendo sul pannello "Create Panorama".
Nel precedente articolo abbiamo detto che conviene utilizzare i formati di uscita senza perdita di dati come il TIFF e il PSD, ai quali si aggiunge oggi il formato PSB (compatibile solo con Photoshop CS e versioni successive). Nel campo successivo "Layers" abbiamo finora utilizzato la sola opzione "Blended panorama only", con la quale si ottiene uno Stitch composto da un unico layer (livello) contenente l'immagine finita.

Tra le opzioni troviamo anche "Blended and layers", che ci interessa trattare perchè consente di gestire ulteriormente lo Stitch in fase di post-elaborazione, nel nostro caso Photoshop.

Di fatto l'uscita "Blended and layers" costruisce un file nel quale al livello più basso si trova lo Stitch completo (elaborato dal Blender), mentre sui livelli superiori si trovano le singole immagini componenti lo Stitch, già trasformate (warped) e con tonalità corretta (quando viene spuntata la casella "Color correct layers").

Questa struttura del file grafico di uscita si rivela estremamente utile sia nel caso in cui i fotogrammi non si sovrappongono perfettamente (scatti eseguiti a mano libera), sia quando nella scena ci sono elementi in movimento.

Qui di seguito ho riportato uno Stitch composto da tre fotogrammi che utilizzerò come esempio e, di fianco, la relativa struttura dei livelli costruita da PTGui:

     

Come si vede, ciascun layer ha una propria maschera di livello. Il livello più basso, quello che contiene lo Stitch, ha una maschera che rende visibile l'intera immagine, fatte salve le aree dove non esistono informazioni. I livelli sovrastanti contengono le singole immagini che coprirebbero l'immagine finale, ma le maschere di livello sono completamente nere e dunque rendono di fatto invisibili questi livelli.

Lo Stitch è stato eseguito a mano libera, dunque le singole immagini non sono perfettamente giuntabili, in particolar modo nei soggetti più vicini. Il Blender ha generato un panorama nel quale questi errori sono stati mascherati il più possibile, ma è evidente che oltre una certa soglia i difetti di giunzione divengono visibili. Utilizzando l'uscita "Blended panorama only" questi possibili errori di giunzione vanno cercati scrutando con attenzione l'intera immagine, operazione scomoda e stancante.
Utilizzando invece l'uscita "
Blended and layers" è possibile sovrapporre temporaneamente i livelli delle singole immagini, in modo da rendere immediatamente visibili le eventuali differenze tra l'immagine originale e la versione finale (elaborata dal blender).
Per eseguire questa operazione è sufficiente fare Shift+Click sulla maschera del livello interessato (tasto sinistro del mouse). Nel caso in esame, attivando il layer "Image 1" mi sono accorto di una transizione non perfettamente gestita dal Blender, all'altezza degli scalini in primo piano:


a.
b.
a. = Particolare della scalinata, elaborazione del Blender
b. = Stesso particolare, versione reale registrata nello scatto centrale (Image 1)


Se avessimo scelto di far calcolare a PTGui la sola immagine "Blended", a questo punto non ci rimarrebbe che provare a rendere meno visibile l'artefatto utilizzando il "Timbro Clone" di Photoshop o strumenti simili di altre applicazioni di fotoritocco. In questo caso invece, avendo a disposizione i singoli scatti originali già trasformati, la soluzione è molto più semplice:
si recupera il particolare dallo scatto "Image 1", spostando di fatto la transizione tra i due fotogrammi contigui. Faremo cioè in modo che la mancata corrispondenza si sposti in un'area dove l'artefatto è meno visibile, lasciando intatta la zona di separazione tra le due pietre.

Si agisce molto semplicemente:

- si riattiva la maschera di livello di "Image 1" (con Shift+Click)
- si seleziona lo strumento "Gomma da cancellare" (Eraser tool) e si imposta una dimensione adeguata dello strumento con durezza 0%
- si imposta l'opacità dello strumento al 100%
- si seleziona la maschera di livello "Image 1" con un semplice Click
- si utilizza la gomma per cancellare in maniera selettiva la maschera di livello, in modo da far apparire il dettaglio dell'immagine originale.

Qui di seguito è evidenziato l'effetto della correzione, mostrando la situazione iniziale e finale della maschera di livello, della linea di transizione e dell'immagine risultante:

a.
b.
a. = Situazione iniziale (Blender) 
     b. = Situazione finale dopo l'intervento sulla maschera di livello di "Image 1" con lo strumento "Gomma"


Il risultato è evidente: lo spostamento della transizione in un'area senza geometrie riconoscibili ha praticamente risolto il problema. L'artefatto è stato riposizionato in una zona dell'immagine dove l'occhio non ha riferimenti precisi per identificarlo.

Nota (marzo 2008): le procedure descritte in questo e nei seguenti capitoli si applicano anche a PTgui e PTGui Pro versione 7.





Uscita in formato "Blended and Layers": gestione degli elementi in movimento.

L'uscita "Blended and Layers" può essere utile anche per gestire Stitch in cui vi sono elementi in movimento, come ad esempio uno Stitch di una piazza affollata.

Se una persona viene ripresa due volte in due fotogrammi distinti dello Stitch, esistono solamente due possibili scelte: lasciare che la persona appaia due volte (talvolta la cosa non è così evidente) oppure cercare di clonarla con il "Timbro Clone" di Photoshop.
Quando invece
una persona in movimento si trova nella zona di transizione tra due scatti dello Stitch, la situazione si complica perchè il Blender potrebbe creare una immagine con artefatti evidenti, oltre ad una correzione tonale sballata.

In questi casi conviene innanzitutto selezionare l'uscita "Blended and Layers" e creare lo Stitch disattivando l'opzione "Color correct layers", facendo però attenzione a correggere la tonalità degli scatti originali, con particolare attenzione alla vignettatura dell'obiettivo utilizzato: scattando in RAW, è ad esempio possibile agire sull'apposito comando di Adobe Camera RAW, nel pannello "Lens".

A titolo di esempio, realizzeremo lo Stitch dei due seguenti fotogrammi scattati a mano libera (anche se ovviamente il caso costituirebbe una situazione reale solo in presenza di altri soggetti in movimento presenti nell'inquadratura):

 



Lo Stitch creato dal Blender di PTGui con le due immagini è il seguente:



Apparentemente il solo problema da risolvere è la prevista duplicazione e parziale sovrapposizione dei soggetti in movimento, ma analizzando l'immagine più da vicino scopriamo altri artefatti:

a.
b.
a. = Particolare dell'elaborazione calcolata dal Blender
b. = Stesso particolare, versione reale registrata nello scatto di sinistra (Image 0)



Notiamo innanzitutto che il Blender ha appiattito i toni degli abiti sia della ragazza che del ragazzo, probabilmente perchè il software cerca di omogeneizzare le tonalità dei due scatti anche laddove le immagini contengono informazioni completamente diverse tra loro.
Un altro problema è la colonna visibile tra le due coppie, che risulta molto schiacciata a causa dell'errore di parallasse introdotto per non aver ruotato la fotocamera attorno al punto nodale dell'ottica.

Grazie al fatto di aver scelto l'uscita "Blended and Layers", tutti e tre i problemi sono risolvibili utilizzando con astuzia lo strumento "Gomma" di Photoshop. Vediamo come:

a.
b.
a. = Particolare della maschera di livello (Image 0) e dell'immagine calcolata dal Blender
b. = Situazione finale dopo la correzione della maschera di livello di "Image 0" con lo strumento "Gomma"



Con la correzione alla maschera di livello di "Image 0" abbiamo recuperato i toni originali della coppia di sinistra (che vogliamo mantenere) ed abbiamo eliminato la coppia di sinistra recuperando lo sfondo presente nell'immagine di destra. Abbiamo così spostato di fatto anche la transizione tra i due fotogrammi, facendo in modo che l'artefatto riguardante le colonne risulti molto meno visibile: mentre l'immagine iniziale presentava una colonna schiacciata, adesso l'artefatto è stato allontanato dalla "zona di attenzione" e consiste nel fatto che due colonne sono più vicine tra loro.

Ecco lo Stitch definitivo:



Un'ultima osservazione: risulta evidente l'importanza di prevedere aree di sovrapposizione ampie al momento dello scatto. Se per gli Sticth classici una sovrapposizione media del 20-30% può andar bene, quando siamo in presenza di soggetti in movimento è bene aumentare la sovrapposizione anche fino al 50%. In questo modo realizzeremo più scatti ma avremo la possibilità di gestire molto meglio le transizioni.




Uscita in formato "Individual Layers only"

L'usicta in formato "Individual Layers only" è la terza opportunità prevista per la creazione dello Stitch finale, molto probabilmente quella meno utilizzata in assoluto.

Il motivo di ciò risiede nel fatto che il file di uscita così creato conterrà solamente i livelli dei singoli fotogrammi, con le immagini opportunamente trasformate ma senza l'intervento del Blender:

     

Come si vede non esiste una gestione efficace delle transizioni, dunque i passaggi da un fotogramma all'altro risultano bruschi e molto evidenti. L'unico modo per rendere accettabile lo Stitch è quello di "addolcire" le transizioni, agendo con un pennello morbido sui contorni delle maschere di livello. Il pennello potrà assumere dimensioni più ampie nelle zone a basso dettaglio (come il cielo), mentre nelle zone con dettaglio converrà limitarne la dimensione, in modo da evitare la creazione di transizioni troppo morbide che danno normalmente luogo a perdite di definizione.

L'uso di questa struttura può avere senso nella realizzazione di Stitch con molti elementi in movimento, dove pro e contro del Blender tendono ad equivalersi, tanto da far preferire una gestione completamente manuale delle transizioni.


Siamo giunti al termine. Nel prossimo articolo tratteremo le riprese con profondità di campo estesa tramite l'utilizzo di PTGui.


Se vuoi parlare con noi di questo articolo vieni a trovarci sul FORUM

E' vietata la riproduzione anche parziale di questo articolo senza il consenso dell' autore.