日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab练习程序(点云表面法向量)

發布時間:2025/3/21 循环神经网络 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab练习程序(点云表面法向量) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路還是很容易想到的:

1.首先使用KD樹尋找當前點鄰域的N個點,這里取了10個,直接調用了vlfeat。

2.用最小二乘估計當前鄰域點組成的平面,得到法向量。

3.根據當前鄰域點平均值確定鄰域質心,通常質心會在彎曲表面的內部,反方向即為法線方向。

vlfeat在這里下載,配置參考這里,rabbit.pcd下載地址

處理效果如下:

原始點云:

點云表面法向量,做了降采樣處理:

兔子果斷變刺猬。

matlab代碼如下:

clear all; close all; clc; warning off;pc = pcread('rabbit.pcd'); pc=pcdownsample(pc,'random',0.3); %0.3倍降采樣 pcshow(pc);pc_point = pc.Location'; %得到點云數據 kdtree = vl_kdtreebuild(pc_point); %使用vlfeat建立kdtreenormE=[]; for i=1:length(pc_point)p_cur = pc_point(:,i);[index, distance] = vl_kdtreequery(kdtree, pc_point, p_cur, 'NumNeighbors', 10); %尋找當前點最近的10個點p_neighbour = pc_point(:,index)';p_cent = mean(p_neighbour); %得到局部點云平均值,便于計算法向量長度和方向%最小二乘估計平面X=p_neighbour(:,1);Y=p_neighbour(:,2);Z=p_neighbour(:,3);XX=[X Y ones(length(index),1)];YY=Z;%得到平面法向量C=(XX'*XX)\XX'*YY;%局部平面指向局部質心的向量dir1 = p_cent-p_cur';%局部平面法向量dir2=[C(1) C(2) -1];%計算兩個向量的夾角ang = sum(dir1.*dir2) / (sqrt(dir1(1)^2 +dir2(1)^2) + sqrt(dir1(2)^2 +dir2(2)^2)+sqrt(dir1(3)^2 +dir2(3)^2) );%根據夾角判斷法向量正確的指向flag = acos(ang);dis = norm(dir1);if flag<0dis = -dis;end%畫出當前點的表面法向量t=(0:dis/100:dis)';x = p_cur(1) + C(1)*t;y = p_cur(2) + C(2)*t;z = p_cur(3) + (-1)*t;normE =[normE;x y z];i end pcshowpair(pc,pointCloud(normE));

總結

以上是生活随笔為你收集整理的matlab练习程序(点云表面法向量)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。