2016-11-20

"Restituzione Prospettica" - Roberto Angeletti - 1987

Quello che segue è uno scritto inedito, risalente ormai al lontano anno 1987, riguardante un programma per l'elaborazione dei calcoli, tramite computer, della restituzione prospettica, detta oggi anche prospettiva inversa, o "reverse perspective". Il computer in questione era un Apple Macintosh, uno di quelli a forma di telefono, con il display piccolo e a toni di grigio, ed il linguaggio di programmazione era il Basic 2.0 Microsoft ( ! ).
Torniamo indietro nel tempo (29 anni) e leggiamo come "restituire una prospettiva" con il metodo dei "punti di fuga".









"Restituzione Prospettica" - Roberto Angeletti 26 marzo 1987

Il problema della restituzione prospettica potrebbe essere visto come l'inverso della prospettiva. In sostanza si presuppone che, avendo un'immagine riproducente in proiezione centrale un qualsiasi oggetto, sia essa un disegno prospettico o una fotografia, si possano da questa estrapolare in qualche modo le distanze reali o e proporzioni della realtà tridimensionale dell'oggetto stesso. Ma ciò che appare ovvio, risulta non esserlo ad una analisi più accurata; infatti, è una pura ipotesi che una sola immagine contenga le informazioni necessarie e sufficienti per riprodurre nella sua spazialità l'oggetto rappresentato.
Ciò che il nostro cervello immagina come oggetto reale, e la forma che gli attribuisce, è soltanto frutto di una serie di confronti con modelli, o "shape", archiviati in memoria; osservando l'immagine della fig. 1, noi la confrontiamo con i milioni di informazioni visive che abbiamo nella mente e, trovata quella più simile, decidiamo che la serie di segni che vediamo "somigliano" ad un parallelepipedo che proietta ombra su due superfici affiancate ad esso. Questa chiave di lettura diventa subìto una convinzione così forte che, anche rovesciando il disegno, molti continueranno a vedere come volume ciò che sta sulla sinistra, anche se le informazioni dell'ombra dovrebbero suggerire diversamente.
L'ormai famoso esperimento della camera distorta di Ames e le illustrazioni di M.C. Escher ci dimostrano fuori di ogni dubbio, se mai ce ne fosse uno, che da un'immagine prospettica si può restituire anche l'oggetto che non è, o, addirittura, si può non comprendere la forma dell'oggetto. Conviene, quindi, scomporre il problema in maniera analitica.
Una "immagine" può essere definita come il luogo geometrico delle intersezioni tra il piano proiettivo e le rette passanti per l'occhio e gli elementi dell'oggetto.
Ad una sola immagine corrispondo infiniti oggetti di infinite forme. Scelta una forma, rimangono sempre infiniti oggetti, questa volta tutti simili tra di loro, con cioè, stesse proporzioni ma diverse grandezze. L'oggetto rappresentato può essere, infatti, piccolo e vicinissimo, o enormemente grande e lontanissimo. Dunque, per riottenere, con un metodo grafico o uno analitico, da una immagine le coordinate spaziali dell'oggetto, è assolutamente necessario conoscere alcune "condizioni", che potremmo chiamare "qualità" dell'oggetto stesso. Per essere più espliciti, dobbiamo aver approssimato l'oggetto ad un parallelepipedo o ad una serie di parallelepipedi, di cui conosciamo, se non la vera misura degli spigoli, per lo meno la giacitura reciproca delle facce.

Per tornare all'esempio della fig. 1, le cose che presupponiamo vere dell'oggetto sono:
1) si tratta di un parallelepipedo che proietta un'ombra su due porzioni di pano disposte ad elle.
2) il parallelepipedo e l'elemento formato dalle due porzioni di piano hanno rette comuni.

Vogliamo e possiamo, a questo punto, conoscere le dimensioni dell'oggetto. Trattandosi di un'assonometria, è immediato intuire un sistema che ci permetta di "misurare" l'oggetto dell'immagine; basta un righello per renderci conto che la faccia verticale disposta verso di noi ha il lato orizzontale lungo 1/3 dell'altro lato. Con un confronto ci accorgiamo subito che il piano verticale dell'elemento ad elle è identico alla faccia anteriore del parallelepipedo. Per quanto riguarda la faccia che ha ombra propria, le cose potrebbero essere più complesse, ma presupponendo che si tratti di una assonometria isometrica, scopriamo che la faccia laterale è identica alle altre, pur se nella deformazione assonometria. Una cosa analoga accade per le facce laterali, che scopriamo essere due quadrati.
Fin qui tutto è evidente. Ma cosa accadrebbe se, invece di una assonometria, avessimo una prospettiva a quadro genericamente inclinato ? In questo caso non potremmo dare per implicita la giacitura del piano di proiezione rispetto all'oggetto, ma vi dovremmo in qualche modo risalire.

