- Messaggi: 488
- Ringraziamenti ricevuti 158
Accedi al sito per partecipare alle discussioni.
doktorenko ha scritto: Nel mesaggio #8127 pero` avevo scritto di aver intenzione di alleggerire per un po` la discussione, postando finalmente delle immagini, per interrompere questi infiniti preliminari matematici (che sono pero` doverosi).
Io ho provato con gli stessi angoli, ma a me l`ellisse rimane "in forma". Io uso questa equazione (copio direttamente da Geogebra):
F = 61.1 d=tan(δ) F h=F sec(δ) r(t)= h sin(ρ) / sin(ρ - acos(sin(δ) cos(t - α))) Curva[d cos(α) + cos(t) r(t), d sin(α) + sin(t) r(t), t, 0, 2π]
Scusami, se io volessi controllare la mia equazione con la tua del messaggio #8123, come devo scriverla in geogebra, usando la mia convenzione (angolo delta, raggio rho, focale F, ecc.)? potresti riportarla in formato testo, citandola tra i marcatori code? Anche perche` abbiamo visto che le immagini potrebbero sparire, mentre lo scritto no ;-)
(1-tan(rho)^2*tan(delta)^2)*x^2+(1+tan(delta)^2)*y^2+2*F*tan(delta)*(1+tan(rho)^2)*x+F^2*(tan(delta)^2-tan(rho)^2)=0
Accedi al sito per partecipare alle discussioni.
Accedi al sito per partecipare alle discussioni.
Accedi al sito per partecipare alle discussioni.
F=61.1: lunghezza focale
O(0,0,0): foro stenopeico della camera, posto all`origine (0,0,0)
p:y=-F: piano bidimensionale xz del sensore, contenente l`immagine della Terra: I[riga,colonna]=RGB
O_1=(0,F,0)
C=(x,F,z)
r=O+t*C
p1: C1_x*x+C1_y*y+C1_z*z=d
d=C_1x**2+C1_y**2+C1_z**2
P(r,F,c), con x=r, z=c, y=F
t=d/(P_x*C1_x+P_y*C1_y+P_z*C1_z)
P1=P*t
alpha=atan(C1_x/C1_y)
beta=-atan(C1_z/sqrt(C1_x**2+C1_y**2))
Vettore v: (cos(alpha), -sin(alpha),0)
Vettore u: (-sin(beta)*Vy,sin(beta)*Vx,-cos(beta))
P1_r_c = C1+u*c+v*r
t=-F/y
P_r_c=P1_r_c*t
I1[r,c]=I[P1_r_c_x,P1_r_c_y].
Accedi al sito per partecipare alle discussioni.
Accedi al sito per partecipare alle discussioni.
Accedi al sito per partecipare alle discussioni.
sfera raggio 1 m
camera a 60 m, scostata di 15 gradi dal centro della sfera e ruotata di 71 gradi
lunghezza focale 61.1 mm, sensore 53 mm 4000 px
scala=2
centro_x cerchio (proiezione della sfera) calcolato = 402.3 px
centro_y cerchio calcolato = -1168.7 px
raggio R cerchio calcolato = 160.1 px
focale F = 61.1 mm; 4611.3 px
distanza d cerchio dal centro immagine = sqrt(c_x**2+c_y**2) =1236 px
distanza F1 centro cerchio dal foro stenopeico =sqrt(d**2+F**2) = 4774.1 px
distanza D foro stenopeico-piano di riproiezione = s*F1
diametro angolare = atan (R/D) = 0.96 gradi
diametro reale con distanza 60 m = 60000*R/D = 1.006 m
60 * cos(asin(1/60))**2 = 59.983
R * asin(1/60) = .9998
Accedi al sito per partecipare alle discussioni.
Accedi al sito per partecipare alle discussioni.
1) Luna = sfera di raggio R
2) nessun rilievo
3) corrispondenza esatta (a parte la scala) tra superficie mappata e quella lunare
h(dx-cx,dy-cy) = dato altimetrico mappato
cx,cy = posizione della camera
dx,dy = distanza
R=raggio
x=dx-cx
y=dy-cy
theta=x/R
phi=y/R
Px= -sin(theta) * R
Py = cos(theta) * sin(phi) * R
Pz = cos(theta) * cos(phi) * R - R
h(dx-cx,dy-cy)=altezza terreno
R=Raggio+h
Accedi al sito per partecipare alle discussioni.
doktorenko ha scritto: La procedura per verificare la corretta curvatura del terreno nelle foto Apollo consiste nel costruire un modello tridimensionale partendo dai dati digitali delle sonde (ricostruizione profilo orografico) e dagli scatti da analizzare (orientamento e posizione camera), mappare quindi la superficie risultante su di una sfera/ellissoide/"lunoide", e confrontare le altezze dei rilievi.
...1) Luna = sfera di raggio R 2) nessun rilievo 3) corrispondenza esatta (a parte la scala) tra superficie mappata e quella lunare
In questo caso semplificato, se:
h(dx-cx,dy-cy) = dato altimetrico mappato cx,cy = posizione della camera dx,dy = distanza
i punti della (Px,Py,Pz) della calotta sferica saranno:
R=raggio x=dx-cx y=dy-cy theta=x/R phi=y/R Px= -sin(theta) * R Py = cos(theta) * sin(phi) * R Pz = cos(theta) * cos(phi) * R - R
La calotta e` costruita per avere il punto piu` alto = livello 0 = posizione camera.
Fin qua non dovrebbero esserci problemi, se pero` aggiungiamo il dato dell` altezza h, e` sufficiente porre:
h(dx-cx,dy-cy)=altezza terreno R=Raggio+h
e lasciare invariato il resto? si introduce una approsimazione? se si`, e` trascurabile?
theta=u/R
phi=v/R
h=h(u,v)=H(theta,phi)
x = (R+H)*sin(theta)*cos(phi)
y = (R+H)*sin(theta)*sin(phi)
z = (R+H)*cos(theta)-R
x=0
y=0
z=h(0,0)
piuttosto contro-intuitivamente, la differenza non e` correlata con la dimensione iniziale, 2 pi * R, ma semplicemente vale 2 * pi * d: nell`esempio 1 km * 2 pi
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto:
La differenza è ovviamente 2*pi*(R+d)-2*pi*R=2*pi*d quindi, come suggerisce il termine stesso, è correlata alla differenza fra i due raggi e non solo al raggio iniziale, non mi pare sia controintuitivo. Ma la differenza nel caso delle foto lunari è sicuramente del tutto impossibile da valutare nemmeno con mezzi molto più sofisticati di quelli usati qui, anche in caso di superficie perfettamente liscia sarebbe di circa un metro sui 2 km di distanza dell'orizzonte (con la fotocamera a 1,20 m di altezza), figuriamoci cosa possiamo concludere nel caso reale in cui sono presenti rilievi di ogni forma e dimensione.
Credo che l'unica possibilità sarebbe stata, nel caso di foto scattate in una zona particolarmente piana, cercare di stimare se l'orizzonte si trovasse ai 2 km della superficie lunare o ai 4 km della superficie terrestre, ma per i motivi già detti non credo che questa verifica sia fattibile in pratica.
R=1.738x10^6 m
h=1.7 m
angolo a orizzonte astronomico/orizzonte lunare = acos (R/ (R+h) ) = 0.08 gradi
distanza d = (R+h) * sin (a) = 2430 m
pellicola 53 mm, 4000 px
focale F =61.1 mm, 4611 px
caduta in pixel orizzonte: F*tan (a) = 6 px
a=0.04 gradi
d=4650 m
caduta=3 px
Accedi al sito per partecipare alle discussioni.
E chi lo sa, dipende da come sono stati rilevati i dati dalle sonde, se a intervalli regolari di tempo (quindi di angoli) o di spazio (di metri sulla superficie). Le differenze sarebbero in ogni caso minime. Quello che però è certo è che tutti questi dati provengono da agenzie spaziali, quindi potrebbero essere manipolati in partenza, mi sembra inutile domandarsi se sono organizzati in una matrice 4000x4000 o 4002x4002.doktorenko ha scritto:
D) due pianure, aventi la stessa estensione angolare (longitudinale e latitudinale), poste pero` ad altezze diverse, sono mappate con lo stesso numero di righe e colonne di dati?
La differenza dovrebbe essere di circa 3 px; pero` potendo fare gli stessi conti con rilievi piu` distanti si dovrebbero trovare differenze maggiori.
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto:
Direi che 3 pixel su 4000 sono una precisione che nemmeno se avessero fatto rilevazioni con teodolite e asta graduata potrebbe essere raggiunta. In ogni caso prima di fare ogni tipo di valutazione in questo senso bisognerebbe scegliere le foto da cui si vuole partire, in modo da poter stabilire subito se ha senso o no imbarcarsi in queste considerazioni.
a = (135/D) = (135/60) = 2.25"
f = 61.1 mm, 4600 px
a = 1/4600 * 3600 = 0.78"
4600 px * (2.25/3600) = 3 px
In sostanza, secondo me prima di imbastire modelli matematici e relative formule sarebbe opportuno chiarire bene quale dovrebbe essere il loro scopo in relazione al materiale a disposizione.
R = 1,738e6 m
distanza d cratere = 3200 m
caduta curvatura = R*(1-cos(d/R)) = 1,738e6 m * (1-cos(3200 m /1,738e6 m)) = 3 m
px = 4600 px * (3 m/3200 m) = 4 px
Accedi al sito per partecipare alle discussioni.
A me risulta che un pixel, nella zona centrale dell'immagine, corrisponda adoktorenko ha scritto:
Proviamo a fare qualche conto, vienimi in aiuto perche` non mi intendo molto di ottica: con un obiettivo da 60 mm di diametro (www.hq.nasa.gov/alsj/Biogon5.6_60mm_ZEISS.pdf), Il potere risolutivo angolare, espresso in secondi di arco, dovrebbe essere:
a = (135/D) = (135/60) = 2.25"
Un pixel invece sottende un angolo di:
f = 61.1 mm, 4600 px a = 1/4600 * 3600 = 0.78"
Che e` circa un terzo. L`immagine quindi dovrebbe essere sovra-campionata rispetto alla proporzione canonica 2 a 1; anche se forse i conti bisognerebbe farli sulle caratteristiche della pellicola, e non sulla successiva digitalizzazione. Non so allora se in questo caso (campionamento di un campionamento) la proporzione giusta dovrebbe essere 4 a 1, o comunque superiore a quella consueta.
atan(tan(47°)/2000)=1'50.6"
Io penso poi che non si debba confrontare la caduta lunare con quella terrestre, ma con la curvatura nulla: perche` l`ipotesi di una ricostruzione 1:1 di decine di km quadrati di paesaggio lunare sulla Terra la scarto.
Accedi al sito per partecipare alle discussioni.
Scusa, ma non dovrebbe esserci 47°/2 tra parentesi? Il mio conto e sbagliato clamorosamente perche` il risultato e` in radianti e non in gradi, quello giusto dovrebbe essere quindi:FranZeta ha scritto: A me risulta che un pixel, nella zona centrale dell'immagine, corrisponda a
atan(tan(47°)/2000)=1'50.6"
atan(1/4600)/pi*180= 0.0124 gradi = 45"
Ho usato la risoluzione verticale (o orizzontale, è uguale) perchè è più appropriata di quella diagonale trattandosi di pixel, inoltre è proprio quella che ti interessa.
lato diapositiva: 53 mm = 4000 px;
focale: 61.1 mm = 4611 px
Non capisco cosa intendi con sovracampionamento, ha senso solo fra immagini digitali, fra analogico e digitale il sovracampionamento direi che è impossibile a livello pratico, bisogna anche tenere presente che il campionamento è fatto su una stampa fotografica, non sul negativo, quindi siamo sempre ben lontani dal limite della risoluzione analogica.
Quella che chiami curvatura nulla in realtà è un'altra cosa, l'orizzonte astronomico è una linea immaginaria, in caso di curvatura nulla l'orizzonte esisterebbe e si troverebbe comunque sotto all'orizzonte astronomico. Se l'orizzonte fosse un fondale di scena avrebbero potuto farlo simulando un qualsiasi orizzonte desiderato, se mai possiamo discutere della bontà della simulazione ma confrontarlo con un inesistente orizzonte astronomico non ha senso.
Non solo, come si vede dalla linea rossa che hai aggiunto alla tua immagine basta che la fotocamera sia leggermente fuori bolla, cosa che è praticamente certa nelle foto reali, per annullare ogni considerazione, dato che non c'è modo per risalire al reale orientamento della camera rispetto alla verticale con la precisione necessaria (se ci fosse non esisterebbero i teodoliti per i rilevamenti di precisione, basterebbe una normale macchina fotografica e un software).
C'è anche da aggiungere che esisterebbe pure l'ipotesi inversa di quella che scarti tu: cioè che abbiano ricostruito sulla luna decine di km di paesaggio terrestre, ovviamente non materialmente ma modificando ad arte i dati delle sonde.
Per quanto riguarda la foto A14-9486 che intendi usare nell'analisi mi aspettavo di meglio, è controluce e di qualità molto più scarsa rispetto a quelle di A11 che avevi linkato all'inizio del thread. Nutro anche forti dubbi che il rilievo che si vede sia a 3200 m, si vede una roccia sopra l'angolo in alto a destra del LEM che, se queste fossero le distanze, dovrebbe avere dimensioni colossali, giusto per fare un esempio.
L'unica cosa degna di approfondimento che noto nell'immagine è l'ombra del LEM, incoerente con le altre, per giustificarla si dovrebbe ipotizzare una forte inclinazione del terreno alla sua destra. Questa verifica mi sembra fattibile, se si dispone di una buona ricostruzione tridimensionale del sito, mentre sicuramente quella della "caduta dell'orizzonte" non lo può essere.
Accedi al sito per partecipare alle discussioni.
Sì, pensavo che 47° fosse già la distanza angolare fra centro e margine, invece se la pellicola è da 53 mm è la distanza tra margine e margine e va divisa per 2, il risultato qui sopra è giusto. Però non è giusto questo:doktorenko ha scritto: Scusa, ma non dovrebbe esserci 47°/2 tra parentesi? Il mio conto e sbagliato clamorosamente perche` il risultato e` in radianti e non in gradi, quello giusto dovrebbe essere quindi:
atan(1/4600)/pi*180= 0.0124 gradi = 45"
La risoluzione è angolare e quindi non dipende dalla focale (la focale serve solo a trovare l'ampiezza angolare dell'immagine, una volta stabilita questa ingrandendo/rimpicciolendo l'immagine la risoluzione angolare non varia, varia la risoluzione lineare, misurata in mm per esempio). I pixel sono quelli della foto, io ho preso 4000 come cifra tonda, ma non capisco perchè li rapporti alla focale.Anch`io uso la risoluzione orizzontale e la lunghezza focale in px:
lato diapositiva: 53 mm = 4000 px; focale: 61.1 mm = 4611 px
Sposteresti soltanto il problema della messa a bolla dalla macchina fotografica ai rilievi/oggetti che vuoi usare per la collimazione. Chi ti dice qual è il loro orientamento con precisione inferiore al decimo di grado? Nemmeno se fossi sul posto con la livella in mano potresti accertartene, anzi, avresti enormi problemi anche col già menzionato teodolite. Tanto per capirci, alle nostre latitudini 0.1° è la deviazione della verticale gravitazionale rispetto alla verticale geometrica, cioè il filo a piombo, o la bolla, hanno una deviazione intrinseca di 0.1° rispetto alla direzione del centro della terra, per quanto possano essere precisi. Eppure questo non è essenziale in quasi nessuna applicazione pratica e non se ne accorge nessuno. Quello che vorresti fare tu è come verificare questa deviazione della forza di gravità usando le fotografie scattate in una scampagnata, mi sembra ben oltre i limiti del possibile.Ma infatti avevo scritto subito che e` importante conoscere con grande precisione l`orientamento della camera; ma per far questo non intendevo usare il profilo d`orizzonte piu` lontano.
Per la precisione se ne puo` parlare -e magari fare anche dei conti- perche` trovando una sagoma abbastanza nitida di un rilievo/oggetto vicino la collimazione potrebbe essere abbastanza accurata. Rimane sempre l`incognita dell`altezza del fotografo, pero` non credo sia cosi` importante come l`orientamento, anche qui bisognerebbe fae qualche conticino.
Accedi al sito per partecipare alle discussioni.
1) date due fotografie I_1 e I_2, che variano solo per la rotazione della camera R_1 e R_2
2) I_1 puo` essere trasformata in I_2 e viceversa (naturalmente nei punti inquadrati da entrambe) mediante una deformazione omografica (8 gradi di liberta`)
3) aggiungendo anche la traslazione della camera, la 1) vale solo solo per i punti giacenti sullo stesso piano
a) date due pose I_1 e I_2, due rotazioni della camera R_1 e R_2 (incognite), e due posizioni P_1 e P_2 (incognite)
b) i punti che compongono lo sfondo (+3km) possono essere considerati appartenenti allo stesso piano
procedura:
1) dalle immagini tolgo tutto cio` che non e` sfondo, ottenendo S_1 e S_2
2) calcolo la matrice H di trasformazione omografica di S_1 in S_2
3) applico la deformazione H all`immagine I_2, ottenendo l`immagine I_h
4) I_h e` l`immagine corrispondente ad una posa fotografica ripresa da una camera ruotata secondo R_1 e traslata di T=P_2-P_1 rispetto a I_1
5) I_1 e I_h sono quindi due scene inquadrate dallo stesso angolo e traslate di T; posso percio` calcolare la distanza degli oggetti in comune nelle due scene mediante la parallasse
1) ricostruire lo sfondo S_2 (+3km) mediante modellazione 3d dei dati altimetrici, con posizione e rotazione approssimativa R_2 e P_2
2) estrarre lo sfondo S_1 dalla foto Apollo
3) calcolare la matrice H S_1=S_2
4) decomporre la matrice H per ottenere R e T
5) sapendo che R = R_2-R_1 e T = P_2-P_1, risalire a R_1 e P_1
Accedi al sito per partecipare alle discussioni.
Iniziamo a chiarire la teoria. Quello che conta nelle due fotografie è che siano scattate dalla stessa posizione, angolazione e focale possono essere diverse. A questo punto basta stabilire una corrispondenza fra quattro punti delle due immagini, a tre a tre non allineati, per poter ricavare la proiettività, o omografia, fra le due immagini (matematicamente si trova di una funzione fra due piani proiettivi). Cioè ricavata la matrice H possiamo ricostruire la seconda immagine semplicemente applicando H a tutti i punti della prima. Particolare non insignificante: per riuscire a trovare H bisogna conoscere un poco di teoria degli spazi proiettivi, partendo dall'impostazione per ricavare un'omografia riportata su wikipedia H si ricava in modo assai diverso da come si farebbe per un normale sistema. Questo perchè non è una funzione tra punti dello spazio tridimensionale, ma fra piani proiettivi, magari in un altro commento spiegherò un po' più in dettaglio.doktorenko ha scritto: Prendo spunto dal metodo della parallasse di OLEG OLEYNIK ; riporto i passaggi per come li ho capiti:
teoria:
1) date due fotografie I_1 e I_2, che variano solo per la rotazione della camera R_1 e R_2
2) I_1 puo` essere trasformata in I_2 e viceversa (naturalmente nei punti inquadrati da entrambe) mediante una deformazione omografica (8 gradi di liberta`)
3) aggiungendo anche la traslazione della camera, la 1) vale solo solo per i punti giacenti sullo stesso piano
Al punto 1) si presenta già il problema fondamentale di cui parlavo nei commenti sopra, e cioè l'aggettivo "approssimativa". Se vuoi misurare una grandezza di circa 0,1° va da sè che la precisione iniziale deve essere molto maggiore, diciamo almeno un ordine di grandezza, cioè 1/100 di grado. Questo perchè l'errore dei dati iniziali si amplifica durante i calcoli (propagazione dell'errore). Quindi se non hai una ricostruzione 3D esatta al cm, con uguale precisione nella posizione della fotocamera -compresa la sua altezza dal suolo, determinante- e soprattutto una precisione di almeno 0,01° nella sua rotazione, tutto quello che segue è inutile perchè il risultato finale sarà affetto da un'imprecisione non inferiore al valore che vuoi misurare.Sfruttando questo metodo pensavo di:
1) ricostruire lo sfondo S_2 (+3km) mediante modellazione 3d dei dati altimetrici, con posizione e rotazione approssimativa R_2 e P_2 2) estrarre lo sfondo S_1 dalla foto Apollo 3) calcolare la matrice H S_1=S_2 4) decomporre la matrice H per ottenere R e T 5) sapendo che R = R_2-R_1 e T = P_2-P_1, risalire a R_1 e P_1
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto: Ci sarebbe una ulteriore obiezione: se il lavoro di Oleynik è corretto lo sfondo non si trova affatto a 3 km ma a poche centinaia di metri. Dato che questa è la premessa del tuo ragionamento, se fosse falsa risulterebbe automaticamente inutile tutto ciò che segue, da premesse false può seguire tutto e il contrario di tutto: l'implicazione (formale) A=>B è sempre vera se A è falsa.
Facciamo però finta che al punto precedente hai una precisione assoluta, tanto nella ricostruzione 3D quanto nei dati relativi alla fotocamera. A questo punto ti converrebbe nella tua ricostruzione orientare la camera perfettamente in verticale, in questo modo puoi scegliere i 4 punti sullo sfondo dell'immagine Apollo, trovare i corrispondenti nella tua ricostruzione, calcolare la matrice H e applicarla alla foto Apollo, ottenendo così una immagine perfettamente a bolla.
1) la camera e` in bolla (comunque questo vale sempre, visto che nell`originale si discosta di pochi gradi da questa condizione, e la porzione di inquadratura che viene tagliata e` quella, poco interessante, ai piedi del fotografo)
2) la camera e` orientata convenzionalmente in direzione Sud (verso positivo dell` asse V dei dati altimetrici, questo per trattare il caso piu` semplice)
3) apertura del campo visivo inferiore ai 45 gradi
C_x,C_y = posizione camera
R=1.738e6
theta=(u-C_x)/R
phi=(v-C_y)/R
h(u,v)=h(u,v)+R
x = ( H*np.sin(theta) )
y = ( H*np.cos(theta)* sin(phi) )
z(x,y) = ( H*np.cos(theta)* cos(phi) ) - R
z(u,v) = ( H*np.cos(theta)* cos(phi) ) - R
focale = 61.1
mm = 53
dimensione_orizzontale_pixel = 4000
F = - focale/mm*pixel (F: posizione y del piano focale in pixel)
C_x,C_y = posizione camera
C_h = 1.2 m + z(C_x,C_y) *
O = (0,0,C_h) posizione foro della camera oscura
r_i: x*F - y*px_i_x = 0
h_a(i,v)= ( round(px_i_x / F), v )
distanza d = 1...profondita` di campo
x_c = c + 4000/2
y_c_d = (F/d) * (C_h-h_c[d]) + 4000/2
d (distanza della base del rilievo) -> F (focale in pixel)
h (altezza rilievo -> y (posizione y in pixel sul sensore)
y = F/d *(C_h-h)
Accedi al sito per partecipare alle discussioni.
L'argomentazione di Oleynik è per assurdo, ed è formalmente corretta: [(A=>B)and(non B)]=>non A. Parto dall'ipotesi A="lo sfondo si trova a 3km", questa implica B="lo sfondo non ha parallasse", verifico che invece vale non B="lo sfondo ha parallasse" e concludo non A="lo sfondo non è a 3km".doktorenko ha scritto:
Quest`obiezione l`avevo sollevata anch`io, nella discussione precedente, in merito al lavoro di Oleynik: cioe` se lo sfondo non e` virtualmente all`infinito -ovvero i punti presi come riferimento non giacciono sullo stesso piano- non e` possibile usarli per ottenere la matrice H che trasforma una posa nell`altra, e quindi poter calcolare la parallasse; ma e` pur vero che se lo sfondo non e` veramente "sfondo", ma abbastanza vicino, la parallasse sara` evidente sullo (pseudo)sfondo stesso: quindi di riffa o di raffa il sistema dovrebbe funzionare.FranZeta ha scritto: Ci sarebbe una ulteriore obiezione: se il lavoro di Oleynik è corretto lo sfondo non si trova affatto a 3 km ma a poche centinaia di metri. Dato che questa è la premessa del tuo ragionamento, se fosse falsa risulterebbe automaticamente inutile tutto ciò che segue, da premesse false può seguire tutto e il contrario di tutto: l'implicazione (formale) A=>B è sempre vera se A è falsa.
Quello che stai facendo è costruire il piano proiettivo associato alla scena, questo è il motivo per cui la distanza non cambia: tutti i punti che stanno sulla stessa retta passante per l'origine sono lo stesso punto proiettivo. Normalmente si usa un metodo molto più semplice: posizionata la fotocamera in (0,0,0) si prendono le coordinate dello spazio tridimensionale e si mettono due punti al posto delle virgole: (x,y,z)-->(x:y:z) et voilà, hai il tuo piano proiettivo. I due punti stanno ad indicare che si tratta di coordinate omogenee, cioè la terna è definita a meno di una costante diversa da zero. Non voglio rovinarti il divertimento di trovarti le cose da te, ma quello che non capisco è il motivo per cui fai tutta questa procedura: se hai una ricostruzione 3D hai sicuramente la possibilità di fare un rendering che fa quello che vorresti fare tu con precisione maggiore.Da ogni px_i faccio partire una retta r_i passante per O(0,0), e calcolo i punti di intersezione tra queste rette con le rette sulle quali giacciono i punti z(u,v) allineati per righe v.
........
Se avete notato, la trasformazione non cambia v: questo perche` possiamo considerare i punti di una stessa retta parallela al piano di proiezione tutti alla stessa distanza; ossia lo scostamento angolare dal centro avvicina i punti in rapporto al cos(a).
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto: Per il resto non c'è nessun bisogno che i punti siano sullo stesso piano, solo che siano abbastanza lontani. Per esempio le stelle fisse sono tutte "all'infinito" ma non sono certo sullo stesso piano.
Il sistema di Oleinik funziona perchè lui non vuole concludere che lo sfondo si trova a 137,68 m dalla fotocamera, ma "a non più di 150 m", e comunque sicuramente non a 3 km. Continui ad ignorare il problema dell'errore.
Non voglio rovinarti il divertimento di trovarti le cose da te, ma quello che non capisco è il motivo per cui fai tutta questa procedura: se hai una ricostruzione 3D hai sicuramente la possibilità di fare un rendering che fa quello che vorresti fare tu con precisione maggiore.
Accedi al sito per partecipare alle discussioni.
Il fatto che i punti dello sfondo siano sullo stesso piano non fa alcuna differenza. Quello che conta è che siano abbastanza lontani. In questo modo si possono considerare punti all'infinito, che poi questi siano sono sullo stesso piano, il piano all'infinito appunto, dal punto di vista della posizione spaziale dei punti è irrilevante, dato che il piano all'infinito non appartiene allo spazio tridimensionale.doktorenko ha scritto: Io ho scritto "virtualmente all`infinito", e qui siamo d`accordo, poi ho aggiunto che uno sfondo abbastanza lontano (ad esempio una rilievo montuoso a piu` di 3km) possiamo considerarlo come se fosse bidimensionale (tutti i punti sullo stesso piano): non e` corretto?
Forse non ho chiarito sufficientemente il concetto che se parti da un errore iniziale E nella ricostruzione tridimensionale, puoi collimare finchè vuoi ma l'errore finale sarà necessariamente maggiore, non è una mia opinione ma è matematica pure questa.Ma anche la mia procedura non avrebbe la necessita` di essere cosi` accurata, trattando una foto con un rilievo a grande distanza e un altro oggetto piu` vicino per la collimazione.
Non direi proprio che hai maggiore controllo. Il rendering di default è impostato per ridurre al minimo i calcoli e di conseguenza gli errori nell'immagine finale. Se ricavi in 5 passaggi quello che si può ricavare in 1 hai già moltiplicato di almeno 5 volte il tuo errore. Resterebbe anche da controllare la correttezza dei passaggi, tra parentesi. In ogni caso la geometria proiettiva è matematica a tutti gli effetti, non c'è niente di "visuale", per fare un rendering il computer fa solo ed esclusivamente calcoli algebrici. Comunque direi che è meglio aspettare i risultati per altri commenti, l'unico suggerimento che ti darei a questo punto è che se non usi le coordinate omogenee che ho introdotto sopra non hai nessuna speranza di riuscire a trovare la matrice H che ti serve.Con la mia procedura ho:
1) un maggiore controllo
2) posso estrarre facilmente le sagome dei rilievi per il confronto
3) posso esibire l`eventuale anomalia in modo matematico/geometrico e non "visuale", ad esempio segnalando le altezze che non tornano mediante gli indici x,y nella mappa dei dati altimetrici.
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto: Non direi proprio che hai maggiore controllo. Il rendering di default è impostato per ridurre al minimo i calcoli e di conseguenza gli errori nell'immagine finale. Se ricavi in 5 passaggi quello che si può ricavare in 1 hai già moltiplicato di almeno 5 volte il tuo errore.
Resterebbe anche da controllare la correttezza dei passaggi, tra parentesi. In ogni caso la geometria proiettiva è matematica a tutti gli effetti, non c'è niente di "visuale", per fare un rendering il computer fa solo ed esclusivamente calcoli algebrici.
1) si risale approssimativamente alla posizione/orientamento della camera C ( R_1;P_1) nella foto I_11601
2) dal modello 3d si ottiene l`immagine I_1 inquadrata da (R_1;P_1)
3) si trasla C della distanza supposta tra le due inquadrature: P_2 = P_1 + T
4) dal modello 3d si ottiene l`immagine I_2 inquadrata da (R_1;P_2)
5) si confrontano I_1 e I_2 per valutare se esiste una parallasse visibile dello sfondo paragonabile a quella ottenuta da Oleynik
1) mediante collimazione con gli originali, si trovano le posizioni/angoli C_1 = C(R_1;P_1) e C_2 = C(R_2;P_2)
2) resa 3d I_1 da C_1
3) resa 3d I_2 da C_2
4) si isola lo sfondo S_1, S_2 dalle immagini (questo si puo` fare comodamente in fase di modellazione)
5) si applica il metodo di Ol. (omografia H che minimizza la differenza dello sfondo tra due immagini) sulle rese 3d: S_2 = S_1 * H_3d
6) si applica il metodo di Ol. sugli originali: S_11602 * H_Ol = S_11601
7) si confronta il risultato, cioe` se esiste la stessa parallasse evidente e se H_3d e H_Ol sono all`incirca uguali.
Accedi al sito per partecipare alle discussioni.
Il punto è che non fidarsi delle immagini del computer è come non fidarsi della sua calcolatrice, tanto varrebbe spegnere tutto e usare carta penna e calamaio. Come dicevo sopra, quello che fa il computer è prendere una scena 3D e ricavare l'immagine mediante coordinate omogenee. Posta la fotocamera nell'origine, se l'asse x è la direzione dell'inquadratura e y,z sono gli assi del piano di proiezione, allora le coordinate omogenee dei punti dell'immagine sono semplicemente (x:y:z), tradotte in coordinate cartesiane e considerando la focale diventano F*(y/x,z/x). Questo è il metodo standard, ma è anche il più semplice: 1 passaggio, qualunque altro metodo per calcolare la proiezione se è corretto deve portare allo stesso risultato in un numero di passaggi superiore.doktorenko ha scritto: La riduzione dei passaggi era proprio una mia preoccupazione: ad esempio considerare i punti di una retta parallela al piano di proiezione (come specificato sopra) tutti alla stessa distanza dal foro O, secondo me permette di semplificare il calcolo.
....
Naturalmente, ma per "visuale" (tra virgolette) intendevo dire che la matematica che produce l`immagine e` in secondo piano, non e` evidente come e` stato calcolata: anche se fosse una prova matematicamente corretta (per come e` stata ottenuta) non e` di immediata lettura e controllo. Mantenendo la stessa precisione e correttezza, io vorrei invece ottenere una prova di facile interpretazione: ad esempio punti, angoli, rette, ecc.; e di questi enti ho un maggior controllo usando un mio programma.
Infatti questa è proprio la fonte di incertezza riguardo ai suoi risultati, se si verifica che questo passaggio è stato eseguito con la dovuta precisione quella di Oleynik diventa una dimostrazione rigorosa. Si può provare a ripetere il suo processo scegliendo 4 punti idonei sullo sfondo delle due immagini che prende in considerazione, cambiare metodo per fare questa verifica non avrebbe molto senso, anche perchè Oleynik ha già scelto la via più comoda. Comunque se confronti 2 immagini generate dal modello 3D non puoi trovare una parallasse nello sfondo, altrimenti hai sbagliato qualcosa, se lo sfondo nel modello è realmente lontano deve avere parallasse zero per due pose vicine tra loro.Pero` per me sarebbe importante sapere i valori di H_Ol: altrimenti si potrebbe obiettare, non conoscendo la procedura esatta di passaggio da un`immagine all`altra, che e` la trasformazione usata a causare un effetto di simil-parallasse.
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto: Il punto è che non fidarsi delle immagini del computer è come non fidarsi della sua calcolatrice, tanto varrebbe spegnere tutto e usare carta penna e calamaio. Dovresti anche considerare che la computer grafica è una materia altamente sviluppata e specializzata, non puoi pensare di metterti lì ragionando sui triangoli simili e trovare un metodo più efficiente di quello già implementato, sviluppato in secoli di ricerche (sì perchè la materia nasce con ser Filippo Brunelleschi...). Inoltre stiamo ignorando la questione colori/illuminazione che invece è importante per poter trovare la corrispondenza fra i punti dello sfondo. Vorrei chiarire che se faccio questi appunti non è per fare il guastafeste, è perchè mi immagino le enormi difficoltà a cui andresti incontro e perchè non c'è proprio bisogno di affrontarle, il paragone della calcolatrice qui sopra non è un'esagerazione.
Comunque se confronti 2 immagini generate dal modello 3D non puoi trovare una parallasse nello sfondo, altrimenti hai sbagliato qualcosa, se lo sfondo nel modello è realmente lontano deve avere parallasse zero per due pose vicine tra loro.
Accedi al sito per partecipare alle discussioni.
FranZeta ha scritto: Dovresti anche considerare che la computer grafica è una materia altamente sviluppata e specializzata, non puoi pensare di metterti lì ragionando sui triangoli simili e trovare un metodo più efficiente di quello già implementato, sviluppato in secoli di ricerche (sì perchè la materia nasce con ser Filippo Brunelleschi...). Inoltre stiamo ignorando la questione colori/illuminazione che invece è importante per poter trovare la corrispondenza fra i punti dello sfondo. Vorrei chiarire che se faccio questi appunti non è per fare il guastafeste, è perchè mi immagino le enormi difficoltà a cui andresti incontro e perchè non c'è proprio bisogno di affrontarle, il paragone della calcolatrice qui sopra non è un'esagerazione.
Accedi al sito per partecipare alle discussioni.
Il passaggio imprescindibile è che la fotocamera sia nell'origine dello spazio tridimensionale (d'ora in poi lo chiamerò col suo nome tecnico: R^3). Indipendentemente da come sia orientata rispetto al sistema di coordinate, le coordinate omogenee del piano proiettivo (P^2) sono sempre le stesse: (x:y:z) (si trovano anche notazioni differenti per le coordinate omogenee: [x,y,z], [x;y;z] o altro ancora, io preferisco la notazione coi due punti perchè non presenta ambiguità, si usa solo ed esclusivamente in questo caso). Però se abbiamo scelto le coordinate di R^3 allineate con la macchina fotografica e la pellicola, diventa immediato ricavare le corrispondenti coordinate cartesiane nella foto, quindi è meglio fare prima una rotazione delle coordinate in R^3, piuttosto che poi una proiettività in P^2, ma prima o dopo la trasformazione va fatta e il numero di "passaggi" è sempre quello. Tra l'altro la proiettività che si usa è proprio quella indotta dalla rotazione.doktorenko ha scritto: Per riassumere, tu dici:
1) la procedura corretta e minimale per il calcolo e` quella
2) il tuo risultato lo devi confrontare con la 1)
3) ogni passaggio supplementare e` inutile e dannoso
Fino a qua credo di aver capito, ed era infatti una mia preoccupazione fin dall`inizio, pero` io sono convinto di fare meno calcoli: ad esempio non ruoterei i punti in accordo alla camera (per averla orientata lungo un asse), ma "orienterei" la camera deformando successivamente una proiezione ottenuta con i punti non ruotati o ruotati per salti di 45 gradi.
Quindi alla fine mi sembra di fare meno passaggi, tenuto conto che la trasformazione omografica dovrei farla in ogni caso.
Ecco, se usi le coordinate omogenee puoi confrontarle direttamente senza nessuna rotazione. La rotazione era comoda più che altro per il discorso della "caduta dei rilievi", parlando invece del metodo Oleynik lavorare direttamente in coordinate omogenee è la cosa migliore.Come da tuo suggerimento, sto cercando di rielaborare la procedura mediante le coordinate omogenee; per il momento direi quindi di considerare in sospeso la questione.
Di niente, colgo l'occasione per ripassare un po' di argomenti che non riguardavo da parecchi anni. In effetti l'argomento della mia tesi riguardava la geometria proiettiva, anche se da un punto di vista decisamente più astratto di quello che stiamo affrontando qui. Se ti può interessare qualche anno fa ho scritto un breve saggio sulla geometria proiettiva pensato per dei ragazzi della quarta liceo, puoi trovare una introduzione alle coordinate omogenee del piano con alcuni esempi: Rette e ConicheTi ringrazio per il prezioso contributo e la pazienza [/color]
Accedi al sito per partecipare alle discussioni.
A questo punto direi che è opportuno chiarire come si ricava la famosa matrice H ...
Accedi al sito per partecipare alle discussioni.
Beh devo dire che come prima immagine non c'è male, mi aspettavo di peggio. Mi sembra che che ci sia anche un piccolo stiramento in senso verticale, più una leggera rotazione oraria, potrebbe anche essere una deformazione di tipo prospettico nel complesso. I crateri che si vedono sono distanti km? Nel qual caso li puoi usare come punti di riferimento per trovare l'omografia tra le due immagini, anche se non sono propriamente punti dello sfondo.doktorenko ha scritto: La telecamera e` collimata sul cratere "bianco"; come si puo` notare il mio modello e` "stirato" nel senso della larghezza rispetto all`immagine della Nasa. Questo stiramento (salvo miei errori, tutt`altro che improbabili) non riesco a spiegarlo: se fosse di origine ottica, non dovrebbe dipendere dalla distanza complessiva dal centro, e non solo dalla distanza orizzontale?
In realtà questo non è fondamentale, perchè è vero che garantisce una maggiore precisione nell'identificare i punti, ma il risultato a cui arriva è per forza ottenibile stabilendo corrispondenze fra quattro punti nelle due immagini. Più precisamente, qualunque sia l'omografia che trova Oleynik, presi quattro punti sullo sfondo della prima immagine (a tre a tre non allineati, solito presupposto), esistono quattro punti sullo sfondo della seconda che associati ai primi definiscono la stessa omografia.Se non ho capito male O. ricava la matrice usando tutti i punti dello sfondo, cercando con la forza bruta la combinazione di valori che minimizza la differenza di colore tra l`immagine di riferimento e la seconda deformata.
Accedi al sito per partecipare alle discussioni.