13

TL;DR : 任意の 2D ポイント セットで自由に使用できる RANSAC またはその他の堅牢な対応アルゴリズムの C++ 実装はありますか?

RANSAC (Random Sampling Consensus) などの対応アルゴリズムを含む、または使用する多くの実装が存在することを私は知っています。これらは、コンピュータ ビジョン アプリケーションでよく使用され、OpenCVPCLなどのライブラリで使用されます。一般的なアルゴリズムはよく知られており、さまざまなサイトでさまざまな手順がリストされています。

現在、私が見つけたすべての「高度な」実装(OpenCV、PCLなどで行われたもの)は、基礎となる一連の仮定を伴う特定の種類の問題用です。OpenCV では、最初の画像と 2 番目の画像の一部の間のホモグラフィ行列を見つけたいとします (この例)。PCL では、3D 点群の領域にあり、(私の知る限り) 特定の既に定義された形状 (線、球など) にのみ一致させることができます。

私が「単純に」したいのは、任意の 2D ポイント セット (ノイズが含まれている可能性があります) を取得し、より大きな 2D ポイント セット (ノイズや他のポイントも含む) で対応を見つけることです。2 組のポイントを入力する以外に、特定のモデル トレーニングを必要としない必要があります。私はC ++で自分で実装していますが、次のとおりです。

  • 私は決して経験豊富なプログラマーではなく、すべてを非常に高速に実行する必要があります。よく知られているアルゴリズム (エッジ検出、ガウスぼかしなど) を自分で行った以前の実装は、実証済みの実装よりも大幅に遅い (> 10x) ことが証明されています。

  • 既存のオープン ソース実装 (OpenCV など) を単純に盗用することは、私の現在の能力を超えていることが証明されています (依存関係や仮想実装テンプレートが多すぎるなど...)。

したがって、自由に使用できる (BSD のような) 実績のある C++ 実装を誰かが知っていれば、私は見逃しています...

4

3 に答える 3

20

RANSAC の一般的で軽量な汎用 C++ 実装を見つけるのは驚くほど困難です。MIT ライセンスの下で汎用 RANSAC 実装をリリースしました。

https://github.com/drsrinathsridhar/GRANSAC

GRANSAC は、汎用で、テンプレート化され、ヘッダーのみで、マルチスレッド化されています。ユーザーは、AbstractModel を継承するクラスを実装する必要があります。RANSAC 推定は、あらゆる種類のモデル (例: 2D ライン、3D プレーン) に対して実行できます。

これは 2D ライン フィッティングに対してのみテストしましたが、他の問題でも機能するはずです。さらに機能を追加していただければ幸いです (反復回数の自動選択など)。

ここに画像の説明を入力

于 2015-09-05T14:06:43.527 に答える