2017-02-23 2 views
0

Ich habe eine organisierte Punktwolke (1280 * 720), die von einer 3D-Kamera aufgenommen wurde. Ich frage mich nur, ob es eine Methode gibt, um diese Punktwolke auf eine kleinere Größe zu verkleinern (z. B. 128 * 72), wenn diese Wolke organisiert bleibt. (Ich denke, das sollte nicht dasselbe wie Down-Sampling sein. "Größe ändern" bedeutet wie ein Bild zoomen).Größe der organisierten Punktwolke ändern

Ich benutze Point Cloud Library 1.8.0 aber fest damit.

Jeder Rat ist willkommen, danke zuerst!

Antwort

1

Man braucht nur einen Punkt aus der Anzahl der Zeit, die Sie Ihre Cloud reduzieren wollen, etwas wie das shloud Arbeit:

for (pcl::PointCloud<pcl::PointXYZ>::const_iterator it = src->begin(); it< src->end(); it+=times) 
{ 
    dest.points.push_back(*it); 
} 

Das einzige Problem ist die Wolke könnte einige NaN Werte containt. Um es zu korrigieren, setzen Sie is_dense auf false in dest und rufen Sie removeNaNFromPointCloud auf.

Hoffe, das kann Ihnen helfen!

+0

Dank @Anatole für Ihre Erklärung! Tatsächlich habe ich mir auch eine andere Methode ausgedacht, die Ihrer (vielleicht genauer) ähnelt. Ich berechne nur den Durchschnittswert jedes m * m Fensters der src Wolke als den entsprechenden Wert innerhalb der Zielwolke. –

+0

Ich habe auch das Problem von NaN erkannt. Es scheint, dass "removeNaNFromPointCloud" die Cloud nicht organisiert hält. Ich ignoriere einfach jeden NaN-Punkt bei der Berechnung des Durchschnittswerts und belasse den Punkt NaN, wenn alle Punkte innerhalb des Fensters des Src-Bildes NaN-Punkte sind. Außerdem denke ich, dass es bessere Interpolationsmöglichkeiten geben sollte, als nur den Durchschnitt im Fenster zu berechnen. Neugierig, es gibt keine verwandte API von PCL. –

+0

Eine weitere Frage über organisierte Punktwolke, @Anatole. Kennen Sie das Downsampling für eine organisierte Punktwolke mit PCL? Vielen Dank. –

0

Kann nicht kommentieren, aber das Entfernen von NaNs aus Ihrer Punktwolke macht es standardmäßig unorganisiert. Sehr wahrscheinlich sind die NaNs als Dummy-Punkte vorhanden, falls Ihr Instrument nicht in der Lage war, einen Punkt in der Matrix zu beobachten, nur um die Matrixdimensionen korrekt zu halten. Wenn Sie diese entfernen, wird die Matrixstruktur zerstört und Sie haben eine andere Anzahl von Punkten als Ihre Matrix von 1280 * 720 erwarten würde.

Wenn Sie möchten, nach unten eine organisierte Punktwolke sagen Probe um einen Faktor von 2, könnten Sie so etwas wie

int scale = 2; 
pcl::PointCloud<pcl::your_point_type> down_sampled_cloud; 
down_sampled_cloud.width = original_cloud.width/scale; 
down_sampled_cloud.height = original_cloud.height/scale; 

for(int ii = 0; ii < original_cloud.height; ii+=scale){ 
    for(int jj = 0; jj < original_cloud.width; jj+=scale){ 
    down_sampled_cloud.push_back(original_cloud.at(ii,jj)); 

    } 
} 

ändern Maßstab, um versuchen, was Sie wollen.

Bei dieser Methode wird nur die ursprüngliche Punktwolke abgetastet, es werden keine Punkte zwischen vorhandenen Punkten interpoliert. Die Skalierung um einen Dezimalfaktor ist komplizierter und kann zu unerwünschten Ergebnissen führen, wenn die Oberfläche nicht kontinuierlich ist.

Verwandte Themen