3次元点群に対して主成分分析を使用した直交回帰の近似の仕方
20 views (last 30 days)
Show older comments
MATLAB内で提供されている以下のコードについてです
openExample('stats/orthoregdemo')
求めたいのは平面ではなく、直線です。
点群のデータを任意のものに変換するとしたらどういった変更を加えたら良いでしょうか。
例えば、csvファイル等から3次元の点群の座標を読み込みたいです。
0 Comments
Answers (1)
交感神経優位なあかべぇ
on 23 Jul 2023
Edited: 交感神経優位なあかべぇ
on 23 Jul 2023
下記に3次元空間内での近似直線を示すサンプルを書きました。
近似直線の通る点 s は、s = [dirVect] .* t + [meanX]になります。
% サンプルデータの作成(CSVデータなどからの読み取りに変更)
rng(5,'twister');
X = mvnrnd([0 0 0], [1 .2 .7; .2 1 0; .7 0 1],50);
% 主成分分析(https://jp.mathworks.com/help/stats/principal-component-analysis-pca.html)
% 1行目は、サンプルデータの近似直線の傾きを示す方向ベクトル。
% (2行目は、上記近似直線の直行成分に対する方向ベクトル。近似平面を作成する場合は、1行目と2行目が必要。)
% (3行目は、近似平面の法線ベクトル。近似平面の作成は、3行目のみでも可。)
coeff = pca(X)
dirVect = coeff(:,1)'; % 近似直線の傾き成分のみ選択
meanX = mean(X, 1); % サンプルデータの平均値(近似直線は、この点を必ず通る)
% サンプルデータに近似する空間の1次直線の描画(t=0 ~ 10までの直線を描画)
t = [0,10];
lctn = zeros(2,3);
lctn(1,:) = coeff(:,1)' .* t(1) + meanX;
lctn(2,:) = coeff(:,1)' .* t(2) + meanX;
plot3(lctn(:,1), lctn(:,2), lctn(:,3));
0 Comments
See Also
Categories
Find more on LIDAR および点群の処理 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!