OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::SACSegmentation クラスabstract

3D点群モデルのサンプルコンセンサスアルゴリズムによるセグメンテーション。 続き...

#include <opencv2/geometry/segment.hpp>

Collaboration diagram for cv::SACSegmentation:

公開型

using ModelConstraintFunction
 モデルの係数を受け取り、そのモデルが受容可能かどうかを返すカスタム関数。
 

公開メンバ関数

 SACSegmentation ()=default
 
virtual ~SACSegmentation ()=default
 
virtual double getConfidence () const =0
 選択のうち少なくとも1つが誤りのないデータ点の集合であることを保証する信頼度を取得する。
 
virtual const ModelConstraintFunctiongetCustomModelConstraints () const =0
 カスタムのモデル係数制約関数を取得する。
 
virtual double getDistanceThreshold () const =0
 モデルへの距離のしきい値を取得する。
 
virtual int getMaxIterations () const =0
 試行する最大反復回数を取得する。
 
virtual int getNumberOfModelsExpected () const =0
 期待されるモデルの数を取得する。
 
virtual void getRadiusLimits (double &radius_min, double &radius_max) const =0
 モデルの最小・最大半径の制限値を取得する。
 
virtual uint64 getRandomGeneratorState () const =0
 RNG(乱数生成器) の初期化に使用する状態を取得する。
 
virtual SacMethod getSacMethodType () const =0
 使用するサンプルコンセンサス手法の種類を取得する。
 
virtual SacModelType getSacModelType () const =0
 使用するサンプルコンセンサスモデルの種類を取得する。
 
virtual bool isParallel () const =0
 並列処理を使用するかどうかを取得する。
 
virtual int segment (InputArray input_pts, OutputArray labels, OutputArray models_coefficients)=0
 サンプルコンセンサス手法を用いてセグメンテーションを実行する。
 
virtual void setConfidence (double confidence)=0
 選択のうち少なくとも1つが誤りのないデータ点の集合であることを保証する信頼度を設定する。
 
virtual void setCustomModelConstraints (const ModelConstraintFunction &custom_model_constraints)=0
 
virtual void setDistanceThreshold (double threshold)=0
 
virtual void setMaxIterations (int max_iterations)=0
 試行する最大反復回数を設定する。
 
virtual void setNumberOfModelsExpected (int number_of_models_expected)=0
 期待されるモデルの数を設定する。
 
virtual void setParallel (bool is_parallel)=0
 
virtual void setRadiusLimits (double radius_min, double radius_max)=0
 
virtual void setRandomGeneratorState (uint64 rng_state)=0
 RNG(乱数生成器) の初期化に使用する状態を設定する。
 
virtual void setSacMethodType (SacMethod sac_method)=0
 使用するサンプルコンセンサス手法の種類を設定する。
 
virtual void setSacModelType (SacModelType sac_model_type)=0
 使用するサンプルコンセンサスモデルの種類を設定する。
 

静的公開メンバ関数

static Ptr< SACSegmentationcreate (SacModelType sac_model_type=SAC_MODEL_PLANE, SacMethod sac_method=SAC_METHOD_RANSAC, double threshold=0.5, int max_iterations=1000)
 

詳細説明

3D点群モデルのサンプルコンセンサスアルゴリズムによるセグメンテーション。

RANSACアルゴリズムを用いて3D点群から平面をセグメンテーションする例:

