基礎下采樣
1.1 點云隨機下采樣
點云下采樣是對點云以一定的采樣規(guī)則重新進行采樣,目的是在保證點云整體幾何特征不變的情況下,降低點云的密度,進而可以降低相關(guān)處理的數(shù)據(jù)量和算法復雜度。
隨機下采樣顧名思義,隨機下采樣就似乎在原始點云中隨機采樣一定點數(shù)的點。這種方法最終得到的點云數(shù)量也是固定的。
pcl::PointCloud< PointT >::Ptr cloud_sub(new pcl::PointCloud< PointT >); //隨機下采樣點云
pcl::RandomSample< PointT > rs; //創(chuàng)建濾波器對象
rs.setInputCloud(cloud); //設置待濾波點云
rs.setSample(20000); //設置下采樣點云的點數(shù)
//rs.setSeed(1); //設置隨機函數(shù)種子點
rs.filter(*cloud_sub); //執(zhí)行下采樣濾波,保存濾波結(jié)果于cloud_sub
1.2 體素下采樣
體素下采樣的原理如圖1所示,首先將點云空間進行網(wǎng)格化,也稱體素化,即圖1(b),網(wǎng)格化后的每一個格子稱為體素,在這些劃分為一個個極小的格子中包含一些點,然后對這些點取平均或加權(quán)平均得到一個點,以此來替代原來網(wǎng)格中所有的點,即圖1(c)中藍色的點。顯然,網(wǎng)格選取越大則采樣之后的點云越少,處理速度變快,但會對原先點云過度模糊,網(wǎng)格選取越小,則作用相反。
pcl::VoxelGrid< pcl::PointXYZ > sor; //創(chuàng)建體素網(wǎng)格采樣處理對象
sor.setInputCloud(cloud); //設置輸入點云
sor.setLeafSize(0.01f, 0.01f, 0.01f); //設置體素大小,單位:m
sor.filter(*cloud_filtered); //進行下采樣
1.3 均勻采樣
均勻采樣的原理類似于體素化網(wǎng)格采樣方法,同樣是將點云空間進行劃分,不過是以半徑=r的球體,在當前球體所有點中選擇距離球體中心最近的點替代所有點,注意,此時點的位置是不發(fā)生移動的。
球體半徑選取越大則采樣之后的點云越少,處理速度變快,但會對原先點云過度模糊,網(wǎng)格選取越小,則作用相反。
pcl::UniformSampling< pcl::PointXYZ > form; // 創(chuàng)建均勻采樣對象
form.setInputCloud(cloud); //設置輸入點云
form.setRadiusSearch(0.02f); //設置半徑大小,單位:m
form.filter(*after_cloud); //執(zhí)行濾波處理
1.4 增采樣
增采樣的特點是可極大的增加點云數(shù)據(jù),但由于內(nèi)插點的不確定性會導致最后輸出的結(jié)果不一定準確。
//創(chuàng)建增采樣對象
pcl::MovingLeastSquares< pcl::PointXYZ,pcl::PointXYZ > filter;
filter.setInputCloud(cloud); //設置輸入點云
pcl::search::KdTree< pcl::PointXYZ >::Ptr kdtree; //定義搜索方法
filter.setSearchMethod(kdtree); //設置搜索方法
filter.setSearchRadius(0.03); //設置搜索鄰域的半徑為3cm
//Upsampling 采樣的方法還有 DISTINCT_CLOUD, RANDOM_UNIFORM_DENSITY
filter.setUpsamplingMethod(pcl::MovingLeastSquares< pcl::PointXYZ, pcl::PointXYZ >::SAMPLE_LOCAL_PLANE); //對點云進行上采樣
filter.setUpsamplingRadius(0.03); //設置采樣半徑大小,3cm
filter.setUpsamplingStepSize(0.02); //設置采樣步長大小,2cm
filter.process(*after_cloud); //執(zhí)行采樣操作
1.5 滑動最小二乘法采樣
滑動最小二乘法采樣的原理是將點云進行了滑動最小二乘法的映射,使得輸出的點云更加平滑。
pcl::PointCloud< pcl::PointNormal >::Ptr smoothedCloud(new pcl::PointCloud< pcl::PointNormal >); //定義法線
pcl::MovingLeastSquares< pcl::PointXYZ, pcl::PointNormal > filter;
pcl::search::KdTree< pcl::PointXYZ >::Ptr kdtree; //定義搜索方法
filter.setInputCloud(cloud); //設置輸入點云
filter.setUpsamplingMethod(); //增加密度較小區(qū)域的密度對于holes的填補卻無能為力,具體方法要結(jié)合參數(shù)使用
filter.setSearchRadius(10);// 用于擬合的K近鄰半徑。在這個半徑里進行表面映射和曲面擬合。半徑越小擬合后曲面的失真度越小,反之有可能出現(xiàn)過擬合的現(xiàn)象。
filter.setPolynomialFit(true); //對于法線的估計是有多項式還是僅僅依靠切線。true為加多項式;false不加,速度較快
filter.setPolynomialFit(3); // 擬合曲線的階數(shù)
filter.setComputeNormals(true); // 是否存儲點云的法向量,true 為存儲,false 不存儲
filter.setSearchMethod(kdtree); //設置搜索方法
filter.process(*smoothedCloud); //處理點云并輸出
-
濾波器
+關(guān)注
關(guān)注
160文章
7703瀏覽量
177476 -
plc
+關(guān)注
關(guān)注
5006文章
13107瀏覽量
461450 -
采樣
+關(guān)注
關(guān)注
1文章
119瀏覽量
25521
發(fā)布評論請先 登錄
相關(guān)推薦
評論