Main Content

detectRectangularPlanePoints

点群から指定した寸法の四角形平面を検出

R2020b 以降

説明

ptCloudPlanes = detectRectangularPlanePoints(ptCloudIn,planeDimensions) は、指定された寸法 planeDimensions の四角形平面 ptCloudPlanes を入力点群 ptCloudIn から検出して抽出します。

[ptCloudPlanes,ptCloudUsed] = detectRectangularPlanePoints(ptCloudArray,planeDimensions) は、一連の点群 ptCloudArray から四角形平面を検出します。さらに、関数は四角形平面が検出された点群を示す logical ベクトル ptCloudUsed を返します。

[___] = detectRectangularPlanePoints(ptCloudFileNames,planeDimensions) は、一連の点群ファイル ptCloudFileNames から四角形平面を検出し、前述の構文の任意の出力引数の組み合わせを返します。

[ptCloudPlanes,ptCloudUsed,indicesCell] = detectRectangularPlanePoints(___) は、前述の任意の引数の組み合わせに加え、検出された四角形平面内の点の各点群におけるインデックスを返します。

[___] = detectRectangularPlanePoints(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、'RemoveGround',true'RemoveGround' フラグを true に設定し、処理前に入力点群から地面を除去します。

すべて折りたたむ

点群データをワークスペースに読み込みます。入力点群を可視化します。

ptCloud = pcread('pcCheckerboard.pcd');
pcshow(ptCloud)
title('Input Point Cloud')
xlim([-5 10])
ylim([-5 10])

Figure contains an axes object. The axes object with title Input Point Cloud contains an object of type scatter.

四角形平面の検索寸法を設定します。

boardSize = [729 810];

点群から四角形平面を探します。検出された四角形平面を可視化します。

lidarCheckerboardPlane = detectRectangularPlanePoints(ptCloud,boardSize, ...
    'RemoveGround',true);
hRect = figure;
panel = uipanel('Parent',hRect,'BackgroundColor',[0 0 0]);
ax = axes('Parent',panel,'Color',[0 0 0]); 
pcshow(lidarCheckerboardPlane,'Parent',ax)
title('Rectangular Plane Points')

Figure contains an axes object and an object of type uipanel. The axes object with title Rectangular Plane Points contains an object of type scatter.

検出された四角形平面を入力点群上に可視化します。

figure
pcshowpair(ptCloud,lidarCheckerboardPlane)
title('Detected Rectangular Plane')
xlim([-5 10])
ylim([-5 10])

Figure contains an axes object. The axes object with title Detected Rectangular Plane contains 2 objects of type scatter.

入力引数

すべて折りたたむ

点群。pointCloud オブジェクトとして指定します。関数は、この点群の中から四角形平面を探します。

点群の配列。P 行 1 列の pointCloud オブジェクトの配列として指定します。P は配列に含まれる pointCloud オブジェクトの数です。関数は、それぞれの点群の中から四角形平面を探します。

点群ファイルの名前。文字ベクトルまたは文字ベクトルの cell 配列として指定します。複数のファイル名を指定する場合は、文字ベクトルの cell 配列を使用する必要があります。

データ型: char | cell

四角形平面の寸法。正の実数の 2 要素ベクトルとして指定します。それぞれの要素で四角形平面の幅と長さをミリメートル単位で指定します。関数は、planeDimensions と同じ寸法の平面を入力点群から探します。

データ型: single | double

名前と値の引数

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

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name引用符で囲みます。

例: 'RemoveGround',true'RemoveGround' フラグを true に設定し、処理前に入力点群から地面を除去します。

隣接する 2 点のクラスタリングのしきい値。'MinDistance' とメートル単位の正のスカラーからなるコンマ区切りのペアとして指定します。クラスタリングの処理は、隣接する点の間のユークリッド距離に基づきます。隣接する 2 点間の距離がクラスタリングしきい値未満であれば、両方の点が同じクラスターに属します。低分解能の LiDAR では 'MinDistance' のしきい値を高くする必要があり、その逆も同様です。

メモ

この値は、チェッカーボードの 2 つの走査線間の最小距離より大きくなければなりません。'MinDistance' の値が小さすぎると、正しい検出結果が得られないことがあります。

データ型: single | double

検出の関心領域 (ROI)。'ROI' と [xmin, xmax, ymin, ymax, zmin, zmax] の形式のベクトルからなるコンマ区切りのペアとして指定します。このベクトルでは、ROI の x、y、および z のそれぞれの範囲を xmin と xmax、ymin と ymax、および zmin と zmax のペアとして指定します。

データ型: single | double

四角形平面の寸法における不確かさの許容誤差。'DimensionTolerance' と範囲 [0 1] の正のスカラーからなるコンマ区切りのペアとして指定します。'DimensionTolerance' が高いほど、四角形平面の寸法に対する許容範囲が大きいことを示します。

データ型: single | double

点群から地面を除去。'RemoveGround' と logical 0 (false) または 1 (true) からなるコンマ区切りのペアとして指定します。

平面の法線は、基準ベクトル [0 0 1] の z 軸の正方向に揃っているものと仮定されます。

データ型: logical

関数の進行状況を表示。'Verbose' と logical 0 (false) または 1 (true) からなるコンマ区切りのペアとして指定します。

データ型: logical

出力引数

すべて折りたたむ

検出された四角形平面。pointCloud オブジェクトまたは 1 行 P 列の pointCloud オブジェクトの配列として返されます。P は四角形平面が検出された入力点群の数になります。

パターン検出フラグ。1 行 N 列の logical ベクトルとして返されます。N は入力点群の数です。値 true は、対応する点群から関数で四角形平面が検出されたことを示します。値 false は、関数で四角形平面が検出されなかったことを示します。

検出された四角形平面のインデックス。1 行 P 列の cell 配列として返されます。ここで、P は四角形平面が検出された入力点群の数です。関数で四角形平面が検出された対応する点群のインデックスを指定する logical ベクトルが各 cell に格納されます。このインデックスを使用して、検出された平面を点群データから抽出できます。

バージョン履歴

R2020b で導入