Vediamo la fig. 2 : l'oggetto è qui rappresentato in una prospettiva accidentale a quadro inclinato,con tre punti di fuga. E' ben noto che per punto di fuga si intende il luogo geometrico ove convergono tutte le rette passanti per spigoli paralleli dell'oggetto. Essenzialmente, ci interessano i segnanti orientati verso destra, verso avanti e verso l'alto, e, quindi, rifacendoci ad un sistema cartesiano levogiro, useremo la dicitura "fughe di x, di y, di z".

Un metodo analitico per trovare i punti di fuga può essere quello di sviluppare un sistema di equazioni delle rette a cui appartengono due dei segnanti che concorrono ad una stessa fuga, usando le coordinate dei punti di inizio e fine dei segmenti.



Quello che segue è un sottoprogramma, scritto in BASIC 2.0 su Macintosh, per il calcolo del punto di intersezione tra due rette:





Nella fig. 2, i segmenti EI e GH concorrono alla fuga x; i segmenti FI e GL alla y; FH e EL alla z. Trovato il triangolo delle fughe, converrà controllarne l'esattezza, calcolandone l'ortocentro, che costituisce il piede dell'asse ottico, semiretta partente dall'occhio e normale al piano di proiezione (fig. 3).

Il sottoprogramma che segue calcola l'ortocentro di un triangolo:





La distanza tra il centro del fotogramma, P, e l'ortocentro trovato dovrebbe risultare nulla, essendo i due punti coincidenti; la misura della distanza tra i due, quindi, ci dà di quanto sbanda l'orientamento del sistema trovato da quello reale, ovvero la percentuale d'errore esistente.

Come accade con i metodi grafici, anche con procedimenti analitici la restituzione prospettica non risulta essere esente da coefficienti di errore, che possono essere determinati dalla imprecisione nella lettura delle coordinate sulla lastra o dalla approssimazione nei calcoli. Vari metodi possono essere usati per compensare gli errori o per annullarne gli effetti. Per quanto riguarda la ricerca delle fughe e l'errore dell'ortocentro, il metodo di compensazione adottato si basa sulla verifica del piano orizzontale; se esso risulta inclinato oltre una certa soglia, si può forzarne l'orizzontalità, spostando uno dei tre punti di fuga, secondo un criterio di scelta arbitrario dell'operatore.

Il sottoprogramma seguente, dati due punti di fuga, calcola le coordinate della terza fuga, basandosi sul punto P centro del fotogramma.




Questo sistema, ce può sembrare carente da un punto di vista teorico, risulta essere potente nella pratica, in quanto dà la possibilità di trovare un punto di fuga per il quale non esistano sufficienti elementi geometrici desumibili dall'immagine. Ciò avviene molto di sovente: basti pensare a fotografie di facciate di edifici, riprese in condizioni prospettiche sfavorevoli, come, ad esempio, all'interno di strade molto strette; in questo caso non si ha più la possibilità di eliminare l'effetto delle cosiddette "linee cadenti" con metodi ottici, come raddrizzatori, obiettivi basculanti e altro. Calcolando, invece, la fuga delle rette normali al piano del prospetto che ci interessa, possiamo operare analiticamente su di esso, scavalcando molti dei problemi legati all'ottica fotografica.
La distanza tra l'occhio ed il piano di proiezione può essere ricavata utilizzando le due misure B e C, prese in valore assoluto. Dalla geometria sappiamo che il quadrato costruito sull'altezza di un triangolo rettangolo ha la stessa area del rettangolo che ha per lati le proiezioni dei cateti sull'ipotenusa, cioè:


2
D = C * B





Trovata in questo modo quella che potremmo chiamare "distanza focale", prendendo i termini in prestito dal capo fotografico, il problema è quello di orientare un sistema di riferimento con origine nel punto di vista e con gli assi passanti attraverso i punti di fuga sul piano di proiezione, il che equivale a dire un sistema ugualmente orientato rispetto a quello dell'oggetto.

