[英]Calculating 3d Point Normals in MATLab
我在 MATLab 中有一個 3d 點的點雲。 點雲采用 3xN 矩陣的形式。
我想以 3xN 矩陣的形式計算每個點的法線。 我該怎么做呢?
到目前為止,我已經嘗試使用
nX = (surfnorm(X'))';
其中 X 是我的點雲,而 nX 應該是我返回的法線。 但是,每當我嘗試以這種方式進行渲染時,它似乎都不起作用……這是正確的方法嗎?
提前致謝!
由於您擁有 3 x N 點雲,因此假設它的名稱為mat
。 那么我建議采取以下方法:
% Constructing the Point Cloud and Data Structure
ptCloud = pointCloud(mat);
% Normal Esitmation (3 is simply tthe number of points used for local plane fitting)
normals = pcnormals(ptCloud,3);
此時,您的法線以 (3N) x 3 矩陣的形式計算。 您可以通過以下方式將其添加為點雲的屬性
ptCloud.Normal = normals;
為了可視化它,可以執行以下操作:
step_size = 10;
x = ptCloud.Location(1:step_size:end,1);
y = ptCloud.Location(1:step_size:end,2);
z = ptCloud.Location(1:step_size:end,3);
u = ptCloud.Normal(1:step_size:end,1);
v = ptCloud.Normal(1:step_size:end,2);
w = ptCloud.Normal(1:step_size:end,3);
% plot
figure;
hold on
% plot the point cloud
pcshow(ptCloud);
% plot the normal arrows
quiver3(x,y,z,u,v,w);
hold off
最后一條評論:與簡單地繪制點矩陣相比,通過pointCloud
函數創建點雲提供了更加優化的可視化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.