Allineamento immagini solari

Il 9 maggio scorso il tempo sull’Italia settentrionale era pessimo: era in transito una perturbazione di provenienza atlantica e sulle prealpi la copertura nuvolosa era pressoché totale. Per riuscire a vedere il transito di Mercurio, un fenomeno relativamente raro che consiste nel passaggio del piccolo pianeta davanti al Sole, ho fatto una breve gita in Germania, valicando le Alpi e sorpassando le nuvole in volata. Appena finirò di elaborare le immagini pubblicherò un resoconto dell’escursione.

Tornato a casa, si è posto il problema di come utilizzare il materiale raccolto. Mi sono concentrato su un breve video, della durata di 8 minuti circa, che riprendeva Mercurio mentre passava vicino a un gruppo di macchie solari. Il filmato era stato girato alla velocità di 50 fotogrammi al secondo, ma ciascuno di essi era disturbato dalla turbolenza atmosferica, che impediva di scorgere i dettagli dell’inquadratura. In casi come questo di solito si mediano più fotogrammi per ottenerne uno solo, in cui gli effetti di distorsione sono ridotti. Per fare ciò bisogna che tutti i fotogrammi siano prima riallineati nel modo più preciso possibile.

L’allineamento delle fotografie astronomiche che riprendono campi stellari è relativamente semplice: bisogna far corrispondere le immagini delle stelle in un’immagine alle immagini delle stesse stelle di un’altra. Con delle foto della superficie solare ad alto ingrandimento, la scarsità e la variabilità dei dettagli rendono l’operazione più difficile. Cercando in rete ho trovato un algoritmo generico abbastanza semplice che può essere d’aiuto. Funziona così: di ciascuna immagine si calcola la trasformata di Fourier bidimensionale discreta \mathcal{I}_i(\vec{k}\,) e si costruisce lo spettro di potenza incrociato:

{\rm P}_{i,j}(\vec{k}\,)\,=\,\mathcal{I}_i(\vec{k}\,)\cdot\mathcal{I}_j^{\mbox{*}}(\vec{k}\,)

Qui \vec{k}\,=\,(k_x,\,k_y) è il momento associato a \vec{r}\,=\,(x,\,y) che descrive le immagini bidimensionali.
Così come lo spettro di potenza di un segnale è la trasformata della funzione di autocorrelazione, si può mostrare che lo spettro di potenza incrociato è la trasformata della funzione di correlazione incrociata (o cross-correlazione):

{\rm R}_{i,j}(\vec{r}\,)\,=\,\mathcal{F}^{-1}\big[ {\rm P}_{i,j}(\vec{k}\,) \big]

Quando uno ha per le mani la funzione di correlazione incrociata “er ist fertig”, almeno in teoria. Infatti, in linea di principio, se le due immagini fossero l’una la traslazione rigida dell’altra la cross-correlazione avrebbe un picco di intensità alle coordinate corrispondenti al vettore di traslazione. In altre parole, quando si ha la cross-correlazione si sa di quanto spostare la seconda immagine per allinearla alla prima.

Tradurre in una tecnica pratica i risultati di qualche calcolo non è mai un’operazione immediata. Per allineare i fotogrammi ho scritto uno script in Python (potete scaricarlo al termine dell’articolo) che include questi passaggi:
 

  1. Le immagini sono ridotte in bianco e nero e la scala dei colori è invertita, in modo che il dettaglio più evidente (il disco di Mercurio) risulti molto luminoso su uno sfondo scuro. Le due immagini da allineare sono ricampionate alla metà della loro dimensione originaria (bin 2×2), per ridurre gli effetti della turbolenza.
  2. A ciascuna viene applicata una maschera gaussiana con 4px di sigma per distruggere eventuali difetti puntuali dell’immagine. Si trova il massimo d’intensità delle due immagini. Questo corrisponde pressapoco al centro del disco di Mercurio (X,Y).
  3. Attorno alle coordinate (2X,2Y) di ciascuna immagine originale (non ricampionata) si ritaglia un quadrato di 128 pixel per lato. Questa misura è comoda perché è una potenza di 2 ed è sufficiente, nel mio caso, a contenere l’intero Mercurio. Dei due quadrati si trova la funzione di correlazione incrociata, come descritto in precedenza.
  4. La funzione di cross-correlazione può essere interpretata essa stessa come un’immagine quadrata di dimensione 128×128 pixel. Se ne trovano le coordinate del massimo assoluto e tali valori sono usati per far partire un fit gaussiano del picco d’intensità, che fornisce la posizione del massimo con precisione sub-pixel (x,y).
  5. L’immagine originale è traslata della quantità non intera (-2X-x,-2Y-y) e ricampionata alla griglia dei pixel della prima immagine interpolandola con una spline cubica.

 

