2016-04-05 13 views
0

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 

cevap

0

PCL voksel ızgara filtresi hangi boyutta yaprak hücresinde bulunan tüm noktaların kütle merkezini döndürür ile tanımlanır hücrenin (x, y) hücrenizin sağ kenarına yerleştirilmiş bir kütle merkezi noktası ve (x + 1, y) hücresinde sol kenarda bir nokta olabilir. X eksenindeki bu noktalar arasındaki mesafe çok küçük olabilir ve aynı df ['x'] ile sonuçlanabilir. Bu yüzden çiftleriniz var.