3次元点群の法線ベクトルをもとめる
23 views (last 30 days)
Show older comments
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) %近似平面の法線ベクトル
%%以降に可視化するコードを書きたい
0 Comments
Accepted Answer
Tohru Kikawada
on 16 Oct 2023
Edited: Tohru Kikawada
on 16 Oct 2023
pcnormalsで実現するのはいかがでしょうか。
websave("airplane.ply","https://people.sc.fsu.edu/~jburkardt/data/ply/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);
More Answers (0)
See Also
Categories
Find more on 次元削減と特徴抽出 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!