int planeSegmentationUsingRANSAC(const cv::Mat &pt_cloud,
std::vector<cv::Vec4d> &planes_coeffs, std::vector<char> &labels)
{
using namespace cv;
Ptr<SACSegmentation> sacSegmentation =
SACSegmentation::create(SAC_MODEL_PLANE, SAC_METHOD_RANSAC);
sacSegmentation->setDistanceThreshold(0.21);
// The maximum number of iterations to attempt.(default 1000)
sacSegmentation->setMaxIterations(1500);
sacSegmentation->setNumberOfModelsExpected(2);
Mat planes_coeffs_mat;
// Number of final resultant models obtained by segmentation.
int model_cnt = sacSegmentation->segment(pt_cloud,
labels, planes_coeffs_mat);
planes_coeffs.clear();
for (int i = 0; i < model_cnt; ++i)
{
planes_coeffs.push_back(planes_coeffs_mat.row(i));
}
return model_cnt;
}
参照
  1. サポートされているアルゴリズム: ptcloud.hpp 内の enum SacMethod
  2. サポートされているモデル: ptcloud.hpp 内の enum SacModelType

型定義メンバ詳解

◆ ModelConstraintFunction

初期値:
std::function<bool(const std::vector<double> &)>

モデルの係数を受け取り、そのモデルが受容可能かどうかを返すカスタム関数。

SACSegmentation::ModelConstraintFunction を構築する例:

bool customFunc(const std::vector<double> &model_coefficients)
{
// check model_coefficients
// The plane needs to pass through the origin, i.e. ax+by+cz+d=0 --> d==0
return model_coefficients[3] == 0;
} // end of function customFunc()
void usageExampleSacModelConstraintFunction()
{
using namespace cv;
SACSegmentation::ModelConstraintFunction func_example1 = customFunc;
[](const std::vector<double> &model_coefficients) {
// check model_coefficients
// The plane needs to pass through the origin, i.e. ax+by+cz+d=0 --> d==0
return model_coefficients[3] == 0;
};
// Using local variables
float x0 = 0.0, y0 = 0.0, z0 = 0.0;
[x0, y0, z0](const std::vector<double> &model_coeffs) -> bool {
// check model_coefficients
// The plane needs to pass through the point (x0, y0, z0), i.e. ax0+by0+cz0+d == 0
return model_coeffs[0] * x0 + model_coeffs[1] * y0 + model_coeffs[2] * z0
+ model_coeffs[3] == 0;
};
// Next, use the constructed SACSegmentation::ModelConstraintFunction func_example1, 2, 3 ......
}
覚え書き
model_coefficients の内容はモデルに依存する。列挙型 SacModelType 内のコメントを参照すること。

構築子と解体子の詳解

◆ SACSegmentation()

cv::SACSegmentation::SACSegmentation ( )
default

◆ ~SACSegmentation()

virtual cv::SACSegmentation::~SACSegmentation ( )
virtualdefault

メンバ関数詳解

◆ create()

static Ptr< SACSegmentation > cv::SACSegmentation::create ( SacModelType sac_model_type = SAC_MODEL_PLANE,
SacMethod sac_method = SAC_METHOD_RANSAC,
double threshold = 0.5,
int max_iterations = 1000 )
static

◆ getConfidence()

virtual double cv::SACSegmentation::getConfidence ( ) const
pure virtual

選択のうち少なくとも1つが誤りのないデータ点の集合であることを保証する信頼度を取得する。

◆ getCustomModelConstraints()

virtual const ModelConstraintFunction & cv::SACSegmentation::getCustomModelConstraints ( ) const
pure virtual

カスタムのモデル係数制約関数を取得する。

◆ getDistanceThreshold()

virtual double cv::SACSegmentation::getDistanceThreshold ( ) const
pure virtual

モデルへの距離のしきい値を取得する。

◆ getMaxIterations()

virtual int cv::SACSegmentation::getMaxIterations ( ) const
pure virtual

試行する最大反復回数を取得する。

◆ getNumberOfModelsExpected()

virtual int cv::SACSegmentation::getNumberOfModelsExpected ( ) const
pure virtual

期待されるモデルの数を取得する。

◆ getRadiusLimits()

virtual void cv::SACSegmentation::getRadiusLimits ( double & radius_min,
double & radius_max ) const
pure virtual

モデルの最小・最大半径の制限値を取得する。

◆ getRandomGeneratorState()

