法線(xiàn)空間采樣
NormalSpaceSampling即:法線(xiàn)空間采樣,它在法向量空間內(nèi)均勻隨機(jī)抽樣,使所選點(diǎn)之間的法線(xiàn)分布盡可能大,結(jié)果表現(xiàn)為地物特征變化大的地方剩余點(diǎn)較多,變化小的地方剩余點(diǎn)稀少,可有效保持地物特征。實(shí)現(xiàn)方法如下:
1、首先計(jì)算每個(gè)點(diǎn)的K領(lǐng)域,然后計(jì)算點(diǎn)到領(lǐng)域點(diǎn)的法線(xiàn)夾角值,以此來(lái)近似達(dá)到曲率的效果并提高計(jì)算效率,因?yàn)榍试酱蟮牡胤剑瑠A角值越大。
2、設(shè)置一個(gè)角度閾值,當(dāng)點(diǎn)的領(lǐng)域夾角值大于閾值時(shí)被認(rèn)為是特征明顯的區(qū)域,其余區(qū)域?yàn)椴幻黠@區(qū)域。
3、對(duì)明顯和不明顯區(qū)域進(jìn)行均勻采樣,采樣數(shù)分別為U_(1-V)和U_V,U是目標(biāo)采樣數(shù),V是均勻采樣性。
// 創(chuàng)建基于鄰域的法向估計(jì)類(lèi)對(duì)象
// // 基于omp并行加速,需配置開(kāi)啟OpenMP
// pcl::NormalEstimationOMP< pcl::PointXYZ, pcl::Normal > ne;
// ne.setNumberOfThreads(10);
pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal > ne;
// 創(chuàng)建一個(gè)空的kdtree對(duì)象,并把它傳遞給法線(xiàn)估計(jì)對(duì)象,
// 用于創(chuàng)建基于輸入點(diǎn)云數(shù)據(jù)的鄰域搜索kdtree
pcl::search::KdTree< pcl::PointXYZ >::Ptr
tree(new pcl::search::KdTree< pcl::PointXYZ >());
// 傳入待估計(jì)法線(xiàn)的點(diǎn)云數(shù)據(jù),智能指針
ne.setInputCloud(cloud_src);
// 傳入kdtree對(duì)象,智能指針
ne.setSearchMethod(tree);
// 設(shè)置鄰域搜索半徑
ne.setRadiusSearch(0.1f); // 設(shè)置半徑時(shí),要考慮到點(diǎn)云空間間距
// // 也可以設(shè)置最近鄰點(diǎn)個(gè)數(shù)
// ne.setKSearch(25);
// 設(shè)置視點(diǎn)源點(diǎn),用于調(diào)整點(diǎn)云法向(指向視點(diǎn)),默認(rèn)(0,0,0)
ne.setViewPoint(0,0,0);
// 計(jì)算法線(xiàn)數(shù)據(jù)
ne.compute(*cloud_normals);
// 通過(guò)concatenateFields函數(shù)將point和normal組合起來(lái)形成PointNormal點(diǎn)云數(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)建法向空間采樣(模板)類(lèi)對(duì)象
pcl::NormalSpaceSampling< pcl::PointNormal, pcl::Normal > nss;
// 設(shè)置xyz三個(gè)法向空間的分類(lèi)組數(shù),此處設(shè)置為一致,根據(jù)具體場(chǎng)景可以調(diào)整
const int kBinNum = 8;
nss.setBins(kBinNum, kBinNum, kBinNum);
// 如果傳入的是有序點(diǎn)云,此處可以嘗試設(shè)置為true
nss.setKeepOrganized(false);
// 設(shè)置隨機(jī)種子,這樣可以保證同樣的輸入可以得到同樣的結(jié)果,便于debug分析
nss.setSeed(200); // random seed
// 傳入待采樣的點(diǎn)云數(shù)據(jù)
nss.setInputCloud(cloud_with_normal);
// 傳入用于采樣分析的法線(xiàn)數(shù)據(jù),需與傳入點(diǎn)云數(shù)據(jù)一一對(duì)應(yīng)
nss.setNormals(cloud_normals);
// 設(shè)置采樣總數(shù),即目標(biāo)點(diǎn)云的總數(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)注
5016文章
13388瀏覽量
465416 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7144瀏覽量
89581 -
采樣
+關(guān)注
關(guān)注
1文章
123瀏覽量
25617
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
關(guān)于232的NCL,PCL的疑問(wèn)
PCL點(diǎn)云庫(kù)介紹及項(xiàng)目配置方式
EMIF介紹CE空間
阿爾法線(xiàn)圈是什么
PCL6143運(yùn)動(dòng)控制器原理及應(yīng)用
PCL6143運(yùn)動(dòng)控制器的原理及應(yīng)用
![<b class='flag-5'>PCL</b>6143運(yùn)動(dòng)控制器的原理及應(yīng)用](https://file.elecfans.com/web2/M00/48/CB/pYYBAGKhtCSABdGcAACHWOFvwEo857.jpg)
PCL電梯控制系統(tǒng)
中法海洋衛(wèi)星成功發(fā)射 首次實(shí)現(xiàn)海風(fēng)和海浪同步觀測(cè)
使用MATLAB編程實(shí)現(xiàn)里查森迭代法線(xiàn)性方程組求解的資料和程序免費(fèi)下載
![使用MATLAB編程實(shí)現(xiàn)里查森迭代<b class='flag-5'>法線(xiàn)</b>性方程組求解的資料和程序免費(fèi)下載](https://file.elecfans.com/web1/M00/A2/47/o4YBAF1NNfyAPfBWAABuPdkVkr4881.png)
空間曲線(xiàn)基于內(nèi)在幾何量的均勻采樣方法
![<b class='flag-5'>空間</b>曲線(xiàn)基于內(nèi)在幾何量的均勻<b class='flag-5'>采樣</b>方法](https://file.elecfans.com/web1/M00/EC/55/pIYBAGCA7-2AATJBAAEpAITyDm4794.png)
PCL中基礎(chǔ)下采樣介紹
![<b class='flag-5'>PCL</b>中基礎(chǔ)下<b class='flag-5'>采樣</b><b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/B1/AA/wKgZomVccQaAICRsAAGn1z4tI8w650.jpg)
PCL中最遠(yuǎn)點(diǎn)采樣是什么
PCL泊松盤(pán)采樣具體流程
![<b class='flag-5'>PCL</b>泊松盤(pán)<b class='flag-5'>采樣</b>具體流程](https://file1.elecfans.com/web2/M00/AF/E7/wKgaomVceFCAZN-jAABTSiRj5QI367.jpg)
評(píng)論