3次元点群の法線ベクトルをもとめる

16 Ansichten (letzte 30 Tage)
H.O
H.O am 15 Okt. 2023
Bearbeitet: H.O am 18 Okt. 2023
3次元点群の任意点(point)に対して
・法線ベクトルとその単位ベクトルを求めたいです
・求めた近似平面と法線ベクトルを可視化(グラフ表示)したいです
どのようにするとよろしいでしょうか
%任意点とその半径から捜査範囲を設定
ptCloud=pcread('airplane.ply');%サンプルデータ参照元https://people.sc.fsu.edu/~jburkardt/data/ply/ply.html
point = [901.47 34.53 64.99]; radius = 10;
[indices,dists] = findNeighborsInRadius(ptCloud,point,radius);
ptCloudB = select(ptCloud,indices);
X=ptCloudB.Location;
%参考:主成分分析を使用した直交回帰の近似 - MATLAB & Simulink Example - MathWorks 日本
[coeff,score,roots] = pca(X);
normal = coeff(:,3) %近似平面の法線ベクトル
%%以降に可視化するコードを書きたい

Akzeptierte Antwort

Tohru Kikawada
Tohru Kikawada am 16 Okt. 2023
Bearbeitet: Tohru Kikawada am 16 Okt. 2023
pcnormalsで実現するのはいかがでしょうか。
websave("airplane.ply","https://people.sc.fsu.edu/~jburkardt/data/ply/airplane.ply");
ans = '/users/mss.system.mOV4N3/airplane.ply'
ptCloud=pcread('airplane.ply');
normals = pcnormals(ptCloud);
figure
pcshow(ptCloud)
title('Estimated Normals of Point Cloud')
hold on
% Figure contains an axes object. The axes object with title Estimated Normals of Point Cloud contains an object of type scatter.
x = ptCloud.Location(1:10:end,1);
y = ptCloud.Location(1:10:end,2);
z = ptCloud.Location(1:10:end,3);
u = normals(1:10:end,1);
v = normals(1:10:end,2);
w = normals(1:10:end,3);
% 法線ベクトルをプロットします。
quiver3(x,y,z,u,v,w);
  1 Kommentar
H.O
H.O am 18 Okt. 2023
Bearbeitet: H.O am 18 Okt. 2023
ありがとうございます.参照させていただきます.
また,法線ベクトルを指定した点群の範囲につき1つに定義したく,
例えばPCAで求まる近似平面など から法線ベクトル1つを計算できればと考えています.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Statistics and Machine Learning Toolbox 入門 finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!