> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/transformations/stitch-images.md).

# 画像を結合

SIFT（Scale Invariant Feature Transform）による特徴マッチングとホモグラフィベースの画像整列を使用して、重なり合う2枚の画像を1枚のパノラマ画像にまとめます。共通特徴を自動検出し、幾何学変換を計算し、画像をブレンドして、重複するシーンからシームレスなパノラマ合成を作成します。

## このブロックの仕組み

このブロックは、共通特徴を検出し、幾何学変換を計算し、画像を1つのパノラマ結果に整列させることで、重なり合う2枚の画像をつなぎ合わせます。このブロックは次を行います：

1. 特徴マッチングに十分な詳細を含む重複領域を持つ2つの入力画像（image1 と image2）を受け取ります
2. SIFT（Scale Invariant Feature Transform）を使用して、両方の画像のキーポイントを検出し、記述子を計算します：
   * 各画像内で、スケールと回転に不変な特徴点（キーポイント）を識別します
   * 各キーポイント周辺の視覚的特徴を表す特徴記述子（128次元ベクトル）を計算します
3. 総当たりマッチングを使用して、2つの画像間のキーポイントを照合します：
   * image2 の全キーポイントの中から、image1 の各キーポイントに最もよく一致する記述子を見つけます
   * k最近傍マッチング（count\_of\_best\_matches\_per\_query\_descriptor で設定可能）を使用して、各クエリキーポイントごとに複数の候補一致を見つけます
4. Loweの比率テストを使用して良いマッチを絞り込みます：
   * 最良マッチまでの距離と第2候補マッチまでの距離を比較します
   * 最良マッチの距離が第2候補マッチの距離の0.75倍未満であるマッチを保持します（誤マッチを減らします）
5. キーポイントの位置に基づいて画像の順序を決定します（マッチした特徴の空間分布に基づき、どちらの画像を先に配置すべきかを識別します）
6. RANSAC（Random Sample Consensus）を使用してホモグラフィ変換行列を計算します：
   * 一方の画像からもう一方の画像へ点を対応付ける射影変換行列を見つけます
   * 外れ値のマッチを除外しながら、RANSACを使って変換を堅牢に推定します
   * 設定可能な最大再投影誤差（max\_allowed\_reprojection\_error）で、どの点のペアをインライアと見なすかを制御します
7. キャンバスサイズと平行移動を計算します：
   * 変換後に両方の画像を収めるために必要なサイズを決定します
   * 両方の画像がキャンバス境界内に収まるようにするために必要な平行移動を計算します
8. ホモグラフィ変換を使用して2枚目の画像をワープします：
   * 射影変換を適用して、2枚目の画像を1枚目の画像に整列させます
   * 正しい位置に配置するために、ホモグラフィ行列と平行移動行列を組み合わせます
9. 画像をつなぎ合わせます：
   * 1枚目の画像をワープ後の2枚目画像のキャンバス上に配置します
   * 2つの入力画像が整列・ブレンドされた、最終的なつなぎ合わせ済みパノラマ画像を作成します
10. つなぎ合わせた画像を返します。失敗した場合は None を返します（例：マッチ数不足、変換計算の失敗）

このブロックは、十分な詳細とテクスチャを持つ画像で特にうまく機能する堅牢な特徴検出にSIFTを使用します。RANSACベースのホモグラフィ計算は、射影歪みを処理し、いくつかの誤ったマッチがあっても堅牢な整列を保証します。再投影誤差のしきい値は整列の感度を制御します。値を低くすると、より正確なマッチが必要になりますが、値を高くすると（詳細の少ない画像に有用）、マッチのばらつきに対する許容範囲が広がります。

## 一般的な使用例

