PCL之平面分割模型

2021-10-12 03:56:18 字數 2033 閱讀 4340

**展示: 

#include #include #include #include #include #include #include #include using namespace std;

using pointt = pcl::pointxyz;

int main()

//建立分割時所需要的模型係數物件,coefficients及儲存內點的點索引集合物件inliers

pcl::modelcoefficients::ptr coefficients(new pcl::modelcoefficients);

pcl::pointindices::ptr inliers(new pcl::pointindices);

// 建立分割物件

pcl::sacsegmentationseg;

// 可選擇配置,設定模型係數需要優化

seg.setoptimizecoefficients(true);

// 必要的配置,設定分割的模型型別,所用的隨機引數估計方法,距離閥值,輸入點雲

seg.setmodeltype(pcl::sacmodel_plane); //設定模型型別

seg.setmethodtype(pcl::sac_ransac); //設定隨機取樣一致性方法型別

seg.setdistancethreshold(0.01); //設定距離閥值,距離閥值決定了點被認為是局內點是必須滿足的條件,表示點到估計模型的距離最大值,

seg.setinputcloud(cloud);

//引發分割實現,儲存分割結果到點幾何inliers及儲存平面模型的係數coefficients

seg.segment(*inliers, *coefficients);

if (inliers->indices.size() == 0)

// 提取平面點雲

pcl::extractindice***tract;

extract.setinputcloud (cloud);

extract.setindices(inliers);

extract.setnegative (false);

pcl::pointcloud::ptr cloud_plane (new pcl::pointcloud);

extract.filter (*cloud_plane);

if (cloud_plane->points.empty ())

std::cerr << "提取平面點雲失敗." << std::endl;

// 視覺化分割結果

pcl::visualization::pclvisualizer::ptr viewer(new pcl::visualization::pclvisualizer("viewer"));

int v1(0);

viewer->createviewport(0.0, 0.0, 0.5, 1.0, v1);

viewer->setbackgroundcolor(0, 0, 0, v1);

viewer->addtext("raw", 10, 10, "v1_text", v1);

int v2(1);

viewer->createviewport(0.5, 0.0, 1, 1.0, v2);

viewer->setbackgroundcolor(0.1, 0.1, 0.1, v2);

viewer->addtext("seg", 10, 10, "v2_text", v2);

viewer->addpointcloud(cloud, "cloud_sample", v1);

viewer->addpointcloud(cloud_plane, "cloud_seg", v2);

while (!viewer->wasstopped())

return 0;

}

效果展示:

PCL點雲庫 平面模型分割

平面模型分割是採用隨機取樣一致性對點雲擬合出乙個平面,將點到該平面的距離小於 距離閾值 的點都作為內點,大於 距離閾值 的點都作為外點。可以通過設定引數選擇保留內點還是外點。平面模型分割 include include include include intmain int argc,char ar...

PCL擬合平面和球面模型

pcl sampleconsensusmodelsphere ptr model s new pcl sampleconsensusmodelsphere cloud pcl sampleconsensusmodelplane ptr model p new pcl sampleconsensusm...

PCL之區域生長分割

首先依據點的曲率值對點進行排序,之所以排序,是因為區域生長演算法是從曲率最小的點開始生長的,這個點就是初始種子點,初始種子點所在的區域即為最平滑的區域,從最平滑的區域開始生長可減少分割片段的總數,提高效率。演算法流程總結 種子周圍的臨近點和種子點雲相比較 法線的方向是否足夠相近 曲率是否足夠小 如果...