Rileva schemi circolari nei dati della nuvola di punti


10

Per alcuni algoritmi di ricostruzione del volume su cui sto lavorando, devo rilevare un numero arbitrario di schemi circolari nei dati dei punti 3d (provenienti da un dispositivo LIDAR). I modelli possono essere arbitrariamente orientati nello spazio e si presume che giacciono (anche se non perfettamente) in sottili piani 2D. Ecco un esempio con due cerchi sullo stesso piano (anche se ricorda che si tratta di uno spazio 3d):

inserisci qui la descrizione dell'immagine

Ho provato molti approcci .. il più semplice (ma quello che funziona meglio finora) è il clustering basato su insiemi disgiunti del grafico del vicino più vicino. Funziona abbastanza bene quando i motivi sono distanti, ma meno con cerchi come quelli nell'esempio, molto vicini tra loro.

Ho provato K-significa, ma non funziona bene: sospetto che la disposizione circolare dei punti potrebbe non essere adatta a questo. Inoltre ho l'ulteriore problema di non conoscere in anticipo il valore di K.

Ho provato approcci più complicati, basati sul rilevamento di cicli nel grafico del vicino più vicino, ma quello che ho ottenuto era troppo fragile o computazionalmente costoso.

Ho anche letto molti argomenti correlati (trasformazione di Hough, ecc.) Ma nulla sembra applicarsi perfettamente in questo specifico contesto. Qualsiasi idea o ispirazione sarebbe apprezzata.


Una domanda più semplice: come faresti a rilevare segmenti di linea in dati bidimensionali?
charles.y.zheng,

"..come quelli negli esempi"? Quali esempi? Puoi aggiungere un link?
onestop,

La trasformazione di Hough è la scelta ovvia. Dovrebbe funzionare bene.
whuber

Nel frattempo ho appena avuto abbastanza reputazione per aggiungere l'esempio di immagine a cui mi riferivo.
cjauvin,

3
Questo non è un problema di clustering. In statistica, i "cluster" sono costituiti da insiemi di oggetti reciprocamente più vicini rispetto ad altri oggetti. La vicinanza non cattura la circolarità: ecco perché né K-significano né nessun altro algoritmo di clustering funzionerà. Per questo motivo, questa domanda probabilmente si adatta meglio all'elaborazione delle immagini o ai siti GIS, dove potresti trovare alcuni esperti su questo problema.
whuber

Risposte:


9

Una trasformazione Hough generalizzata è esattamente ciò che desideri. La difficoltà è farlo in modo efficiente, perché lo spazio dei cerchi in 3D ha sei dimensioni (tre per il centro, due per orientare il piano, uno per il raggio). Questo sembra escludere un calcolo diretto.

Una possibilità è quella di intrufolarsi sul risultato attraverso una sequenza di trasformazioni di Hough più semplici. Ad esempio, potresti iniziare con la (solita) trasformazione di Hough per rilevare sottoinsiemi planari: quelli richiedono solo una griglia 3D per il calcolo. Per ogni sottoinsieme planare rilevato, tagliare i punti originali lungo quel piano ed eseguire una trasformazione Hough generalizzata per il rilevamento del cerchio. Questo dovrebbe funzionare bene a condizione che l'immagine originale non abbia molti punti complanari (diversi da quelli formati dai cerchi) che potrebbero attutire il segnale generato dai cerchi.

Se le dimensioni del cerchio hanno un limite superiore predeterminato, puoi potenzialmente salvare un sacco di calcoli: piuttosto che guardare tutte le coppie o le triple dei punti nell'immagine originale, puoi concentrarti su coppie o triple all'interno di un quartiere limitato di ciascun punto.


Proverei a combinare tutti gli approcci suggeriti: primo cluster basato solo sulla distanza, come discusso dal poster originale, che ti darà cluster che possono consistere in più cerchi. Quindi utilizzare Hough per rilevare sottoinsiemi planari all'interno di ciascun cluster. Quindi, all'interno di ogni sottoinsieme planare, usa di nuovo Hough per trovare le cerchie. Se quest'ultimo passaggio è costoso, potresti essere in grado di eseguire un corto circuito efficace: prova alcune triple, indovina un cerchio e vedi se una frazione sostanziale dei punti nel tuo sottoinsieme si trova molto vicino a quel cerchio. In tal caso, registra quel cerchio e rimuovi tutti quei punti, quindi continua.
Erik P.

3
Quest'ultima idea si chiama RANSAC e potrebbe probabilmente essere usata da sola, specialmente se il numero di cerchi per immagine è piccolo.
SheldonCooper,

Grazie per le idee illuminanti! La trasformazione multi-step di Hough mi sembra la soluzione più potente e generale, ma RANSAC sembra davvero più facile da implementare e potrebbe essere sufficiente nel mio contesto. Un problema che ho notato rapidamente con esso è il caso in cui hai modelli di dimensioni sbilanciate, che ovviamente orienta il campionamento verso oggetti più grandi. Qualche idea su questo problema?
cjauvin,

Una volta rilevato il cerchio più grande, rimuovere tutti i punti che gli appartengono dal campionamento.
SheldonCooper,

0

Bene, se l'obiettivo è semplicemente rilevare il di schemi circolari e hai abbastanza dati, forse prova reti neurali convoluzionali profonde. In verità, sarebbe necessario etichettare tutti quei dati, tuttavia i DCN possono essere usati come metodo complementare a quelli suggeriti sopra.number

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.