Schemata informativa di "Flecken"

La schermata informativa del programma “Flecken”. Con una scala di colori modificata, sono visibili l’immagine di referenza, quella da allineare, l’immagine di cross-correlazione col contorno del fit gaussiano.

 

È finita? Certamente no, a questo punto bisogna suddividere i fotogrammi in gruppi omogenei e mediarli. Chiaramente ciascun gruppo di fotogrammi non può contenerne più di un certo numero, perché col tempo che passa il pianeta si sposta! Nel mio caso i fotogrammi erano 24018 e li ho suddivisi in gruppi da 250 l’uno, ottenendo 96 immagini finali mediate. La media è stata fatta con una funzione che pure avevo scritto in precedenza e che fa parte di una minuscola libreria in Python dove ho raccolto un po’ di operazioni utili per manipolare le immagini, gcim.

Alla fine del circo, l’algoritmo di allineamento ha riallineato tutti i 24018 fotogrammi: in 5 casi (0,02% del totale) il fit gaussiano non è andato a buon fine e si è usata una traslazione con precisione al pixel intero; in 66 casi (0,27% del totale) il fit gaussiano è converso ad un valore abnorme, probabilmente a causa di un gradiente lineare sottostante al picco gaussiano. L’identificazione di questi 66 casi è stata possibile grazie al registro dove lo script salva tutti i dettagli di cosa fa. Sto ancora pensando a un modo per permettergli di riconoscere automaticamente questi casi.
 

Confronto fotogrammi

Confronto tra due fotogrammi non allineati. Il pianeta e le macchie solari sono in posizioni diverse.

Confronto fotogrammi allineati

Confronto tra i fotogrammi precedenti dopo l’allineamento. Il pianeta è ora fisso nella stessa posizione.

 

Alla fine ho usato un programma libero, ImPPg (che pure, volendo, implementa una procedura simile per l’allineamento delle immagini) per applicare dei filtri di deconvoluzione alle immagini risultanti. Ho quindi rimontato un piccolo video accelerato, che aggiungerò presto su questo sito.

Infine, ecco lo script di allineamento: ne ho prodotto due versioni, rispettivamente “Fleck” e “Flecken”. Il primo allinea due immagini, salvando una versione traslata della seconda per farla coincidere con la prima. Il secondo fa la stessa cosa ma in modo sequenziale, lavorando su una lista di immagini da allineare. Per eseguirli avete bisogno di un’installazione di Python con i moduli Numpy, Scipy, Matplotlib. Serve anche la mia piccola libreria gcim, che è già inclusa assieme agli script. Potete scaricare tutto da qui.

Francamente, dubito che il programma, così com’è, possa servire a qualcuno per allineare le sue immagini. Non so nemmeno come si comporti con dei fotogrammi diversi da quelli del video per il quale l’ho scritto. Ma di certo può essere un buon punto di partenza, se qualcuno ha voglia di lavorarci un po’ su.

A presto!

Permalink link a questo articolo: http://www.giovanniceribella.eu/fuere/?p=1389

L’occhio di Giove

Il 22 marzo scorso, la mattina presto, svegliandomi da sogni inquieti, trovai me stesso nel mio letto in un enorme bacherozzo mutato. Anzi no. Però non riuscivo a riprendere sonno: mancavano pochi minuti alle quattro e io stavo là a rigirarmi sotto le coperte “come un cavàlo sborassà dai pensieri dela vita” (sic).

Alzandomi per andare a bere un po’ d’acqua, vidi dal lucernario della mia camera una cosa buffa: il pianeta Giove stava per tramontare, prossimo alla vetta al monte Priaforà, e se ne stava sospeso sopra al buco che da il nome al monte. Erano le h. 04:01:30 circa. Nel corso della giornata seguente, ho calcolato, usando le coordinate geografiche di casa mia e del foro del Priaforà, le altezze reciproche e la posizione di Giove, dove e a che ora mi sarei dovuto trovare per beccare il pianeta dentro al buco.

La mattina successiva (23 marzo) la sveglia suona alle tre e mezza. Io la spengo e mi riaddormento. Andrà meglio il giorno dopo: con uno scarto di soli sette metri rispetto alla posizione calcolata, Giove attraversa il foro del Priaforà mutandolo (stavolta davvero) per pochi secondi in un occhio luminoso che scruta la valle (e che tutto vede e tutto sa…).

