2016-03-12 20 views
9

il mio problema è il seguente:spostamento lineare tra i 2 set di coordinate

Per il mio lavoro ho bisogno di confrontare le immagini di lastre fotografiche scansionate con un catalogo di un campione di stelle conosciute all'interno dell'area generale del cielo piastre copertina (io lo chiamo il catalogo principale). A tal fine estrao informazioni, come la luminosità dell'immagine e la posizione nel cielo, degli oggetti nelle immagini e le salviamo nelle tabelle. Quindi utilizzo python per creare un adattamento polinomiale per la calibrazione della grandezza delle stelle nell'immagine. Che funziona abbastanza bene, ma purtroppo non abbastanza bene, poiché c'è un piccolo spostamento tra le coordinate che l'oggetto ha nelle lastre fotografiche e nel catalogo principale.

Ecco i cerchi verdi indicano le posizioni (centro del cerchio) degli oggetti nel catalogo principale. Come puoi vedere, le stelle reali si trovano sempre nella parte superiore sinistra degli oggetti nel catalogo principale.

Ho visto un po 'il confronto delle immagini (ad esempio How to detect a shift between images) ma ora sono un po' in perdita, perché in realtà non sto confrontando le immagini ma gli array con le coordinate degli oggetti. Un ulteriore problema qui è che (come potete vedere nell'immagine) ci sono oggetti nel catalogo principale che non sono visibili sulle lastre e non tutte le lastre hanno la stessa profondità (nel senso che alcune mostrano più stelle di altre).

Quello che mi piacerebbe sapere è un modo per trovare e correggere lo spostamento lineare tra i 2 array di diverse dimensioni di coordinate in python. Non dovrebbero esserci rotazioni, quindi è solo uno spostamento nelle direzioni xe y. Gli array sono normali ricapitoli numpy.

risposta

1

Vorrei cambiare leggermente il suggerimento di OphirYoktan. Hai questi cerchi. Immagino tu sappia il raggio, e tu hai quel valore del raggio per una ragione.

Invece di scegliere casualmente i punti, filtrare il catalogo principale per x, y nel raggio del campione. Quindi calcola comunque molti vettori che devi calcolare per tutte le possibili voci del catalogo principale nel raggio d'azione del campione. Fai ripetutamente la stessa cosa, quindi raccogli un istogramma dei vettori. Presumibilmente un piccolo numero si verificherà ripetutamente, quelle sono le traduzioni verosimilmente veritiere. (Idealmente, "piccolo numero" == 1.)

+0

Il raggio del cerchio è il raggio di ricerca per un algoritmo che esamina il mio catalogo principale per trovare possibili corrispondenze tra catalogo e immagine. Così ho estratto tutte le possibili corrispondenze e ho calcolato le differenze tra loro come suggerito e sembra funzionare. Gli istogrammi non sono perfetti ma dopo averli livellati, ottengo un massimo che posso usare per ottenere la traduzione. Grazie –

1

ci sono diverse soluzioni possibili Nota - questi sono puntatori di alto livello, è necessario un certo lavoro per convertirlo in codice

La soluzione originale (cross correlazione) può essere adattata alla struttura dei dati di lavoro corrente, e dovrebbe funzionare

a credere che RANSAC sarà meglio nel tuo caso fondamentalmente significa: creare un modello basato su un piccolo numero di punti di dati (il numero minimo che sono richiesti per definire un modello rilevante), e verificare è correttezza utilizzando l'intero set di dati.

specificamente, se avete solo la traduzione di prendere in considerazione (e non in scala):

  1. selezionare uno dei vostri punti
  2. partita in un punto casuale nel catalogo [si può fare "ipotesi plausibili" , se avete un po 'prima di quello che la traduzione è più probabile]
  3. questo abbinamento vi offre la traduzione
  4. verificare questa traduzione corrisponde al resto dei tuoi punti
  5. ripetere fino a trovare un goo d corrisponde a
1

Suppongo che gli oggetti non siano necessariamente nello stesso ordine sia nella foto sia nel catalogo principale.

Considerare l'insieme di vettori di posizione, A, degli oggetti nella lastra fotografica e l'insieme di vettori di posizione, B, degli oggetti nel catalogo principale.Siete alla ricerca di un vettore, v, tale che per ogni un in A, un + v è di circa qualche elemento in b.

L'algoritmo più ovvio per me sarebbe quella di dire che per ogni un, per ogni b, lasciate v =b - un. Ora, per ogni elemento in A, controlla che vi sia un elemento corrispondente in B sufficientemente vicino (entro una certa distanza e che tu scelga) a quell'elemento + v. Una volta trovato il v che soddisfa questa condizione, v è il tuo turno.

Problemi correlati