私はどこかで間違いを犯すと誰かが指摘してくれることを望んでいます。pcl voxelgridポイント数が集計されていませんか?
私はPCL(1.8)のボクセルグリッドフィルタを使ってサンプルをダウンさせ、グループポイントをセルごとに1ポイントにするlazファイルを持っています。私は2Dグリッドだけが必要なので、私はz解像度を本当に大きく設定しました。
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);
別に、私はポイントを確認するために私がパンダを使用する別のプログラムをpythonで持っています。問題は、xyセントロイドポイントをグリッドセルにビンすると、1セルあたり1ポイント以上があるため、以下のアサーションエラーが発生します。違いはポイント数が多いです:27841173ポイントはpcdファイルから読み込みますが、グリッドに変換して重複を削除すると25779908しかありません。
ご存知ですか?あなたがあなたのPythonスクリプトを持っているかもしれない最悪のケースでは
sor.setLeafSize(resolution, resolution, 500);
:PCLボクセルグリッドフィルタは、サイズがで定義された葉セルに含まれるすべてのポイントの重心を返し
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