Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

pcdownsample

3 次元点群のダウンサンプリング

説明

ptCloudOut = pcdownsample(ptCloudIn,'random',percentage) は、無作為抽出と非復元抽出でダウンサンプリングされた点群を返します。percentage 入力は、出力に返される入力の一部を指定します。

ptCloudOut = pcdownsample(ptCloudIn,'gridAverage',gridStep) は、ボックス グリッド フィルターを使用してダウンサンプリングされた点群を返します。gridStep 入力では、3 次元ボックスのサイズを指定します。

ptCloudOut = pcdownsample(ptCloudIn,'nonuniformGridSample',maxNumPoints) は不等間隔ボックス グリッド フィルターを使用してダウンサンプリングされた点群を返します。グリッド ボックスの最大点数 maxNumPoints6 以上に設定しなければなりません。

[ptCloudOut,indices] = pcdownsample(___) は、ダウンサンプリングされた点群に含まれる点の線形インデックスを返します。この構文は、'random' ダウンサンプリング法または 'nonuniformGridSample' ダウンサンプリング法を使用する場合にのみ適用されます。

___ = pcdownsample(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を指定します。

すべて折りたたむ

点群を読み取ります。

ptCloud = pcread('teapot.ply');

3 次元の解像度を (0.1 x 0.1 x 0.1) に設定します。

gridStep = 0.1;
ptCloudA = pcdownsample(ptCloud,'gridAverage',gridStep);

ダウンサンプリング後のデータを可視化します。

figure;
pcshow(ptCloudA);

Figure contains an axes object. The axes object contains an object of type scatter.

点群を、固定ステップ サイズを使用してダウンサンプリングしたデータと比較します。

stepSize = floor(ptCloud.Count/ptCloudA.Count);
indices = 1:stepSize:ptCloud.Count;
ptCloudB = select(ptCloud, indices);

figure;
pcshow(ptCloudB);

Figure contains an axes object. The axes object contains an object of type scatter.

同じ座標を共有しているすべての点を含む点群を作成します。

ptCloud = pointCloud(ones(100,3));

3 次元の分解能を小さい値に設定します。

gridStep = 0.01;

出力には 1 つの一意の点のみ含まれます。

ptCloudOut = pcdownsample(ptCloud,'gridAverage',gridStep)
ptCloudOut = 
  pointCloud with properties:

     Location: [1 1 1]
        Count: 1
      XLimits: [1 1]
      YLimits: [1 1]
      ZLimits: [1 1]
        Color: [0x3 uint8]
       Normal: [0x3 double]
    Intensity: [0x1 double]

保存された MAT ファイルからオーガナイズド点群を読み込みます。

ld = load('drivingLidarPoints.mat');
orgPtCloud = ld.ptCloud;

点群をダウンサンプリングします。

percentage = 0.1;
orgPtCloudOut = pcdownsample(orgPtCloud,'random',percentage,PreserveStructure=true);

入力引数

すべて折りたたむ

点群。pointCloud オブジェクトとして指定します。

ランダム ダウンサンプリング法。'random' として指定します。'random' 法は、特に点群のレジストレーション前に適用される場合は 'gridAverage' ダウンサンプリング法よりも効率的です。

入力の割合。[0, 1] の範囲内の非負のスカラーとして指定します。percentage 入力では、関数から返される入力の一部を指定します。

グリッド平均ダウンサンプリング法。'gridAverage' として指定します。同じボックス内の点が出力の 1 点にマージされます。これに応じてそれらの色と法線プロパティが平均化されます。この方法では、'random' ダウンサンプリング法よりも点群の形状が効果的に保持されます。

関数は、点群全体の軸に沿った境界ボックスを計算します。境界ボックスは、gridStep で指定されたサイズのグリッド ボックスに分割されます。各グリッド ボックス内の点は、それらの位置、色、および法線を平均してマージされます。

グリッド フィルターの 3 次元ボックスのサイズ。数値として指定します。大きい細かなグリッドを構成する十分なリソースがない場合は gridStep のサイズを増やします。

データ型: single | double

不等間隔グリッド サンプリング法。'nonuniformGridSample' として指定します。'nonuniformGridSample' アルゴリズムを使用する場合、ダウンサンプリングの前に元のデータで法線が計算されます。ダウンサンプリングされた出力では、より正確な法線が維持されます。

グリッド ボックスの最大点数。6 よりも大きい整数として指定します。この方法では、各ボックスから 1 点をランダムに選択します。入力点群で法線が指定されていない場合、ptCloudOut 出力に法線プロパティが自動的に入力されます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: PreserveStructure=true は、点群のオーガナイズド構造を保持します。

点群のオーガナイズド構造の保持。true または false として指定します。次の表は、PreserveStructure の値に応じた点群の構造を示しています。

PreserveStructure関数が返すもの
true

ダウンサンプリングされたオーガナイズド点群。

点群の構造を説明するLocationプロパティには、M×N×3 の行列が格納されます。

ダウンサンプリングされた点群内で選択されていない点は NaN で塗りつぶされ、対応する色は [0 0 0] に設定されます。

オーガナイズド点群を返すには、入力はオーガナイズド点群でなければならず、ダウンサンプリング法は 'random' または 'nonuniformGridSample' でなければなりません。

false

ダウンサンプリングされたアンオーガナイズド点群。

点群の構造を説明するLocationプロパティには、M 行 3 列の行列が格納されます。

出力引数

すべて折りたたむ

ダウンサンプリングされた点群。pointCloud オブジェクトとして返されます。

ダウンサンプリングされた点群内の点のインデックス。N 要素ベクトルとして返されます。

参照

[1] Pomerleau, F., F. Colas, R. Siegwart, and S. Magnenat. “Comparing ICP variants on real-world data sets.” Autonomous Robots. Vol. 34, Issue 3, April 2013, pp. 133–148.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2015a で導入