Come ottenere nuvole di punti densi da telecamere stereo?


12

Sto cercando di utilizzare una videocamera stereo per la ricostruzione della scena, ma di solito riesco a ottenere solo nuvole di punti sparse (cioè oltre la metà dell'immagine non ha informazioni sulla profondità adeguate).

Mi rendo conto che gli algoritmi di elaborazione stereo si basano sulla presenza di texture nelle immagini e hanno alcuni parametri che possono essere modificati per ottenere risultati migliori, come l'intervallo di disparità o la dimensione della finestra di correlazione. Per quanto riesco a mettere a punto questi parametri, non sono mai in grado di ottenere risultati che sono anche lontanamente vicini a ciò che si può ottenere usando un sensore attivo come Kinect.

Il motivo per cui lo voglio è perché molto spesso le nuvole di punti corrispondenti alle regioni adiacenti non hanno abbastanza sovrapposizioni per me per ottenere una corrispondenza, quindi la ricostruzione è gravemente compromessa.

La mia domanda agli esperti di Computer Vision è la seguente: cosa posso fare per ottenere nuvole di punti più dense in generale (senza modificare arbitrariamente l'ambiente del mio ufficio)?


Questa è una buona domanda, ma penso che siano necessari ulteriori dettagli. Quali algoritmi hai provato a calcolare gli abbinamenti? Potresti chiarire cosa intendi con "regioni adiacenti" e "sovrapposizione?".
Josh Vander Hook,

Quando dico "regioni adiacenti", intendo porzioni di spazio fisico che non sono equivalenti ma hanno un'intersezione non vuota, che ho chiamato "sovrapposizione". Cioè, il tipo di regioni che genererebbero nuvole di punti che potrebbero essere abbinate e cucite in un algoritmo ICP.
georgebrindeiro,

Per quanto riguarda l'algoritmo, sto ancora usando la soluzione più semplice possibile che ho trovato: il nodo ROS stereo_image_proc , che applica l'algoritmo di corrispondenza dei blocchi globale disponibile in OpenCV. Sarei molto interessato a conoscere le impostazioni dei parametri che potrebbero non essere direttamente accessibili per me tramite il nodo ROS o altri algoritmi noti per fornire risultati migliori.
georgebrindeiro,

Risposte:


4

Puoi provare a saltare il rilevamento del punto saliente, e semplicemente campionare densamente sull'immagine (come una griglia o giù di lì) e calcolare un descrittore di funzione in ogni punto del campione. Probabilmente puoi anche arrivare al calcolo di un descrittore per ogni pixel.

Potresti perdere l'invarianza della scala, ma penso che questo non danneggerà troppo per la visione stereo poiché gli oggetti saranno approssimativamente alla stessa scala in entrambe le immagini.

Un altro approccio potrebbe essere quello di combinare più algoritmi di rilevamento dei punti salienti: angoli, spigoli, macchie e così via. Quindi devi usare lo stesso algoritmo del descrittore di caratteristiche per tutti i punti rilevati, tuttavia quest'ultima parte potrebbe essere un po 'difficile da implementare.


2

Quindi gli algoritmi di elaborazione delle immagini stereo che ho usato in passato sono stati implementati pixel per pixel. Abbiamo appena usato il modello di fotocamera a foro stenopeico e fatto alcune misurazioni vecchio stile con nastro di misurazione fino a quando le nostre stime di profondità non corrispondevano alla realtà.

Le equazioni per una coppia di telecamere parallele sono:

  • d=
  • f=
  • Cornici coordinate:
    • x,y,z=
    • uR,vR
    • uL,vL
    • Nota: le coordinate della telecamera hanno origine nel riquadro delle coordinate tra le telecamere (ovvero gli assi u sono rivolti in direzioni opposte)

uL=f(xd)zuR=f(x+d)z

zuR=f(x+d)zuL=f(xd)

z(uRuL)=2df

z=2dfuRuL

y=vLz+dff

x=uLz+dff

Usando queste equazioni puoi calcolare una densa nuvola stereo. Uno per ogni pixel sulla tua fotocamera.


Grazie per lo sforzo, ma ho familiarità con la modellazione stereo. Il problema è di solito esattamente quello della corrispondenza tra le coordinate (u, v) nelle telecamere sinistra e destra. muksie ha dato alcune idee su come gestirlo e sylvain.joyeux ha sottolineato una grande libreria stereo che porta a risultati migliori, però ...
georgebrindeiro

1

Quando dici "oltre la metà dell'immagine non ha informazioni sulla profondità", quale metà?

Un problema che abbiamo riscontrato è che se la distanza dall'oggetto è dello stesso ordine di grandezza rispetto alla linea di base (generalmente associata a telecamere grandangolari), gli algoritmi stereo densi "standard" non funzionano così bene. Abbiamo usato la libreria libelas e i suoi sviluppatori ci hanno detto che questo si chiama "stereo di base di grandi dimensioni" ed è ancora un altro problema.


Quando ho detto che metà dell'immagine non aveva alcuna informazione di profondità adeguata, intendevo che su tutti i pixel, solo circa la metà aveva calcolato disparità (non necessariamente formando una regione contigua). Non sto avendo lo stesso problema che hai citato con il rapporto distanza / oggetto / linea di base, ma è stato molto interessante conoscere quella biblioteca e che questo può essere un problema. Grazie!
georgebrindeiro,

1
Ad ogni modo, proverò le libelas da quando ho trovato un wrapper ROS per questo!
georgebrindeiro,

0

Dai un'occhiata ai leader del KITTI Stereo Benchmark . Questo benchmark penalizza gli algoritmi per non produrre disparità in un dato punto, quindi i migliori performer producono output densi (anche se non hanno molti motivi per la loro stima in molti punti). Alcuni metodi dispongono di codice disponibile pubblicamente collegato, che puoi provare.

Tieni presente che non sono penalizzati per aver impiegato molto tempo, quindi molti metodi impiegheranno l'ordine dei minuti per ogni immagine da eseguire e potrebbero non essere adatti alla tua applicazione. Sono stati introdotti molti metodi basati sulla CNN che funzionano molto bene, pur funzionando in meno di un secondo (su una GPU). Almeno uno di questi (CRL) ha un codice pubblico.

Se non riesci ancora a ottenere stime di profondità decenti con queste sulle tue immagini, potresti semplicemente vedere i limiti di ciò che è fattibile da un approccio visibile. Fondamentalmente deve esserci una trama distintiva nell'area per essere in grado di abbinare bene i punti, oppure hai bisogno di una base per fare alcune assunzioni forti (ad esempio, levigatezza) nelle regioni senza testo.

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.