Calcolo di un'omografia basata su linee rilevate


12

So che puoi calcolare le omografie dall'immagine al piano della telecamera usando i punti di corrispondenza tra un "modello perfetto" e i punti dell'immagine.

Lo sto facendo per un campo / campo da calcio e ho usato il rilevamento dei bordi per trovare le linee bianche in campo.

Ma la fotocamera non copre (sempre) tutto il pitch, quindi non riesco a vedere tutti gli angoli ... e solo gli angoli sono punti conosciuti al 100% nel modello (nessun altro punto distinto).

Quindi il problema è che, a meno che la linea non si intersechi con un'altra linea e formi un angolo, conosco solo i punti dell'immagine della linea, non le corrispondenti coordinate "perfette / reali" nel modello.

C'è un modo in cui posso usare le linee rilevate per calcolare un'omografia, o anche solo un insieme di omografie candidate , anche se le linee rilevate non si intersecano tra loro e creano un angolo?

Immagine di esempio, che mostra il passo, il nostro campo visivo e i punti del campo in cui posso conoscere le coordinate del mondo reale / modello corrispondenti (cerchi verdi), e un esempio di 2 linee che potrebbero essere completamente inutili dal nostro campo visivo , Non ho idea di esattamente a che punto iniziano o si fermano nel corrispondente mondo reale / modello del campo:

inserisci qui la descrizione dell'immagine Le linee rosse sono esempi di linee che vorrei utilizzare, ma non conosco le loro coordinate del mondo reale, ed è difficile stimarle perché, a seconda della posa della telecamera, i punti corrispondenti potrebbero essere "ovunque".


2
Hai delle immagini di esempio? O almeno uno schizzo di possibili casi per il rilevamento di linee? Penso che la risposta breve alla tua domanda sia "sì, puoi", ma maggiori dettagli da te aiuterebbero a dare una risposta più dettagliata :)
penelope,

2
Potete fornire un'immagine di esempio? Stai dicendo che i segmenti di linea rilevati non si intersecano o hai provato ad estendere i segmenti rilevati alle linee e poi a cercare di trovare intersezioni?
ppalasek,

3
Ho aggiunto un'immagine di esempio alla domanda
Henrik Kjus Alstad,

1
L'hai mai capito? Sono interessato anche ai risultati.

Risposte:


3

Spiegherò due approcci per questo:

1) Un approccio richiederebbe un algoritmo di corrispondenza delle linee. Dopo aver abbinato le linee, puoi semplicemente usare i punti finali delle linee per calcolare l'omografia. Per ottenere ciò, i descrittori basati su EDLine o LSD sono stati recentemente proposti in OpenCV. Inoltre, sono implementati hashing e corrispondenza rapida di essi. Guarda i video qui:

http://www.youtube.com/watch?v=MqMjvSkM39k

http://www.youtube.com/watch?v=naSWTlbg3To

Il recente repository opencv_contrib contiene il codice sorgente per questi metodi.

Nel caso in cui i punti finali della linea siano rumorosi, è possibile utilizzare direttamente le linee per calcolare le omografie. Tali documenti avrebbero quindi letto:

Rapporto interno: 2005-V04 Calcolo di omografie da tre linee o punti in una coppia di immagini G. Lopez-Nicolas, JJ Guerrero, OA Pellejero, C. Sagues

Relazione interna: 2003-V01 Corrispondenza di linea robusta e stima delle omografie contemporaneamente G. Lopez-Nicolas

Abbinamento probabilistico di linee per la loro omografia Taemin Kim, Jihwan Woo e In So Kweon

2) Esiste un metodo specifico per i campi qui riportati:

" Utilizzo delle funzioni di linea ed ellisse per la rettifica del video trasmesso da hockey .", Gupta, Ankur, James J. Little e Robert J. Woodham Computer and Robot Vision (CRV), Conferenza canadese del 2011 su. IEEE, 2011.

e

" Combinazione di corrispondenze di linee e punti per la stima dell'omografia ", Dubrofsky, Elan e Robert J. Woodham . Simposio internazionale sul Visual Computing. Springer Berlin Heidelberg, 2008.

li=(u,v,1)Tli=(x,y,1)T

li=HTli

In questa forma l'equazione può essere inserita direttamente nel metodo DLT:

Ai=[u0uxv0vx10x0uuy0vvy01y]

L'unica differenza è la normalizzazione, che troverai nei riferimenti sopra.

xCxTCx=0

C=HTCH1

I riferimenti sopra spiegano anche come inserire questo vincolo nell'algoritmo DLT.

Utilizzando ellissi e linee, è possibile derivare una solida relazione proiettiva.


2

Se le linee non sono parallele, è possibile calcolare il punto della loro intersezione e utilizzarlo come punto di riferimento. Nel tuo dipinto puoi usare anche i punti viola:

inserisci qui la descrizione dell'immagine

A proposito, l'intersezione delle linee non deve essere nell'immagine. Finché le linee sono parallele

Se le linee sono parallele, è possibile utilizzarle per ottenere ulteriori vincoli. Ad esempio, se hai N <4 punti e K linee potresti essere in grado di stimare la trasformazione

Ricordiamo che l'equazione della trasformazione proiettiva è:

x=(a11x+a12y+a13)(a31x+a32y+1)y=(a21x+a22y+a23)(a31x+a32y+1)

Il tuo obiettivo è trovare i coefficienti a11,a12,a13,a21,a22,a23,a31,a32

ax+by+c=0UNX'+By'+C

UNX'+By'+C=0UN(un'21X+un'22y+un'23)+B(un'21X+un'22y+un'23)+C(un'31X+un'32y+1)=0

Può essere riscritto come:

(UNXUNyUNBXByBCXCy)(un'11un'12un'13un'21un'22un'23un'31un'32)=-C

UN,B,C(X,y)un'X+By+c=0

Ulteriori riferimenti " Stima dell'omografia di Elan Dubrovsky " - Vedi parte 2.3.1, stima dell'omografia dalle linee.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.