次のモデルがサポートされています。
- SACMODEL_PLANE -プレーンモデルを決定するために使用します。 4 面の係数がある ヘッセ標準形:[ normal_x normal_y normal_z D ]
- SACMODEL_LINE -ラインのモデルを決定するために使用します。 6つの [:線の係数は、ライン上の点や線などの方向によって与えられるpoint_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z ]
- SACMODEL_CIRCLE2D -平面における2D円を決定するために使用されます。円の 3つの [:係数は、その中心と半径とによって与えられるcenter.x center.y半径 ]
- SACMODEL_CIRCLE3D -平面内の3D円を決定するために使用されます。円の 7 〔:係数は以下のように、その中心、半径、正常で与えられるcenter.x、center.y、center.z、半径、normal.x、normal.y、normal.z ]
- SACMODEL_SPHERE -球モデルを決定するために使用します。 4つの [:球の係数は、その立体中心及び半径によって与えられるcenter.x center.y center.z半径 ]
- SACMODEL_CYLINDER -気筒モデルを決定するために使用します。 7 [シリンダーの係数は、以下のように、その軸上の点、軸方向及び半径によって与えられるpoint_on_axis.x point_on_axis.y point_on_axis.z axis_direction.x axis_direction.y axis_direction.z半径 ]
- SACMODEL_CONE -コーンモデルを決定するために使用します。 7 [:コーンの係数は、以下のように、その頂部の点、軸方向開口角によって与えられる、apex.x、apex.y、apex.z、axis_direction.x、axis_direction.y、axis_direction.z opening_angle ]
- SACMODEL_TORUS - まだ実装されていません
- SACMODEL_PARALLEL_LINE -ラインを決定するためのモデル 平行 角度偏差を指定された最大の範囲内、所定の軸とを。線係数は次のようにしている SACMODEL_LINE 。
- SACMODEL_PERPENDICULAR_PLANE -平面を決定するためのモデル 垂直の 角度偏差を指定された最大値内でユーザが指定した軸に対して、。平面係数に類似している SACMODEL_PLANE 。
- SACMODEL_PARALLEL_LINES - まだ実装されていません
- SACMODEL_NORMAL_PLANE -追加の制約を使用して、平面モデルを決定するためのモデル:各インライア点における面法線が出力面の表面法線に平行である必要があり、最大内角度偏差を指定。平面係数に類似している SACMODEL_PLANE 。
- SACMODEL_PARALLEL_PLANE -平面を決定するためのモデル 平行 角度偏差を指定された最大内、ユーザが指定した軸を。 SACMODEL_PLANE 。
- SACMODEL_NORMAL_PARALLEL_PLANEは、 追加の表面法線制約を用いた3次元平面セグメンテーションのためのモデルを定義します。平面は存在しなければならない 平行 ユーザ指定の軸に。SACMODEL_NORMAL_PARALLEL_PLANEしたがって、SACMODEL_NORMAL_PLANE + SACMODEL_PARALLEL_PLANEに相当します。平面係数に類似している SACMODEL_PLANE 。
以下のリストは、堅牢なサンプルコンセンサス推定量は、実装について説明します。
- SAC_RANSAC -ランダム・サンプル・コンセンサス
- SAC_LMEDS -正方形の最小中央値
- SAC_MSAC - M-見積もりのサンプルコンセンサス
- SAC_RRANSAC -ランダムRANSAC
- SAC_RMSAC -ランダムMSAC
- SAC_MLESAC -最尤推定サンプルコンセンサス
- SAC_PROSAC -プログレッシブ・サンプル・コンセンサス
書式#include <iostreamの> の#include <スレッド> 書式#include <PCL /コンソール/ parse.h> の#include <PCL /フィルター/ extract_indices.h> の#include <PCL / IO / pcd_io.h> の#include <PCL / point_types.h> の#include <PCL / sample_consensus / RANSAC .H> の#include <PCL / sample_consensus / sac_model_plane.h> の#include <PCL / sample_consensus / sac_model_sphere.h> の#include <PCL /可視/ pcl_visualizer.h> 使用して 名前空間はstd ::をchrono_literalsを。 int型 のmain(int型のargc、char型 ** ARGV) { // 初期化PointClouds PCL :: PointCloud <PCL :: PointXYZ> :: Ptrがクラウド(新しい PCL :: PointCloud <PCL :: PointXYZ> ); PCL :: PointCloud <PCL :: PointXYZ> :: Ptrが、最終的な(新しい PCL :: PointCloud <PCL :: PointXYZ> ); PCL :: IO :: loadPCDFile(" D:\\ PCD \\ sphere.pcd "、* 雲)。 PCL :: SampleConsensusModelSphere <PCL :: PointXYZ> :: Ptrがmodel_s(新しい PCL :: SampleConsensusModelSphere <PCL :: PointXYZ> (クラウド)); PCL :: RandomSampleConsensus <PCL :: PointXYZ> RANSAC(model_s)。 ransac.setDistanceThreshold(2 )。 ransac.computeModel(); std ::ベクトル < 整数 > インライア。 ransac.getInliers(インライヤ)。 固有:: VectorXf COFF。 ransac.getModelCoefficients(COFF)。 // coutの<< COFF <<てendl; // 別のPointCloudのに計算されたモデルのコピーをすべてインライア PCL :: copyPointCloud(*雲、インライア、* 最終)。 //は、ビジュアライゼーションオブジェクトを作成し、当社独自のクラウドやインライアのすべてのいずれかを追加します 。// 指定されたコマンドライン引数に応じて。 PCL ::可視化:: PCLVisualizer :: Ptrがビューア(新しい PCL ::可視化:: PCLVisualizer(" 3Dビューア" )); ビューア - > setBackgroundColor(0、0、0 ); ビューア - > addPointCloud <PCL :: PointXYZ>(最終、" サンプルクラウド" ); PCL :: PointXYZセンター(COFF(0)、COFF(1)、COFF(2 ))。 ダブル R = COFF(3 )。 裁判所未満 << " センター" << center.x << " " << center.y << " " << center.z << てendl; 裁判所未満 << " R " << R << てendl; // viewer-> addSphere(中央、COFF(2)、 "mySphere")。 viewer-> setPointCloudRenderingProperties(PCL ::可視化:: PCL_VISUALIZER_POINT_SIZE、2、" サンプルクラウド" ); ビューア - > addCoordinateSystem(1.0、" グローバル" ); ビューア - > initCameraParameters(); しばらく(!viewer-> wasStopped()) { ビューア - > spinOnce(100 ); std :: this_thread :: sleep_for(100ミリ秒)。 } リターン 0 ; }