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

29 visualizaciones (últimos 30 días)
H.O
H.O el 10 de En. de 2023
Comentada: H.O el 13 de En. de 2023
点群データ(.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)

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 11 de En. de 2023
> 例えば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 comentario
H.O
H.O el 13 de En. de 2023
ありがとうございます.計算できました.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre LIDAR および点群の処理 en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!