Main Content

extractEigenFeatures

点群セグメントから固有値ベースの特徴を抽出

R2021a 以降

説明

features = extractEigenFeatures(ptCloud,labels) は、セグメント化された点群に対応するラベル labels を使用して、点群から固有値ベースの特徴を抽出します。

固有値ベースの特徴は、点群セグメントの幾何学的特徴を示します。これらの特徴は、自己位置推定と環境地図作成の同時実行 (SLAM) の用途で、ループ閉じ込みの検出やターゲット マップでの位置推定に使用できます。

features = extractEigenFeatures(segmentsIn) は、点群セグメント segmentsIn から固有値ベースの特徴を返します。この構文を使用すると、局所特徴抽出のための点群スキャンで特定のセグメントの選択が容易になります。

[features,segmentsOut] = extractEigenFeatures(___) は、前述した構文の任意の引数を組み合わせて使用して、入力点群から抽出されたセグメントを追加で返します。この構文を使用すると、セグメントの可視化が容易になります。

[___] = extractEigenFeatures(___,NormalizeEigenvalues=tf) は、特徴を計算する前に固有値を正規化します。true または false として指定します。次のステップで分類器を使用してセマンティック ラベルを 3 次元の点に割り当てる場合は、tftrue に設定します。次のステップで一致する特徴を検出する場合は、tffalse に設定します。既定値は false です。

すべて折りたたむ

オーガナイズド LiDAR 点群を読み込みます。

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

地面をセグメント化して除去します。

groundPtsIdx = segmentGroundFromLidarData(ptCloud,'ElevationAngleDelta',15);
ptCloud = select(ptCloud,~groundPtsIdx,'OutputSize','full');

クラスターあたりの点の数を最低 50 個として、残りの点をクラスター化します。

distThreshold = 0.5; % in meters
minPoints = 50;
[labels,numClusters] = segmentLidarData(ptCloud,distThreshold,'NumClusterPoints',minPoints);

固有値ベースの特徴を計算します。

features = extractEigenFeatures(ptCloud,labels,'NormalizeEigenvalues',true)
features=17×1 object
  16x1 eigenFeature array with properties:

    Feature
    Centroid
      ⋮

Velodyne PCAP ファイル リーダーを作成します。

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');

ファイルから 1 番目と 4 番目のスキャンを読み取ります。

ptCloud1 = readFrame(veloReader,1);
ptCloud2 = readFrame(veloReader,4);

スキャンから地面を除去します。

maxDistance = 1; % in meters
referenceVector = [0 0 1];
[~,~,selectIdx] = pcfitplane(ptCloud1,maxDistance,referenceVector);
ptCloud1 = select(ptCloud1,selectIdx,'OutputSize','full');
[~,~,selectIdx] = pcfitplane(ptCloud2,maxDistance,referenceVector);
ptCloud2 = select(ptCloud2,selectIdx,'OutputSize','full');

クラスターあたりの点の数を最低 10 個として、点群をクラスター化します。

minDistance = 2; % in meters
minPoints = 10;
labels1 = pcsegdist(ptCloud1,minDistance,'NumClusterPoints',minPoints);
labels2 = pcsegdist(ptCloud2,minDistance,'NumClusterPoints',minPoints);

固有値の特徴および対応するセグメントを各点群から抽出します。

[eigFeatures1,segments1] = extractEigenFeatures(ptCloud1,labels1);
[eigFeatures2,segments2] = extractEigenFeatures(ptCloud2,labels2);

一致させるために、各点群から抽出した特徴と重心の行列を作成します。

features1 = vertcat(eigFeatures1.Feature);
features2 = vertcat(eigFeatures2.Feature);
centroids1 = vertcat(eigFeatures1.Centroid);
centroids2 = vertcat(eigFeatures2.Centroid);

推定的な特徴の一致を検出します。

indexPairs = pcmatchfeatures(features1,features2, ...
    pointCloud(centroids1),pointCloud(centroids2));

一致したセグメントと特徴を可視化のために取得します。

matchedSegments1 = segments1(indexPairs(:,1));
matchedSegments2 = segments2(indexPairs(:,2));
matchedFeatures1 = eigFeatures1(indexPairs(:,1));
matchedFeatures2 = eigFeatures2(indexPairs(:,2));

一致を可視化します。

figure
pcshowMatchedFeatures(matchedSegments1,matchedSegments2,matchedFeatures1,matchedFeatures2)
title('Matched Segments')

Figure contains an axes object. The axes object with title Matched Segments contains 5 objects of type scatter, line. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

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

クラスター ラベル。アンオーガナイズド点群の場合は数値の M 要素ベクトル、オーガナイズド点群の場合は数値の M 行 N 列の行列として指定します。ラベルは、入力点群のセグメント化の結果に対応します。点群の各点には、labels の対応する要素によって指定されたクラスター ラベルが 1 つずつあります。

関数 pcsegdist または segmentLidarData を使用してラベルを返すことができます。

点群セグメント。pointCloud オブジェクトのベクトルとして指定します。入力の各点群セグメントには、特徴抽出のために最低 2 個の点が必要です。点が 1 個だけの入力セグメントに関しては、特徴もセグメントも返されません。

出力引数

すべて折りたたむ

固有値ベースの特徴。eigenFeature オブジェクトのベクトルとして返されます。ラベル付けされた点群入力から特徴を抽出する場合、このベクトルの各要素には、ラベル付けされた点の対応するクラスターから抽出された特徴が含まれます。セグメント入力から特徴を抽出する場合、このベクトルの各要素には、セグメント ベクトルの対応する要素から抽出された特徴が含まれます。

点群から抽出されたセグメント。pointCloud オブジェクトのベクトルとして指定します。セグメント ベクトルの長さは、非ゼロの一意のラベル数に対応します。

参照

[1] Weinmann, M., B. Jutzi, and C. Mallet. “Semantic 3D Scene Interpretation: A Framework Combining Optimal Neighborhood Size Selection with Relevant Features.” ISPRS Annals of Photogrammetry, Remote Sensing and Spatial Information Sciences II–3 (August 7, 2014): 181–88. https://doi.org/10.5194/isprsannals-II-3-181-2014.

バージョン履歴

R2021a で導入