* **パノラマ画像の作成**: 重なり合う画像をつなぎ合わせて広いパノラマビューを作成します（例：重なりのあるカメラショットからパノラマ写真を作成する、回転カメラの画像をつなぐ、複数の重複画像をパノラマに統合する）。パノラマ画像生成ワークフローを可能にします
* **広域シーン再構成**: シーンの複数の重複する視点を1つの包括的な画像にまとめます（例：複数のカメラ角度から広いシーンを再構成する、重複する監視カメラ映像を統合する、複数視点の画像をつなぎ合わせる）。広域シーンの可視化を可能にします
* **複数画像モザイク化**: 重なり合う画像タイルやセクションから画像モザイクを作成します（例：大規模マッピング用に画像タイルをつなぐ、重なり合う衛星画像セクションを統合する、重複取得画像からモザイクを作成する）。画像モザイク作成ワークフローを可能にします
* **シーンの記録**: 複数の重なり合う画像を統合して、大きなシーンや領域を記録します（例：複数の重なり合う写真で大空間を記録する、シーン記録のために重複する視点を統合する、包括的なシーン取得のために画像をつなぎ合わせる）。包括的なシーン記録を可能にします
* **動画フレームのスティッチング**: 動画シーケンス内の重なり合うフレームをつなぎ合わせます（例：動画フレームからパノラマビューを作成する、移動中のカメラの重複フレームを統合する、連続する動画フレームをつなぐ）。動画ベースのパノラマワークフローを可能にします
* **複数カメラ視点の統合**: 複数のカメラからの重なり合う視点を1つの統合ビューにまとめます（例：重複するカメラ映像をつなぐ、監視用に複数カメラの視点を統合する、重なり合うカメラ視点をマージする）。複数カメラ視点統合ワークフローを可能にします

## 他のブロックへの接続

このブロックは2枚の画像を受け取り、1枚のつなぎ合わせ画像を生成します：