virtual uint64 cv::SACSegmentation::getRandomGeneratorState ( ) const
pure virtual

RNG(乱数生成器) の初期化に使用する状態を取得する。

◆ getSacMethodType()

virtual SacMethod cv::SACSegmentation::getSacMethodType ( ) const
pure virtual

使用するサンプルコンセンサス手法の種類を取得する。

◆ getSacModelType()

virtual SacModelType cv::SACSegmentation::getSacModelType ( ) const
pure virtual

使用するサンプルコンセンサスモデルの種類を取得する。

◆ isParallel()

virtual bool cv::SACSegmentation::isParallel ( ) const
pure virtual

並列処理を使用するかどうかを取得する。

◆ segment()

virtual int cv::SACSegmentation::segment ( InputArray input_pts,
OutputArray labels,
OutputArray models_coefficients )
pure virtual

サンプルコンセンサス手法を用いてセグメンテーションを実行する。

引数
input_pts元の点群。Point3 のベクトルまたはサイズ Nx3/3xN の Mat
[out]labelsラベルはモデル番号に対応する。0 はどのモデルにも属さないことを意味し、範囲は [0, 最終的に得られたモデルの数] である。
[out]models_coefficients得られたモデルの係数。現在は cv::Mat の受け渡しをサポートしている。モデルの係数はビット深度 CV_64F の NxK 行列に格納される(渡されたものがこの形式に見えない場合は自動的に調整される)。ここで N はモデルの数、K は1つのモデルの係数の数である。各モデルの係数については、列挙型 SacModelType 内のコメントを参照すること。
戻り値
セグメンテーションによって最終的に得られたモデルの数。

◆ setConfidence()

virtual void cv::SACSegmentation::setConfidence ( double confidence)
pure virtual

選択のうち少なくとも1つが誤りのないデータ点の集合であることを保証する信頼度を設定する。

◆ setCustomModelConstraints()

virtual void cv::SACSegmentation::setCustomModelConstraints ( const ModelConstraintFunction & custom_model_constraints)
pure virtual

カスタムのモデル係数制約関数を設定する。モデルの係数を受け取り、そのモデルが受容可能かどうかを返すカスタム関数。

◆ setDistanceThreshold()

virtual void cv::SACSegmentation::setDistanceThreshold ( double threshold)
pure virtual

モデルへの距離のしきい値を設定する。モデルへの距離がしきい値未満であれば、インライア点とみなされる。

◆ setMaxIterations()

virtual void cv::SACSegmentation::setMaxIterations ( int max_iterations)
pure virtual

試行する最大反復回数を設定する。

◆ setNumberOfModelsExpected()

virtual void cv::SACSegmentation::setNumberOfModelsExpected ( int number_of_models_expected)
pure virtual

期待されるモデルの数を設定する。

◆ setParallel()

virtual void cv::SACSegmentation::setParallel ( bool is_parallel)
pure virtual

並列処理を使用するかどうかを設定する。スレッド数は cv::setNumThreads(int nthreads) によって設定される。

◆ setRadiusLimits()

virtual void cv::SACSegmentation::setRadiusLimits ( double radius_min,
double radius_max )
pure virtual

モデルの最小・最大半径の制限値を設定する。モデルのパラメータに半径を含むモデルにのみ使用される。

◆ setRandomGeneratorState()

virtual void cv::SACSegmentation::setRandomGeneratorState ( uint64 rng_state)
pure virtual

RNG(乱数生成器) の初期化に使用する状態を設定する。

◆ setSacMethodType()

virtual void cv::SACSegmentation::setSacMethodType ( SacMethod sac_method)
pure virtual

使用するサンプルコンセンサス手法の種類を設定する。

◆ setSacModelType()

virtual void cv::SACSegmentation::setSacModelType ( SacModelType sac_model_type)
pure virtual

使用するサンプルコンセンサスモデルの種類を設定する。


このクラス詳解は次のファイルから抽出されました: