Birisi bir yerde bir hata yapıp yapmadığımı gösterebilirse umuyorum.pcl voxelgrid nokta sayısı tally değil mi?
Bu yüzden PCL (1.8) 'in voxelgrid filtresini kullandığım bir laz dosyası var. Sadece bir 2D ızgara istiyorum, bu yüzden z çözünürlüğünün gerçekten büyük olmasını sağlıyorum.
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);
Ayrı, ben noktaları kontrol etmek panda kullanmak Python başka bir program var. Sorun şu ki, xy centroid noktalarını grid hücrelerine yerleştirdiğimde, hücre başına> 1 puan vardır ve bu da aşağıdaki iddia başarısızlığıyla sonuçlanır. Fark büyük sayıdır: pcd dosyasından okunan 27841173 nokta, ancak onların ızgaralarına dönüştüğümde ve kopyalar düştüğünde sadece 25779908 var.
Herhangi bir fikrin var mı? daki python komut dosyası olabilir kötü durumda
sor.setLeafSize(resolution, resolution, 500);
:
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