* **画像入力ブロックの後に** または **画像前処理ブロック** 前処理済み画像をつなぎ合わせます（例：前処理後に画像をつなぐ、強調後に画像を統合する、フィルタ後に画像をマージする）。画像スティッチングワークフローを可能にします
* **切り抜きブロックの後に** 異なるソースからの切り抜かれた画像領域をつなぎ合わせます（例：異なる画像から切り抜いた領域をつなぐ、複数ソースの切り抜き部分を統合する、切り抜き領域をパノラマにマージする）。切り抜き領域スティッチングワークフローを可能にします
* **変換ブロックの後に** 変換または調整された画像をつなぎ合わせます（例：透視補正後の画像をつなぐ、幾何学変換後に画像を統合する、調整後の画像をマージする）。変換済み画像スティッチングワークフローを可能にします
* **検出または解析ブロックの前に** パノラマビューの恩恵を受けるもの（例：つなぎ合わせたパノラマ画像で物体を検出する、広域のつなぎ合わせシーンを解析する、包括的なつなぎ合わせビューを処理する）。パノラマ解析ワークフローを可能にします
* **可視化ブロックの前** つなぎ合わせたパノラマ画像を表示するために（例：つなぎ合わせたパノラマを可視化する、広域のつなぎ合わせビューを表示する、包括的なつなぎ合わせシーンを示す）。パノラマ可視化出力を可能にします
* **複数段階の画像処理ワークフローで** その後の処理の前に画像をつなぎ合わせる必要がある場合（例：検出前に画像をつなぐ、解析前に画像を統合する、包括的な処理のために画像をマージする）。複数段階のパノラマ処理ワークフローを可能にします

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/stitch_images@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**                                       | **型**   | **説明**                                                                                                                                                                                                                                                                                                                                 | 参照 |
| -------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`                                       | `str`   | このステップの一意の識別子を入力してください。                                                                                                                                                                                                                                                                                                                | ❌  |
| `max_allowed_reprojection_error`             | `float` | RANSACホモグラフィ計算中に点のペアをインライアとして扱うための、許容最大再投影誤差（ピクセル単位）。これは cv.findHomography の ransacReprojThreshold パラメータに対応します。値を低くすると、より正確なマッチが必要になります（より厳密な整列）が、ノイズの多いマッチでは失敗する可能性があります。値を高くすると、マッチのばらつきに対する許容範囲が広がり（より緩やかな整列）、詳細の少ない画像や特徴マッチが不完全な画像で結果を改善できる場合があります。デフォルトは3ピクセルです。詳細の少ない画像や、デフォルト設定でつなぎ合わせに失敗する場合は、この値を増やしてください（例：5〜10）。            | ✅  |
| `count_of_best_matches_per_query_descriptor` | `整数`    | キーポイント照合中に、各クエリ記述子ごとに見つける最良マッチの数。これは cv.BFMatcher.knnMatch の k パラメータに対応します。0より大きい必要があります。このブロックは、image2 の全記述子の中から、image1 の各キーポイント記述子に対する k 個の最近傍マッチを見つけます。その後、Loweの比率テストを使用して良いマッチを絞り込みます（最良マッチの距離と第2候補マッチの距離を比較）。値を大きくすると候補マッチは増えますが、計算量も増加します。デフォルトは2（各記述子につき2つの最良マッチを見つける）です。一般的な値は2〜5の範囲です。難しい画像でより多くのマッチ候補が必要な場合は、より大きい値を使ってください。 | ✅  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `画像の結合` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `image1` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)): つなぎ合わせる最初の入力画像。image2 と重複する領域があり、SIFT特徴検出に十分な詳細/テクスチャを含む必要があります。画像同士が重なっていることが、つなぎ合わせを成功させるために必要です。このブロックは、つなぎ合わせ時に image2 に対するこの画像の最適な位置と整列を決定します。豊かなテクスチャと詳細を持つ画像が、SIFTベースの特徴マッチングに最適です。
  * `image2` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)): つなぎ合わせる2番目の入力画像。image1 と重複する領域があり、SIFT特徴検出に十分な詳細/テクスチャを含む必要があります。画像同士が重なっていることが、つなぎ合わせを成功させるために必要です。このブロックは、つなぎ合わせ時にこの画像を image1 の視点に合わせてワープし、整列させます。豊かなテクスチャと詳細を持つ画像が、SIFTベースの特徴マッチングに最適です。
  * `max_allowed_reprojection_error` ([*`float_zero_to_one`*](/workflows/ja/gaido/developer-guide/kinds/float-zero-to-one.md)): RANSACホモグラフィ計算中に点のペアをインライアとして扱うための、許容最大再投影誤差（ピクセル単位）。これは cv.findHomography の ransacReprojThreshold パラメータに対応します。値を低くすると、より正確なマッチが必要になります（より厳密な整列）が、ノイズの多いマッチでは失敗する可能性があります。値を高くすると、マッチのばらつきに対する許容範囲が広がり（より緩やかな整列）、詳細の少ない画像や特徴マッチが不完全な画像で結果を改善できる場合があります。デフォルトは3ピクセルです。詳細の少ない画像や、デフォルト設定でつなぎ合わせに失敗する場合は、この値を増やしてください（例：5〜10）。
  * `count_of_best_matches_per_query_descriptor` ([*`整数`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)): キーポイント照合中に、各クエリ記述子ごとに見つける最良マッチの数。これは cv.BFMatcher.knnMatch の k パラメータに対応します。0より大きい必要があります。このブロックは、image2 の全記述子の中から、image1 の各キーポイント記述子に対する k 個の最近傍マッチを見つけます。その後、Loweの比率テストを使用して良いマッチを絞り込みます（最良マッチの距離と第2候補マッチの距離を比較）。値を大きくすると候補マッチは増えますが、計算量も増加します。デフォルトは2（各記述子につき2つの最良マッチを見つける）です。一般的な値は2〜5の範囲です。難しい画像でより多くのマッチ候補が必要な場合は、より大きい値を使ってください。
* 出力
  * `stitched_image` ([`image`](/workflows/ja/gaido/developer-guide/kinds/image.md)): ワークフロー内の画像。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/stitch_images@v1",
	    "image1": "$inputs.image1",
	    "image2": "$inputs.image2",
	    "max_allowed_reprojection_error": 3,
	    "count_of_best_matches_per_query_descriptor": 2
	}
```

</details>
