2015-05-31 31 views
8

Devo trovare la differenza di trasformazione e di rotazione tra due nuvole di punti 3D. Per questo sto guardando PCL, come sembra ideale.Libreria nuvola di punti, registrazione robusta di nuvole a due punti

In base ai dati di prova pulita devo iterativo di lavoro punto più vicino, ma dando risultati strani (anche se forse ho implementato in modo non corretto ...) ho pcl::estimateRigidTransformation di lavoro, e sembra meglio, anche se presumo si occuperà peggio con rumoroso dati.

La mia domanda è:

Le due nuvole saranno rumoroso, e anche se dovrebbero contenere gli stessi punti, ci saranno alcune discrepanze. Qual è il modo migliore per affrontare questo?

Devo trovare le funzioni corrispondenti nelle due nuvole per iniziare e POI utilizzare estimateTransform? O dovrei guardare una funzione RANSAC per rimuovere i valori anomali? ICP è un modo migliore per andare rispetto a estimateRigidTransform?

+0

Sono nuovo di PCL, quindi scusami se questo non è utile. C'è la [libreria di registrazione PCL] (http://pointclouds.org/documentation/tutorials/walkthrough.php#registration) che penso sarà utile per il tuo scopo. – dhanushka

+0

Basta seguire prima alcuni tutorial su ICP. E dipende dall'applicazione Quale filtro usi, mi piace molto il veloce filtro a griglia Voxel. ICP non è il modo migliore per farlo. Prima apprendi gli esempi e costruisci il tuo (dal trunk) pcl ICP. L'ICP dell'esempio è solo una funzione funzionante, invece vuoi un vero preformatore (un ICP preformatore è un ICP che è costruito per te) costruisci il tuo! –

risposta

6

L'impostazione di un algoritmo di registrazione della nuvola di punti affidabile può essere un compito impegnativo con una varietà di opzioni, iperparametri e le tecniche da impostare correttamente per ottenere risultati positivi.

Tuttavia lo Point Cloud Library viene fornito con un intero set di funzioni pre-implementate per risolvere questo tipo di attività.L'unica cosa che rimane da fare è capire cosa sta facendo ogni blocco e quindi impostare una cosiddetta pipeline ICP composta da questi blocchi impilati l'uno sull'altro.

Un ICP gasdotto può seguire due percorsi diversi:

1. registrazione algoritmo iterativo di

Il sentiero più facile inizia subito l'applicazione di un algoritmo iterativo Closest Point sul Input-Cloud (IC) per la matematica con il riferimento fisso Cloud (RC) utilizzando sempre il metodo punto più vicino. L'ICP assume un'ipotesi ottimistica secondo la quale le due nuvole di punti sono abbastanza vicine (buona priorità della rotazione R e traduzione T) e la registrazione convergerà senza ulteriore allineamento iniziale.

Questo percorso, ovviamente, può essere bloccato in un minimo locale e pertanto si comporta molto male in quanto è incline a farsi ingannare da qualsiasi tipo di imprecisione nei dati di input dati.

2. Caratteristica-based algoritmo di registrazione

Per ovviare a questo popolo hanno lavorato sullo sviluppo di tutti i tipi di metodi e idee per superare cattiva registrazione performante. In contrasto con un algoritmo di registrazione puramente iterativo, una registrazione basata su feature si stanca prima di trovare corrispondenze di leva più alte tra le due nuvole di punti per accelerare il processo e migliorare l'accuratezza. I metodi vengono capovolti e quindi incorporati nella pipeline di registrazione per formare un modello di registrazione completo.

La seguente immagine dal PCL documentation mostra un tale gasdotto Registation:

PCL pairwise registration

