Ich hoffe, jemand könnte darauf hinweisen, wenn ich irgendwo einen Fehler gemacht habe.pcl Voxelgrid Anzahl der Punkte stimmen nicht überein?
Also habe ich eine Laz-Datei, die ich PCL (1.8) Voxelgrid-Filter verwenden, um downsample und gruppieren Punkte in 1 Punkt pro Zelle. Ich möchte nur ein 2D-Raster, also setze ich die z-Auflösung sehr groß.
loadCloud(cloud, 1);
pcl::VoxelGrid<pcl::PointXYZRGB> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(resolution, resolution, 500);
sor.filter(*cloud_projected);
pcl::PointXYZRGB minpoint;
pcl::PointXYZRGB maxpoint;
pcl::getMinMax3D(*cloud, minpoint, maxpoint);
cout << "min " << minpoint.x << " max x " << maxpoint.x<<endl;
cout << "min " << minpoint.y << " max x " << maxpoint.y<<endl;
pcl::io::savePCDFileASCII("ground_0.1.pcd", *cloud_projected);
Separat habe ich ein anderes Programm in Python, das ich Pandas verwenden, um die Punkte zu überprüfen. Das Problem ist, wenn ich den xy-Schwerpunkt in ihre Rasterzellen bin, gibt es> 1 Punkte pro Zelle, was unten zu einem Assertionsfehler führt. Der Unterschied ist in der Anzahl der Punkte ist groß: 27841173 Punkte aus der pcd-Datei gelesen, aber wenn ich in ihre Gitter konvertieren und die Duplikate fallen gibt es nur 25779908.
Irgendwelche Idee?
mapdf = pd.read_csv(map_file, names=['x', 'y', 'z', 'intensity'], header=None, sep=" ", skiprows=11)
mapdf.drop(['z'], axis = 1)
mapdf, ngrids = self.init_map(mapdf)
def init_map(self, df):
df['x'] = df.x #- 23527.262795251976
df['y'] = df.y #- 30751.407782477283
self.min_x = df.x.min()
self.max_x = df.x.max()
self.min_y = df.y.min()
self.max_y = df.y.max()
#ngrids = np.ceil((df.y.max() - df.y.min())/self.resolution), \
# np.ceil((df.x.max() - df.x.min())/self.resolution)
ngrids = (20419, 12902)
df['x'] = np.floor((df.x - df.x.min())/self.resolution)
df['y'] = np.floor((df.y - df.y.min())/self.resolution)
assert df.shape == df.drop_duplicates().shape