法線空間采樣
NormalSpaceSampling即:法線空間采樣,它在法向量空間內(nèi)均勻隨機抽樣,使所選點之間的法線分布盡可能大,結(jié)果表現(xiàn)為地物特征變化大的地方剩余點較多,變化小的地方剩余點稀少,可有效保持地物特征。實現(xiàn)方法如下:
1、首先計算每個點的K領(lǐng)域,然后計算點到領(lǐng)域點的法線夾角值,以此來近似達到曲率的效果并提高計算效率,因為曲率越大的地方,夾角值越大。
2、設(shè)置一個角度閾值,當點的領(lǐng)域夾角值大于閾值時被認為是特征明顯的區(qū)域,其余區(qū)域為不明顯區(qū)域。
3、對明顯和不明顯區(qū)域進行均勻采樣,采樣數(shù)分別為U_(1-V)和U_V,U是目標采樣數(shù),V是均勻采樣性。
// 創(chuàng)建基于鄰域的法向估計類對象
// // 基于omp并行加速,需配置開啟OpenMP
// pcl::NormalEstimationOMP< pcl::PointXYZ, pcl::Normal > ne;
// ne.setNumberOfThreads(10);
pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal > ne;
// 創(chuàng)建一個空的kdtree對象,并把它傳遞給法線估計對象,
// 用于創(chuàng)建基于輸入點云數(shù)據(jù)的鄰域搜索kdtree
pcl::search::KdTree< pcl::PointXYZ >::Ptr
tree(new pcl::search::KdTree< pcl::PointXYZ >());
// 傳入待估計法線的點云數(shù)據(jù),智能指針
ne.setInputCloud(cloud_src);
// 傳入kdtree對象,智能指針
ne.setSearchMethod(tree);
// 設(shè)置鄰域搜索半徑
ne.setRadiusSearch(0.1f); // 設(shè)置半徑時,要考慮到點云空間間距
// // 也可以設(shè)置最近鄰點個數(shù)
// ne.setKSearch(25);
// 設(shè)置視點源點,用于調(diào)整點云法向(指向視點),默認(0,0,0)
ne.setViewPoint(0,0,0);
// 計算法線數(shù)據(jù)
ne.compute(*cloud_normals);
// 通過concatenateFields函數(shù)將point和normal組合起來形成PointNormal點云數(shù)據(jù)
pcl::PointCloud< pcl::PointNormal >::Ptr
cloud_with_normal(new pcl::PointCloud< pcl::PointNormal >());
pcl::PointCloud< pcl::PointNormal >::Ptr
cloud_with_normal_sampled(new pcl::PointCloud< pcl::PointNormal >());
pcl::concatenateFields(*cloud_src, *cloud_normals, *cloud_with_normal);
// 創(chuàng)建法向空間采樣(模板)類對象
pcl::NormalSpaceSampling< pcl::PointNormal, pcl::Normal > nss;
// 設(shè)置xyz三個法向空間的分類組數(shù),此處設(shè)置為一致,根據(jù)具體場景可以調(diào)整
const int kBinNum = 8;
nss.setBins(kBinNum, kBinNum, kBinNum);
// 如果傳入的是有序點云,此處可以嘗試設(shè)置為true
nss.setKeepOrganized(false);
// 設(shè)置隨機種子,這樣可以保證同樣的輸入可以得到同樣的結(jié)果,便于debug分析
nss.setSeed(200); // random seed
// 傳入待采樣的點云數(shù)據(jù)
nss.setInputCloud(cloud_with_normal);
// 傳入用于采樣分析的法線數(shù)據(jù),需與傳入點云數(shù)據(jù)一一對應(yīng)
nss.setNormals(cloud_normals);
// 設(shè)置采樣總數(shù),即目標點云的總數(shù)據(jù)量
const float kSampleRatio = 0.1f;
nss.setSample(cloud_with_normal- >size()*kSampleRatio);
// 執(zhí)行采樣并帶出采樣結(jié)果
nss.filter(*cloud_with_normal_sampled);
-
plc
+關(guān)注
關(guān)注
5013文章
13321瀏覽量
463986 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7079瀏覽量
89165 -
采樣
+關(guān)注
關(guān)注
1文章
121瀏覽量
25579
發(fā)布評論請先 登錄
相關(guān)推薦
評論