Grazie a Tetis ed El Filibustero per le spiegazioni. Mentalmente non
riesco a raffigurare come poter ridurre una proiezione con zoom K ad
un'altra equivalente con zoom L<>K solo variando posizione e
orientazione della camera, ma ho capito "analiticamente" come una
proiezione possa dipendere da soli 5 parametri (sia gli esempi del
versore che del raggio sferico erano chiarissimi). Ma allora nella
matrice di trasformazione erano proprio necessari 8 parametri, o ne
bastavano 5?
Grazie a bite per i link. Anche se sto testando un approccio diverso
dalle "solite" tecniche di stereovisione, quelle pagine sono concise e
precise e meritano una buona lettura.
Una cosa che mi fa riflettere è che quando ho studiato le coordinate
omogenee ed il piano proiettivo nel corso di algebra era tutto
chiarissimo, ma "astratto". Non abbiamo studiato applicazioni
pratiche, e così i concetti non si sono fissati in modo tale da averne
padronanza. Ed ecco che mi ritrovo a fare domande che, col senno di
poi, mi sembrano stupidissime ("perchè la costante alpha?")... E se
ripenso alla prima domanda del thread quasi mi vergogno :)
Giusto per completezza, alla fine sto risolvendo così: della matrice
di trasformazione mi costruisco solo la prima (a,b,c) e la terza
(g,h,i=1), perchè non avendo le Y non riesco a ricostruire la seconda;
ma la seconda riga, in effetti, non è necessaria. Per risolvere il
sistema
a*x1 + b*y1 + c*z1 = X1p*alpha1
g*x1 + h*y1 + z1 = Z1p*alpha1
a*x2 + b*y2 + c*z2 = X2p*alpha2
g*x2 + h*y2 + z2 = Z2p*alpha2
...
ho bisogno di calibrare con 5 punti (4 vertici +, per esempio, il
centro); sono 10 equazioni in 10 incognite, ma con A=(0,0) si ottiene
subito c=Axp, quindi alla fine le incognite saranno 4 (escluse le
costanti moltiplicative). Calcolo a,b...h per ognuna delle due camere;
quando in entrambe "leggo" la coordinata X trasformata, risolvo il
sistema
a1*x + b1*y + c1*z = X1p
a2*x + b2*y + c2*z = X2p
g1*x + h1*y + z = 1 (oppure: g2*x + h2*y + z = 1)
dove, ovviamente, le incognite ora sono x,y e z, e ottengo sia la x
che la y non proiettate. Ad un primo test era tutto corretto (si
ottiene una matrice differente di quella ottenuta calibrando sia con
le x che con le y, ma cambia la z e ovviamente il risultato finale è
uguale), ma non sono arrivato a fare il secondo test (confrontare le x
originarie con quelle ottenute dal sistema) perchè si è bruciata la
RAM... X(
Forse non sono stato molto chiaro sui fini di questa cosa, ma dovrei
realizzare presto unl prototipo e vorrei mettere un video su
youtube... Per i curiosi, posterò il link :)
--
Narcolessico
http://binaryunit.blogspot.com