Come si può vedere una registrazione a coppie dovrebbe funzionare attraverso diverse fasi di calcolo per eseguire meglio. I singoli passi sono:

  1. acquisizione dati: una nube di ingresso ed una nube di riferimento sono alimentati nell'algoritmo.

  2. Keypoint La stima: un punto chiave (interest point) è un punto all'interno della nuvola di punti che ha le seguenti caratteristiche:

    1. ha un chiaro, preferibilmente matematicamente fondato, definizione,
    2. ha una posizione ben definita nello spazio immagine,
    3. la struttura dell'immagine locale attorno al punto di interesse è ricca in termini di contenuto di informazioni locali

    Tali punti salienti in una nuvola di punti sono così utili perché la somma di essi caratterizza una nuvola di punti e aiuta a distinguere diverse parti di esso.

    pcl::NarfKeypoint 
    pcl::ISSKeypoint3D< PointInT, PointOutT, NormalT > 
    pcl::HarrisKeypoint3D< PointInT, PointOutT, NormalT > 
    pcl::HarrisKeypoint6D< PointInT, PointOutT, NormalT > 
    pcl::SIFTKeypoint< PointInT, PointOutT > 
    pcl::SUSANKeypoint< PointInT, PointOutT, NormalT, IntensityT > 
    

    informazioni: PCL Keypoint - Documentation

  3. Descrivere punti chiave - descrittori Feature: Dopo aver rilevato punti chiave andiamo a calcolare un descrittore per ognuno di loro."Un descrittore locale una rappresentazione compatta del vicinato locale di un punto: contrariamente ai descrittori globali che descrivono un oggetto completo o una nuvola di punti, i descrittori locali cercano di assomigliare alla forma e all'aspetto solo in un vicinato locale attorno a un punto e quindi sono molto adatti a rappresentarlo in termini di corrispondenza. " (Dirk Holz et al.)

    pcl::FPFHEstimation< PointInT, PointNT, PointOutT > 
    pcl::NormalEstimation< PointInT, PointOutT > 
    pcl::NormalEstimationOMP< PointInT, PointOutT > 
    pcl::OURCVFHEstimation< PointInT, PointNT, PointOutT > 
    pcl::PrincipalCurvaturesEstimation< PointInT, PointNT, PointOutT > 
    pcl::IntensitySpinEstimation< PointInT, PointOutT > 
    

    Informazioni dettagliate: PCL Features - Documentation

  4. Corrispondenza Stima: Il passo successivo è quello di trovare corrispondenze tra i punti chiave trovati nelle nuvole di punti. Di solito uno si avvantaggia dei descrittori descrittori locali calcolati e abbina ognuno di essi alla controparte corrispondente nell'altra nuvola di punti. Tuttavia a causa del fatto che due scansioni da una scena simile non hanno necessariamente lo stesso numero di descrittori di caratteristiche di una nuvola possono avere più dati rispetto all'altra, è necessario eseguire un processo di rifiuto della corrispondenza separato.

    pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar > 
    pcl::registration::CorrespondenceEstimationBackProjection< PointSource, PointTarget, NormalT, Scalar > 
    pcl::registration::CorrespondenceEstimationNormalShooting< PointSource, PointTarget, NormalT, Scalar > 
    
  5. Corrispondenza rifiuto: Uno degli approcci più comuni per eseguire la corrispondenza rifiuto è quello di utilizzare RANSAC (Consensus campione casuale). Ma PCL viene fornito con più algoritmi rifiuto che una pena che danno loro uno sguardo più da vicino:

    pcl::registration::CorrespondenceRejectorSampleConsensus<PointT> 
    pcl::registration::CorrespondenceRejectorDistance 
    pcl::registration::CorrespondenceRejectorFeatures::FeatureContainer<FeatureT> 
    pcl::registration::CorrespondenceRejectorPoly< SourceT, TargetT > 
    

    Informazioni dettagliate: PCL Module registration - Documentation

  6. Trasformazione Stima: Dopo corrispondenze robuste tra le due nuvole di punti sono calcolati un Assoluto L'algoritmo di orientamento viene utilizzato per calcolare una trasformazione 6DOF (6 gradi di libertà) che viene applicata sulla nuvola di input in modo che corrisponda alla nuvola del punto di riferimento. Esistono molti approcci algoritmici per farlo, tuttavia PCL include un'implementazione basata sullo Singular Value Decomposition (SVD). Viene calcolata una matrice 4x4 che descrive la rotazione e la traduzione necessarie per far corrispondere le nuvole di punti.

    pcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar > 
    

    Informazioni dettagliate: PCL Module registration - Documentation

Ulteriori approfondimenti:

+0

Grazie, è una risposta fantastica! –

2

Se le nubi sono rumorosi e il vostro allineamento iniziale non è molto buona, dimenticare applicando ICP dall'inizio. Prova ad ottenere i punti chiave sui tuoi cloud e poi a stimare le funzionalità di questi punti chiave. È possibile testare diversi algoritmi di punti chiave/funzionalità e scegliere quello che offre prestazioni migliori per il proprio caso.

Quindi è possibile abbinare queste caratteristiche e ottenere corrispondenze. Filtra quelle corrispondenze in un ciclo RANSAC per ottenere inlier che utilizzerai per ottenere una trasformazione iniziale. CorrespondenceRejectorSampleConsensus ti aiuterà in questo passaggio.

Una volta applicata questa trasformazione, è possibile utilizzare ICP per un raffinamento finale.

Il gasdotto è qualcosa di simile:

  1. Rileva keypoins in entrambe le nuvole di punti
  2. caratteristiche stima di questi punti chiave
  3. caratteristiche Match e ottenere corrispondenze
  4. rimuovere i duplicati e applicare ciclo RANSAC-ish a get inliers
  5. Ottenere la trasformazione iniziale e applicare a una nuvola di punti
  6. Una volta bo le nuvole sono inizialmente allineate, applicare la registrazione ICP per il raffinamento

NOTA: questa pipeline è utile solo se entrambe le nuvole di punti si trovano nella stessa scala. In altri casi è necessario calcolare il fattore di scala tra le nuvole.

+0

Cosa intendevi dire la stessa scala? Intendevi che le nuvole di punti devono avere le stesse dimensioni? –

+1

@AramGevorgyan A volte due nuvole di punti della stessa scena possono essere recuperate con una scala diversa.Se li stai ottenendo con una telecamera RGB-D, avranno per lo più la stessa scala assoluta (metri, piedi ...). Tuttavia, potrebbero esserci alcuni scenari in cui è possibile recuperare nuvole di punti con scala diversa o arbitraria (ad esempio Structure-from-Motion), e in primo luogo sarà necessario convertire tutte le nuvole nella stessa scala per applicare la pipeline sopra. – Finfa811