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

前のチュートリアル: ハイダイナミックレンジイメージング
次のチュートリアル: 背景差分法の使い方

原著者Jiri Horner
互換性OpenCV >= 3.2

目的

このチュートリアルでは、以下の方法を学ぶ:

  • use the high-level stitching API for stitching provided by
  • あらかじめ用意されたStitcherの構成を使い、異なるカメラモデルで画像をスティッチングする方法を学ぶ。

コード

解説

最も重要なコード部分は次のとおり:

新しいstitcherのインスタンスが生成され、cv::Stitcher::stitch がすべての重要な処理を行う。

cv::Stitcher::create はあらかじめ定義された構成のいずれかでstitcherを生成できる(引数 mode)。詳細は cv::Stitcher::Mode を参照。これらの構成は、あらかじめ定義されたシナリオのいずれかで動作するよう、stitcherの複数のプロパティを設定する。あらかじめ定義された構成でstitcherを生成した後は、任意のstitcherプロパティを設定してスティッチングを調整できる。

CUDAデバイスがあれば、cv::Stitcher は特定の処理をGPUにオフロードするよう構成できる。この構成を好む場合は try_use_gpu をtrueに設定する。このフラグに関係なく、グローバルなOpenCV設定に基づいてOpenCLアクセラレーションが透過的に使用される。

スティッチングはいくつかの理由で失敗することがあるため、常にすべてが正常に行われたかを確認し、結果のパノラマが pano に格納されているか確かめるべきである。考えられるエラーコードについては cv::Stitcher::Status のドキュメントを参照。

カメラモデル

現在、スティッチングパイプラインには2つのカメラモデルが実装されている。

ホモグラフィモデルはカメラで撮影した写真パノラマの作成に有用であり、一方でアフィンベースのモデルはスキャンや専用機器で撮影した物体のスティッチングに使用できる。

覚え書き
cv::Stitcher の特定の詳細設定は意味をなさない場合がある。特に、アフィンモデルを実装するクラスとホモグラフィモデルを実装するクラスは異なる変換を扱うため、混在させてはならない。

試してみよう

サンプルのビルドを有効にしていれば、バイナリは build/bin/cpp-example-stitching の下に見つかる。この例はコンソールアプリケーションであり、引数なしで実行するとヘルプが表示される。opencv_extra には、利用可能なすべての構成をテストするためのサンプルデータが含まれている。

パノラマモードを試すには次を実行する:

./cpp-example-stitching --mode panorama <path to opencv_extra>/testdata/stitching/boat*

スキャンモードを試すには次を実行する(家庭用スキャナーのデータセット):

./cpp-example-stitching --mode scans <path to opencv_extra>/testdata/stitching/newspaper*

または(プロ用ブックスキャナーのデータセット):

./cpp-example-stitching --mode scans <path to opencv_extra>/testdata/stitching/budapest*

覚え書き
上記の例はPOSIXプラットフォームを想定している。Windowsでは、コマンドラインが * 展開をサポートしないため、すべてのファイル名を明示的に指定する必要がある(例: boat1.jpg boat2.jpg...)。

スティッチングの詳細 (python opencv >4.0.1)

スティッチングパイプラインの内部を学びたい場合や、詳細な構成を試したい場合は、C++またはPythonで利用できるstitching_detailedのソースコードを使用できる

stitching_detailed

stitching_detailedプログラムはコマンドラインからスティッチングのパラメータを取得する。多数のパラメータが存在する。上記の例はいくつかの利用可能なコマンドラインパラメータを示している:

boat5.jpg boat2.jpg boat3.jpg boat4.jpg boat1.jpg boat6.jpg –work_megapix 0.6 –features orb –matcher homography –estimator homography –match_conf 0.3 –conf_thresh 0.3 –ba ray –ba_refine_mask xxxxx –save_graph test.txt –wave_correct no –warp fisheye –blend multiband –expos_comp no –seam gc_colorgrad

画像のペアはホモグラフィ –matcher homography を使ってマッチングされ、変換推定にもestimator –estimator homography が使われる

特徴マッチングステップの信頼度は0.3: –match_conf 0.3。画像のマッチングに困難がある場合は、この値を小さくできる

2つの画像が同じパノラマに属するかどうかの信頼度のしきい値は0.: –conf_thresh 0.3。画像のマッチングに困難がある場合は、この値を小さくできる

バンドル調整のコスト関数はray –ba ray

バンドル調整の調整マスクはxxxxx ( –ba_refine_mask xxxxx) であり、'x' は該当パラメータを調整すること、'_' は調整しないことを意味する。1つを調整し、次の形式を持つ: fx,skew,ppx,aspect,ppy

マッチンググラフをDOT言語で表現してtest.txtに保存する ( –save_graph test.txt): ラベルの説明: Nm はマッチ数、Ni はインライア数、C は信頼度

ウェーブ効果補正を行わない (–wave_correct no)

ワープ面のタイプはfisheye (–warp fisheye)

ブレンディング手法はmultiband (–blend multiband)

露出補正手法を使用しない (–expos_comp no)

シーム推定の推定器は最小グラフカットベースのシーム (–seam gc_colorgrad)

これらの引数はコマンドラインでも使用できる:

boat5.jpg boat2.jpg boat3.jpg boat4.jpg boat1.jpg boat6.jpg –work_megapix 0.6 –features orb –matcher homography –estimator homography –match_conf 0.3 –conf_thresh 0.3 –ba ray –ba_refine_mask xxxxx –wave_correct horiz –warp compressedPlaneA2B1 –blend multiband –expos_comp channels_blocks –seam gc_colorgrad

次の結果が得られる:

スキャナやドローンで撮影された画像(アフィン運動)の場合は、コマンドラインで次の引数を使用できる:

newspaper1.jpg newspaper2.jpg –work_megapix 0.6 –features surf –matcher affine –estimator affine –match_conf 0.3 –conf_thresh 0.3 –ba affine –ba_refine_mask xxxxx –wave_correct no –warp affine

すべての画像は https://github.com/opencv/opencv_extra/tree/5.x/testdata/stitching で見つけられる