Il video che ho inserito è una versione accelerata del tramonto: ogni fotogramma è in realtà una foto con una posa di 5s, ritagliata attorno al foro del Priaforà. Le immagini sono state mediate per ottenere uno sfondo neutro e poco rumoroso, sul quale è stato poi rimontato il pianeta e le stelle, nella stessa posizione in cui erano prima. La stessa procedura è stata seguita per il fermo immagine con Giove al centro del buco, qui sotto. Aggiungo anche due immagini che presentano la traccia continua del pianeta, una a colori e l’altra in bianco e nero.

Accanto a Giove c’erano anche i suoi quattro satelliti. Callisto tramonta prima di Giove sulla destra, Io precede di pochissimo il pianeta gigante ed Europa lo segue ravvicinato ed è l’ultimo a scomparire, dentro al foro; Ganimede è nascosto dalla luce troppo intensa di Giove. Potete vedere una presentazione interattiva della sequenza, dove i satelliti si distinguono bene, a questo indirizzo: Giove JS. Dovete avere un po’ di pazienza finché il browser carica le immagini, poi potete anche ingrandirle. L’intero passaggio nel buco, nella realtà, è durato poco più di 10 secondi.

Questa sequenza, assieme a quelle della Luna e del Sole, che tramonta sul buco nelle prime decadi di Aprile e di Settembre, compone un bel terzetto. L’occhio del Priaforà ospita di volta in volta astri diversi. Non mi resta che aspettare che ci passino attraverso Venere, Marte e Saturno!

Ed ora torno a dormire…

Permalink link a questo articolo: http://www.giovanniceribella.eu/fuere/?p=1361

Il tombino relativistico

La settimana scorsa ho fatto un giro nel mio liceo, per salutare (leggasi “rompere le scatole”) qualche vecchio professore. Il buon Aldo Neresini, professore di Fisica, mi ha domandato se conoscessi un paradosso relativistico relativo a uno sciatore che casca (o forse no?) dentro un buco. In altri termini, l’apparente paradosso è questo:

Un’asta lunga L scivola senza attrito su una lamina, che si può pensare come un piano infinitamente sottile. La lamina è perforata e il foro è lungo esattamente L. Per un osservatore solidale con il piano, la barra è lunga meno di L, in ragione di 1/γ, a causa della contrazione relativistica delle lunghezze. L’osservatore solidale con la lamina conclude che prima o poi, essendo più corta del buco, l’asta ci cadrà dentro. Viceversa, in un sistema di riferimento solidale con l’asta, questa misurerà L e sarà il foro ad essere contratto fino a L/γ. Ma allora la barra non può cascarci dentro, se è più lunga! Chi ha ragione?

Questa contraddizione (che in realtà non c’è) salta fuori perché siamo portati a pensare all’asta come un oggetto la cui rigidità è indipendente dal sistema di riferimento. Ma in relatività ristretta non è così, anzi, non si può nemmeno dare una vera e propria definizione di corpo rigido!

Tombino relativistico

La caduta dell’asta nel sistema di riferimento ad essa solidale prima che inizi ad accelerare. L’asta si deflette e attraversa il foro, anche se è più corto di lei.

Sorprendentemente, la descrizione corretta (con alcuna assunzioni iniziali) è quella data dall’osservatore solidale col il piano d’appoggio, ossia che la sbarra cade nel buco. Nel sistema di riferimento solidale col moto uniforme dell’asta essa non obbedisce al vincolo di rigidità e si deflette, passando per il foro. L’estremo anteriore, in questo riferimento, è il primo a cadere, quando ha già oltrepassato il margine del foro e mentre la parte posteriore della barra è ancora appoggiata sul piano. Successivamente, anche tutti gli altri punti iniziano a cadere, ma a istanti di tempo differenti l’uno dall’altro. Globalmente, il moto dell’asta ricorda quello del metallo che esce da un laminatoio a caldo…

I conti che permettono di derivare questo risultato sono riassunti in questo documento: Il tombino relativistico. Ho scritto anche uno script in Python/Matplotlib che permette di visualizzare il fenomeno al variare del parametro γ dell’asta e genera dei video o delle animazioni interattive. Potete trovare tutto questo materiale, e un collegamento a un articolo del 1961 di W. Rindler (quello delle coordinate del moto accelerato) a questo indirizzo: materiale aggiuntivo. Non mi resta che aggiungere un video, per farvi vedere come fa la sbarra ad attraversare il foro!

Permalink link a questo articolo: http://www.giovanniceribella.eu/fuere/?p=1322

Aggiornamento

A breve pubblicherò almeno quattro articoli tra cui una fotocomposizione di Giove che tramonta nel foro del monte Priaforà, un documento su un paradosso relativistico della contrazione delle lunghezze, alcune immagini e video del transito di Mercurio di lunedì. Abbiate un po’ di pazienza!

Permalink link a questo articolo: http://www.giovanniceribella.eu/fuere/?p=1320

Post precedenti «