![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
Registration モジュールはパラメトリックな画像レジストレーションを実装する。実装された手法は直接的なアライメントであり、すなわち特徴ベースのレジストレーションとは対照的に、画像ペア間のレジストレーションの計算にピクセル値を直接使用する。実装は本質的に [265] の対応する部分に従う。
特徴ベースの手法は、異なる照明条件や露光時間で撮影された画像を位置合わせしようとする場合、または画像が部分的にしか重ならない場合に、ピクセルベースの手法に対していくつかの利点がある。一方、ピクセルベースの手法が特徴ベースの手法と比較した場合の主な利点は、一部の画像(同様の照明条件で撮影され、有意な重なりを持つもの)に対するより高い精度である。これは画像内で利用可能なすべての情報を使用しているためであり、サブピクセル精度を達成できる。これはマルチフレームのノイズ除去や超解像のような特定のアプリケーションにとって特に重要である。
実際、ピクセルベースと特徴ベースの位置合わせ手法は互いに補完し合える。アプリケーションはまず特徴を用いて粗い位置合わせを行い、その後画像の重なり合う領域に対してピクセルベースの手法で位置合わせを精緻化できる。開発されたコードはこのユースケースに対応している。
このモジュールは、抽象クラス cv::reg::Map または cv::reg::Mapper から派生したクラスを実装している。前者は2つの参照フレーム間の座標変換をモデル化し、後者は2つの画像間の Map を計算する手法を呼び出す方法をカプセル化する。本モジュールの目的はピクセルベースの手法を実装することにあるが、画像間の変換を計算できる他の手法(特徴ベースの手法、オプティカルフローなど)をサポートするように拡張することもできる。
Map から派生した各クラスは、以下のように運動モデルを実装する:
MapProject はアフィン運動や平行移動をモデル化するためにも使用できるが、一部の演算はより高コストであり、それが他の2つのクラスを定義する理由である。
Mapper から派生したクラスは次のとおりである
画像間の運動がさほど小さくない場合、これらのクラスの通常の使い方は、MapperGrad* オブジェクトを作成し、それを入力として MapperPyramid を作成して計算を実行することである。ただし、画像間の運動が十分小さい場合は、MapperGrad* クラスを直接使用できる。もう1つの方法は、まず特徴ベースの手法で粗い位置合わせを行い、その後 MapperPyramid または直接 MapperGrad* オブジェクトによって精緻化することである。マッパーの "calculate" メソッドは、運動の初期推定値を入力として受け取る。
どの MapperGrad を使用するかを決める際には、パラメータが多いマッパーほど複雑な運動を扱えるが、より多くの計算を伴うため遅くなる点を考慮しなければならない。また、シーケンスが従う運動モデルに確信がある場合、必要以上にパラメータの数を増やすと精度が低下する。可能な限り少ない自由度を用いるのが望ましい。
モジュールのテストには、実装された任意のマッパーを使って画像のペアを位置合わせする方法を示す例がある。
クラス | |
| class | cv::reg::Map |
| 2つの画像間の Map をモデル化するための基底クラス。続きを読む... | |
| class | cv::reg::MapAffine |
| class | cv::reg::Mapper |
| マップを計算するためのアルゴリズムをモデル化するための基底クラス。続きを読む... | |
| class | cv::reg::MapperGradAffine |
| class | cv::reg::MapperGradEuclid |
| class | cv::reg::MapperGradProj |
| class | cv::reg::MapperGradShift |
| class | cv::reg::MapperGradSimilar |
| class | cv::reg::MapperPyramid |
| class | cv::reg::MapProjec |
| class | cv::reg::MapShift |
| class | cv::reg::MapTypeCaster |