matlab点群アライメント(総括性)


前言


点群は通常、物理世界の表面を測定するために使用されます.これらはロボットのナビゲーションと感知,深さ推定,立体視,視覚登録および高度な運転補助システム(ADAS)に応用される.コンピュータビジュアルシステムToolbox™アルゴリズムは点群処理機能を提供し、サンプリング、ノイズ除去、点群変換に使用します.このツールボックスには、3 D点群のジオメトリに適した点群アライメント、および点群の読み取り、書き込み、格納、表示、比較の機能も用意されています.また、複数の点群を組み合わせて、反復最近接点(ICP)アルゴリズムを使用して3 Dシーンを再構築することもできます.

名前について


matlabのドキュメントで言うのはPoint Cloud Registrationで、Registrationという言葉は登録の意味があり、画像アライメントとラスタが重なるという意味もあります.ここは明らかに、アライメントと訳すべきだ.

matlab点群のアライメントについて


pcregistericpとpcregisterndtを使用して、モバイルポイントクラウドを固定ポイントクラウドに登録できます.これらのアライメントアルゴリズムは反復最近接点(ICP)アルゴリズムと正規分布変換(NDT)アルゴリズムにそれぞれ基づいている.最適なパフォーマンスには、データのプロパティを調整する必要があります.ポイントクラウド登録機能を使用する前に、pcdownsampleを使用してポイントクラウドをサンプリングし、登録の正確性と効率を向上させることを考慮してください.

点群のアライメント


点群を読み込んだ後

点群の下サンプル


pcdownsample関数は、この操作を完了します.
ptCloudOut = pcdownsample(ptCloudIn,'random',percentage)
ptCloudOut = pcdownsample(ptCloudIn,'gridAverage',gridStep)
ptCloudOut = pcdownsample(ptCloudIn,'nonuniformGridSample',maxNumPoints)

3つのパラメータに対応するのは、点群、下サンプリング方法、1つの方法の属性値です.サンプリング方法については,後で述べるが,この文章はこの細部に注目しない.以下のサンプリング例では、3次元解像度(0.1 x 0.1 x 0.1)を設定.
ptCloud = pcread('teapot.ply');
gridStep = 0.1;
ptCloudA = pcdownsample(ptCloud,'gridAverage',gridStep);

figure;
pcshow(ptCloudA);‘

これはmatlabの持参例で直接実行できます.

点群のリジッド変換

ptCloudOut = pctransform(ptCloudIn,tform)関数は変更機能を実現する.指定した順方向剛性変換を入力点群に適用します.

A = [cos(pi/4) sin(pi/4) 0 0; ...
     -sin(pi/4) cos(pi/4) 0 0; ...
     0 0 1 0; ...
     0 0 0 1];
tform = affine3d(A);

ptCloudOut = pctransform(ptCloud,tform);

figure
pcshow(ptCloudOut);
xlabel('X');
ylabel('Y');
zlabel('Z');

ここで、tformはaffine 3 d objectである.affine 3 dを用いてパラメータのフォーマット要件を完了した.

ICPアルゴリズムを使用して2つの点群をアライメントする


PCregistericp関数.アルゴリズムの詳細については、別の文章を開くしかありません.そうしないと、この文章は臭くて長くなります.ICPは2つの点群の間の剛性変換を推定して直接1つの例を見て,この過程が何を得ることができるかを理解できる.

A = [cos(pi/6) sin(pi/6) 0 0; ...
    -sin(pi/6) cos(pi/6) 0 0; ...
            0         0  1 0; ...
            5         5 10 1];
tform1 = affine3d(A);
Transform the point cloud.

ptCloudTformed = pctransform(ptCloud,tform1);

pcshow(ptCloudTformed);
title('Transformed Teapot');



tform = pcregistericp(ptCloudTformed,ptCloud,'Extrapolate',true);


disp(tform1.T);
    0.8660    0.5000         0         0
   -0.5000    0.8660         0         0
         0         0    1.0000         0
    5.0000    5.0000   10.0000    1.0000
tform2 = invert(tform);
disp(tform2.T);
    0.8660    0.5000   -0.0000         0
   -0.5000    0.8660    0.0000         0
    0.0000   -0.0000    1.0000         0
    5.0000    5.0000   10.0000    1.0000

ここで、アライメント後に得られるtformと剛性変換のtform 1は、剛性変換、affine 3 dオブジェクトを表す同じタイプのデータであることがわかる.tfformはアライメントの成果です.結果を比べると、推定は正確だ.ここにほかの用法を列挙して,後で暇を見つけてから話す
tform = pcregistericp(moving,fixed)
[tform,movingReg] = pcregistericp(moving,fixed)
[___,rmse] = pcregistericp(moving,fixed)
[___] = pcregistericp(moving,fixed,Name,Value)

NDTアルゴリズムは2つの点群をアライメントする


tform=pcregisterndt(moving,fixed,gridStep)は、固定点群で移動点群を登録する剛性変換を返す.点群はgridStepの大きさの立方体にボクセル化される.より直感的に見るためには、やはり例の効果を見る(moving fixedは2つの点群を表す)


movingDownsampled = pcdownsample(moving,'gridAverage',0.1);

gridStep = 0.5;
tform = pcregisterndt(movingDownsampled,fixed,gridStep);


movingReg = pctransform(moving,tform);
pcshowpair(movingReg,fixed,'VerticalAxis','Y','VerticalAxisDir','Down')

得られたtformは依然として剛性変換を表し,栄ICPのtformは同じである.ここでpcshoowpairは、2つのポイントクラウドの違いを表示するために使用されます.

点群のマージ


ptCloudOut=pcmerge(ptCloudA,ptCloudB,gridStep)ボックスメッシュフィルタを使用して、マージされた点群を返します.gridStepフィルタの3-Dボックスのサイズを指定します.
マージされた点群を直接取得

3 D点群を格納するオブジェクト

ptCloud = pointCloud(xyzPoints)
ptCloud = pointCloud(xyzPoints,Name,Value)

xyzPointsはM-by-3 or an M-by-N-by-3の行列である.関数は点群オブジェクトを取得します.
ポイントクラウドオブジェクトのストレージは以前に述べました.