3Dメッシュを作成し​て指定領域の表面積を​求めたい.

28 ビュー (過去 30 日間)
H.O
H.O 2023 年 1 月 10 日
コメント済み: H.O 2023 年 1 月 13 日
点群データ(.ply)からメッシュを作成し,その表面積を求めたく,
を参考にアルファシェイプから表面積をもとめています.
例えばsurfaceAreaの領域を 座標の範囲をそれぞれ X(-100:100),Y(-200:200),Z(100:1500)
にしたいのですが,どのように書くとよろしいでしょうか.
%plyをロード.ダウンサンプリング
ptCloud = pcread(test.ply);
gridstep = 0.5;
ptCloudDownSampled = pcdownsample(ptCloud,"gridAverage",gridstep);
%アルファ形状作成
P=double(ptCloudDownSampled.Location);
shp = alphaShape(P, 10,'HoleThreshold',500);
plot(shp)
%表面積を計算
totalsurfarea = surfaceArea(shp); %このとき領域が指定されているようにしたい
disp (totalsurfarea)

採用された回答

Atsushi Ueno
Atsushi Ueno 2023 年 1 月 11 日
> 例えばsurfaceAreaの領域を 座標の範囲をそれぞれ X(-100:100),Y(-200:200),Z(100:1500)にしたい
surfaceAreaの領域を、指定範囲で「押し潰す」即ち Saturation 処理すれば良いと解釈しました。
サンプルデータとして、pcread関数のドキュメントに出てくる teapot.ply を使いました。
%plyをロード.ダウンサンプリング
ptCloud = pcread('teapot.ply'); % test.ply の代わり
gridstep = 0.5;
ptCloudDownSampled = pcdownsample(ptCloud,"gridAverage",gridstep);
%アルファ形状作成
P=double(ptCloudDownSampled.Location);
shp = alphaShape(P, 10,'HoleThreshold',500);
%表面積を計算
totalsurfarea = surfaceArea(shp) %このとき領域が指定されているようにしたい
totalsurfarea = 50.7671
plot(shp)
%P(:,1) = min(1, max(-1, P(:,1))); % x座標のSaturation処理 X(-100:100) の代わりに X(-1:1)
%P(:,2) = min(1, max(-1, P(:,2))); % y座標のSaturation処理 Y(-200:200) の代わりに Y(-1:1)
P(:,3) = min(1, max( 0, P(:,3))); % z座標のSaturation処理 Z(100:1500) の代わりに Z(0:1)
shp = alphaShape(P, 10,'HoleThreshold',500);
%表面積を計算
totalsurfarea = surfaceArea(shp) % 凸形状が平に押しつぶされた分、面積が減少した
totalsurfarea = 35.7608
plot(shp)
  1 件のコメント
H.O
H.O 2023 年 1 月 13 日
ありがとうございます.計算できました.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLIDAR および点群の処理 についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!