3Dメッシュを作成して指定領域の表面積を求めたい.
21 views (last 30 days)
Show older comments
点群データ(.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)
0 Comments
Accepted Answer
Atsushi Ueno
on 11 Jan 2023
> 例えばsurfaceAreaの領域を 座標の範囲をそれぞれ X(-100:100),Y(-200:200),Z(100:1500)にしたい
%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) %このとき領域が指定されているようにしたい
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) % 凸形状が平に押しつぶされた分、面積が減少した
plot(shp)
More Answers (0)
See Also
Categories
Find more on LIDAR および点群の処理 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!