Consideriamo il sistema di riferimento della lastra o piano di proiezione, e cioè gli assi XL e ZL della fig. 4. Trasliamo della misura d questo sistema, portando così l'origine su O. L'asse YL coincide con l'asse ottico e "buca" il piano nel punto P, che corrisponde al centro della lastra fotografica.

Ricapitolando, gli elementi necessari sono:
1) il centro del' immagine
2) almeno due coppie di segmenti che concorrono alla fuga dello stesso piano.


Come si è già visto, non è indispensabile conoscere a priori la distanza focale, anche se il suo noto valore reale può essere usato come ulteriore controllo sui calcoli. In effetti si è cercato di ridurre al minimo gli elementi necessari a priori, aumentando quelli deducibili dalla immagine stessa.
Tornando a riferirci alla fi. 4, per orientare un sistema parallelamente all'oggetto, dobbiamo portare l'asse ottico a coincidere con l'asse y del sistema, passante per f. Ciò equivale a trovare due angoli, che chiameremo beta e alfa, che sono quelli di rotazione verticale ed orizzontale. L'angolo beta può essere calcolato tramite i cateti D e C del triangolo rettangolo. In maniera analoga, possiamo trovare l'angolo alfa, utilizzando il cateto A, e l'ipotenusa del triangolo precedente, presa, questa volta, anch'essa come cateto.




Il sottoprogramma seguente calcola i parametri d'orientamento del sistema XYZ rispetto al piano di proiezione:







Trovati in questo modo gli angoli di rotazione, abbiamo completato la ricerca dei parametri necessari. Infatti, per ottenere una visione prospettica di un oggetto avremmo bisogno delle coordinate del punto di vista (che noi imponiamo uguali a zero), degli angoli di definizione della posizione dell'asse ottico, e della distanza focale, ovvero del fattore di ingrandimento dell'immagine proiettata.

Limitandoci a ciò che avviene in pianta (fig. 5), possiamo affermare di conoscere l'immagine HL di un punto dell'oggetto e che le coordinate sulla lastra possono essere considerate spazialmente, aggiungendo come y la distanza focale d. Quindi, il punto HL avrà coordinate XL, d, ZL.
Eseguiamo una trasformazione di coordinate e riferiamo il punto ad un sistema ruotato della quantità alfa. Otterremo così le coordinate X2 e Y2. Consideriamo ora i triangoli rettangoli simili, che hanno le ipotenuse formate dal raggio visuale passante per il punto reale dell'oggetto e per l'occhio; tra essi possiamo imporre la proporzione tra i lati:


X2 Y2 Z2
------ = -------- = -------
X Y Z


Se noi fissiamo arbitrariamente una delle incognite, possiamo trovare le altre due; per esempio, fissando la Y troviamo la X

Y
X = X2 -----------
Y2


Analogamente, potremmo trovare la Z, sempre basandoci sulla stessa Y

Y
Z = Z2 -----------
Y2


In questo modo abbiamo trovato le coordinate spaziali di un punto dell'oggetto. Ora, per restituire tutti gli altri punti, è necessario fare alcune riflessioni. Imponendo arbitrariamente una coordinata non abbiamo fatto altro che scegliere uno degli infiniti oggetti simili che potrebbero dar luogo a quella stessa immagine; dunque, abbiamo trovato un oggetto che ha gli stessi elementi in una certa proporzione, direttamente dipendente dalla coordinata imposta. Se noi restituiamo un altro punto di cui ci è nota la distanza dal primo, possiamo calcolarci la scala di riduzione o di ingrandimento del modello che abbiamo trovato, rispetto al reale.
Il punto G della fig. 5 differisce dal punto H solo per le ascisse, giacendo su di una retta parallela all'asse X. Quindi, ripetendo i calcoli precedenti, "prendendo in prestito" la coordinata Y del punto H, troviamo le altre due coordinate del punto G.
In maniera analoga possiamo percorrere gli spigoli dell'oggetto della fig.2. Il punto L differisce dal G solo per le Y; il punto E differisce da L per le sole Z e così via. Agganciandoci, cioè, ad una delle coordinate costanti che ci sono note, possiamo trovare altri punti dell'oggetto; ciò equivale a muoversi lungo una retta o lungo un piano.

Tornando a quanto dicevamo sulla fotografia della facciata di un edificio, abbiamo così costruito un metodo che ci permette di restituire un prospetto, imponendo come costante la coordinata che individua il piano su cui giace la facciata stessa.