Verso fuori.

Categoria: Immagini astronomiche Pagina 1 di 16

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!

M27 – Nebulosa Planetaria nella Volpetta

Ecco una nuova foto: questo è un altro oggetto estivo, la celebre nebulosa planetaria M27, detta anche “Nebulosa Manubrio” o “Nebulosa Campana Muta” (questo secondo nome deriva probabilmente da una traduzione fuorviante dall’inglese). Della formazione delle nebulose planetarie ho già parlato in un articolo recente (questo), quindi senz’altri indugi ecco la fotografia!

M27 - Nebulosa della VolpettaDevo dire che secondo me questa è venuta bene. Si può certamente migliorare ancora (in questo caso il fattore limitante era il vento) ma ciò non toglie che sono soddisfatto di quel che ne è uscito, considerando il lavoro che ho fatto. Ho infatti acquisito 6813” di luce (1h53’33”) a 1600 ISO, divisi in 19 pose da circa 6′ ciascuna e poi altre 8 immagini per registrare il rumore termico. Questa volta ho preferito usare il piccolo Maksutov-Cassegrain della Intes alla sua focale nativa, 1250mm (f/10): nonostante l’ingrandimento maggiore, il sistema di autoguida con la nuova lente di Barlow è riuscito a star dietro alle stelle.

L’elaborazione è stata peggiore che star là fuori al freddo sui monti, mi ci sono volute 12 ore per tirarla fuori. Dopo aver allineato e mediato le foto, ho applicato un algoritmo di deconvoluzione del software IRIS per “desbrodolare” le stelle. A giudicare dal risultato direi che è riuscito: sfortunatamente funziona solo con immagini quadrate e il cui lato sia una potenza di 2, percui ho elaborato solo la parte centrale della foto con la nebulosa, per poi riunirla con il resto a fine lavoro.

Di solito, piuttosto che sommare le immagini, preferisco mediarle e poi moltiplicarle per un fattore costante che va da 1 (mi tengo la media così com’è) al numero di pose N (ricostruisco la somma), perché così è più facile controllare il rapporto del segnale sul rumore e che le zone luminose non vadano in sovraesposizione. Con valori intermedi tra 1 e N ottengo immagini che hanno un certo “grado di media” e un certo “grado di somma”: ad esempio, mediando sei immagini da 10′ e moltiplicando il risultato per 2 ottengo la stessa luminosità che avrei ottenuto con una posa da 20′, ma con un rapporto segnale su rumore migliore del 73%! Per questo conviene sempre, secondo me, non fermarsi quando con le pose si raggiunge il tempo di esposizione desiderato e continuare a prenderne altre, per migliorare il rapporto S/R.

In questo caso, siccome la nebulosa ha zone molto luminose e altre che lo sono meno, invece di usare un solo fattore moltiplicativo… ho usato una funzione!! Ho cioè costruito una maschera di luminanza che ho applicato alla fotografia, per determinare quali regioni dovessero essere moltiplicate per un numero maggiore (perché erano meno luminose) e quali per un numero minore (perché andavano già bene così). Se qualcuno dei lettori s’intende di fotografia, ho fatto un’operazione simile alla somma HDR, partendo da una sola immagine e ripetendo indipendentemente il processo per il canale rosso, la cui distribuzione nella foto è molto dissimile da quella del verde e del blu. Il motivo ci ciò è che i due gas dominanti nella nebulosa emettono luce di colore diverso: l’idrogeno emette luce rossastra, mentre l’ossigeno una luce verdazzurra che eccita sia i fotorecettori blu che quelli verdi. Qui ho caricato un confronto della foto a vari stadi del processo di elaborazione.

Siccome tra due settimane mi laureo (!!!) non credo avrò tempo di inserire altri contenuti prima della data fatidica. La mia tesi di laurea triennale si è incentrata sull’analisi di una sorgente extragalattica di raggi gamma, PKS 1424+240, attraverso i dati del telescopio Čerenkov MAGIC. Prometto che, dopo la laurea, la inserirò qui e ne darò una descrizione più divulgativa.

A presto!

NGC6992 Velo

E infine, dopo la nebulosa mista a emissione, riflessione, oscura e dopo la nebusola planetaria, manca solo lui: il resto di supernova! In questo caso si tratta del settore orientale della nebulosa Velo, nella costellazione boreale del Cigno.

Nebulosa Velo NGC6992Qualcuno potrbbe pensare che abbia deciso di fotografarla per simpatia per il mio paesino (Velo d’Astico), ma oltre a questo l’oggetto è molto interessante. Con vostro sommo orrore, riprendiamo la discussione fisica dell’articolo precedente, sulla planetaria dell’Elica.

Pagina 1 di 16

Powered by WordPress & Theme by Anders Norén