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

点群データ(.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일

0 개 추천

> 例えば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개)

카테고리

도움말 센터File Exchange에서 LIDAR および点群の処理에 대해 자세히 알아보기

제품

릴리스

R2021b

질문:

H.O
2023년 1월 10일

댓글:

H.O
2023년 1월 13일

Community Treasure Hunt

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

Start Hunting!