> 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/advanced-blocks/perspective-correction.md).

# 遠近補正

透視変換を使用して、検出座標と必要に応じて画像を、斜め視点から真上の正射影ビューへ変換し、カメラ角度による歪みを補正することで、物体が角度を付けて見えるシナリオ（例: 監視カメラ、空撮画像、または傾いたカメラ設定）での正確な計測、真上視点での分析、座標の正規化を可能にします。

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

このブロックは、透視視点（遠いほど物体が小さく見え、角度が歪む）から真上の正射影ビュー（カメラがシーンの真上にあるかのような視点）へ座標を変換することで、遠近歪みを補正します。このブロックは次を行います:

1. 入力データを受け取ります: 画像および/または検出結果（物体検出またはインスタンスセグメンテーションの予測）と、変換する領域を定義する透視ポリゴン
2. 透視ポリゴンを処理します:
   * 提供されたポリゴンの中から最大のポリゴンを選択します（複数ある場合）
   * ポリゴン頂点を時計回りに並べ替え、左下の頂点から始まるように配置します
   * 変換行列計算のために正しいポリゴン順序を確保します
3. 必要に応じて、すべての検出を含むように透視ポリゴンを拡張します:
   * If `extend_perspective_polygon_by_detections_anchor` が設定されている場合、すべての検出アンカーポイント（または "ALL" が指定されている場合はバウンディングボックス全体）がポリゴン内に収まるようにポリゴンを拡張します
   * 元のポリゴンの外側にある検出を含めるために必要な拡張量を計算します
   * ポリゴン頂点を調整して、すべての検出を包含するより大きな領域を作成します
4. 透視変換行列を生成します:
   * ソースポリゴン（透視視点の4頂点）を、指定された幅と高さを持つ宛先の長方形（真上視点）にマッピングします
   * OpenCV の `getPerspectiveTransform` を使用して 3x3 変換行列を計算します
   * ポリゴン拡張が有効な場合は、拡張後の寸法を扱います
5. （提供されている場合）検出結果に透視変換を適用します:
   * バウンディングボックス座標を透視視点から真上視点の座標へ変換します
   * インスタンスセグメンテーションのマスクを、マスクをポリゴンに変換し、ポリゴン頂点を変換して、新しい座標空間でマスクに戻すことで変換します
   * キーポイント検出予測のキーポイント座標を変換します
   * すべての座標データを更新して、補正された遠近感を反映します
6. 必要に応じて画像をワープします（ `warp_image` が True の場合）:
   * OpenCV の `warpPerspective`
   * を使用して、画像全体に透視変換を適用します
   * 指定された変換後の長方形サイズ（および追加の拡張分）でワープ画像を出力します
7. 補正済みの出力を返します:
   * `corrected_coordinates`: 真上座標空間に変換された座標を持つ検出結果
   * `warped_image`: 遠近補正された画像（画像ワープが有効な場合）
   * `extended_transformed_rect_width` と `extended_transformed_rect_height`: ポリゴン拡張を含む最終寸法

この変換は透視歪みを効果的に「補正」し、座標と画像がまるで真上から見たように見えるようにします。これは、遠近歪みが誤差を生むような正確な測定、面積計算、距離測定、空間解析に有用です。

## 一般的な使用例

* **真上分析**: 真上分析と測定のために遠近歪みを補正します（例: 監視カメラ分析、俯瞰画像生成、真上座標の正規化）。これにより真上分析のワークフローを可能にします
* **正確な測定**: 透視歪みを取り除くことで、距離、面積、サイズを正確に測定できるようにします（例: 実世界単位での物体サイズ測定、正確な面積計算、歪みのない距離測定）。これにより測定ワークフローを可能にします
* **空間分析**: 補正済み座標を使って空間分析や座標ベースの操作を実行します（例: ゾーンベース分析、空間追跡、座標ベースのフィルタリング）。これにより空間分析のワークフローを可能にします
* **空撮・俯瞰画像**: 透視補正を伴う空撮画像または俯瞰カメラ映像を処理します（例: ドローン画像解析、俯瞰カメラ処理、衛星画像解析）。これにより空撮分析のワークフローを可能にします
* **品質管理と検査**: 品質管理および検査のワークフロー向けに遠近感を補正します（例: 製造検査、製品品質チェック、正確な測定を伴う欠陥検出）。これにより品質管理のワークフローを可能にします
* **屋内ナビゲーションとマッピング**: 屋内ナビゲーションおよびマッピング用途向けに遠近感を補正します（例: フロアプラン生成、屋内マッピング、ナビゲーションシステム）。これによりマッピングのワークフローを可能にします

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

このブロックは画像および/または検出結果を受け取り、遠近補正された出力を生成します:

* **検出モデルの後で** 正確な解析のために座標を補正します（例: 遠近補正付き物体検出、補正済み座標を伴うインスタンスセグメンテーション）。これにより検出から補正へのワークフローを可能にします
* **ゾーンまたはポリゴン定義ブロックの後で** 定義済み領域を透視ポリゴンとして使用します（例: ポリゴンゾーンを透視領域として使用、特定領域に補正を適用）。これによりゾーンから補正へのワークフローを可能にします
* **測定ブロックの前で** 補正済み座標で正確な測定を可能にします（例: 補正済み座標での距離測定、真上視点でのサイズ測定、補正済み座標での面積計算）。これにより補正から測定へのワークフローを可能にします
* **分析ブロックの前で** 補正済み座標で分析を実行します（例: 補正済み座標でのゾーン分析、真上視点での追跡、補正済み経路での経路分析）。これにより補正から分析へのワークフローを可能にします
* **可視化ブロックの前で** 補正済み座標とワープ画像を可視化します（例: 真上視点の表示、補正済み検出結果の可視化、遠近補正結果の表示）。これにより補正から可視化へのワークフローを可能にします
* **ワークフロー出力において** 遠近補正された最終出力を提供します（例: 真上座標出力、補正済み検出出力、ワープ画像出力）。これにより補正から出力へのワークフローを可能にします

## 要件

このブロックは、入力として画像または予測（検出結果）のいずれかを必要とします。 `perspective_polygons` パラメータには、変換する領域を定義する、ちょうど 4 頂点を持つポリゴンを少なくとも 1 つ含める必要があります。ポリゴンは 4 つの座標ペアのリストとして指定できます `[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]` または NumPy 配列として指定できます。複数のポリゴンが与えられた場合、各バッチ要素ごとに最大のポリゴン（面積基準）が選択されます。 `transformed_rect_width` と `transformed_rect_height` パラメータは、出力される真上長方形の寸法を定義します。このブロックは OpenCV の透視変換関数を使用し、適切なポリゴン順序と有効な座標データが必要です。ポリゴン拡張が有効な場合、出力寸法は拡張領域を含むように自動調整されます。

### 型識別子

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

### プロパティ

| **名前**                                            | **型**       | **説明**                                                                                                                                                                                                                                                                                                                                         | 参照 |
| ------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`                                            | `str`       | このステップの一意の識別子を入力してください。                                                                                                                                                                                                                                                                                                                        | ❌  |
| `perspective_polygons`                            | `List[Any]` | 透視視点から真上視点へ変換する領域を定義する透視ポリゴンです。各ポリゴンは、ちょうど 4 つの頂点（座標）で構成されている必要があります。形式: 4 つの座標ペアのリスト \[\[x1, y1], \[x2, y2], \[x3, y3], \[x4, y4]] または NumPy 配列。バッチ要素に対して複数のポリゴンが指定された場合、最大のポリゴン（面積基準）が選択されます。ポリゴンは、宛先長方形にマッピングされる透視視点のソース領域を定義します。                                                                                                           | ✅  |
| `transformed_rect_width`                          | `整数`        | 真上視点における宛先長方形の幅（ピクセル単位）。透視ポリゴンはこの幅に収まるように変換されます。座標はこの寸法に一致するようスケーリングされます。ポリゴン拡張が有効な場合、拡張領域に対応するため実際の出力幅はより大きくなることがあります。                                                                                                                                                                                                                        | ✅  |
| `transformed_rect_height`                         | `整数`        | 真上視点における宛先長方形の高さ（ピクセル単位）。透視ポリゴンはこの高さに収まるように変換されます。座標はこの寸法に一致するようスケーリングされます。ポリゴン拡張が有効な場合、拡張領域に対応するため実際の出力高さはより大きくなることがあります。                                                                                                                                                                                                                     | ✅  |
| `extend_perspective_polygon_by_detections_anchor` | `str`       | すべての検出アンカーポイントを含めるように透視ポリゴンを拡張するための任意設定です。Position 値（CENTER、CENTER\_LEFT、CENTER\_RIGHT、TOP\_CENTER、TOP\_LEFT、TOP\_RIGHT、BOTTOM\_LEFT、BOTTOM\_CENTER、BOTTOM\_RIGHT、CENTER\_OF\_MASS）に設定すると、すべての検出についてそのアンカーポイントを含むようにポリゴンを拡張します。'ALL' に設定すると、バウンディングボックス全体（すべての角）を含むように拡張します。空文字列（デフォルト）は拡張を無効にします。拡張により、すべての検出が変換領域内に収まり、ポリゴン境界と出力寸法が自動調整されます。 | ✅  |
| `warp_image`                                      | `bool`      | True の場合、入力画像に透視変換を適用し、真上視点のワープ画像を生成します。ワープ画像は、指定された変換後の長方形サイズ（および追加の拡張分）で遠近補正されたビューを示します。False（デフォルト）の場合は検出座標のみが変換され、元の画像は変更されずに返されます。これを True にするには画像を提供する必要があります。                                                                                                                                                                           | ✅  |

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

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

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

<details>

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

* 入力
  * `predictions` (*Union\[*[*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)*,* [*`instance_segmentation_prediction`*](/workflows/ja/gaido/developer-guide/kinds/instance-segmentation-prediction.md)*]*）：変換する任意の物体検出またはインスタンスセグメンテーションの予測。指定された場合、バウンディングボックス、マスク、キーポイントが真上座標空間に変換されます。指定されない場合は、画像ワープのみが実行されます（有効な場合）。予測結果または画像のいずれかを提供する必要があります。
  * `images` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)）：必要に応じて真上視点にワープする入力画像。warp\_image が True の場合に必須です。画像は透視変換行列を使用して変換され、真上ビューを生成します。画像のみが提供された場合（予測なし）、画像ワープのみが実行されます。
  * `perspective_polygons` ([*`list_of_values`*](/workflows/ja/gaido/developer-guide/kinds/list-of-values.md)）：透視視点から真上視点へ変換する領域を定義する透視ポリゴンです。各ポリゴンは、ちょうど 4 つの頂点（座標）で構成されている必要があります。形式: 4 つの座標ペアのリスト \[\[x1, y1], \[x2, y2], \[x3, y3], \[x4, y4]] または NumPy 配列。バッチ要素に対して複数のポリゴンが指定された場合、最大のポリゴン（面積基準）が選択されます。ポリゴンは、宛先長方形にマッピングされる透視視点のソース領域を定義します。
  * `transformed_rect_width` ([*`整数`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：真上視点における宛先長方形の幅（ピクセル単位）。透視ポリゴンはこの幅に収まるように変換されます。座標はこの寸法に一致するようスケーリングされます。ポリゴン拡張が有効な場合、拡張領域に対応するため実際の出力幅はより大きくなることがあります。
  * `transformed_rect_height` ([*`整数`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：真上視点における宛先長方形の高さ（ピクセル単位）。透視ポリゴンはこの高さに収まるように変換されます。座標はこの寸法に一致するようスケーリングされます。ポリゴン拡張が有効な場合、拡張領域に対応するため実際の出力高さはより大きくなることがあります。
  * `extend_perspective_polygon_by_detections_anchor` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：すべての検出アンカーポイントを含めるように透視ポリゴンを拡張するための任意設定です。Position 値（CENTER、CENTER\_LEFT、CENTER\_RIGHT、TOP\_CENTER、TOP\_LEFT、TOP\_RIGHT、BOTTOM\_LEFT、BOTTOM\_CENTER、BOTTOM\_RIGHT、CENTER\_OF\_MASS）に設定すると、すべての検出についてそのアンカーポイントを含むようにポリゴンを拡張します。'ALL' に設定すると、バウンディングボックス全体（すべての角）を含むように拡張します。空文字列（デフォルト）は拡張を無効にします。拡張により、すべての検出が変換領域内に収まり、ポリゴン境界と出力寸法が自動調整されます。
  * `warp_image` ([*`boolean`*](/workflows/ja/gaido/developer-guide/kinds/boolean.md)）：True の場合、入力画像に透視変換を適用し、真上視点のワープ画像を生成します。ワープ画像は、指定された変換後の長方形サイズ（および追加の拡張分）で遠近補正されたビューを示します。False（デフォルト）の場合は検出座標のみが変換され、元の画像は変更されずに返されます。これを True にするには画像を提供する必要があります。
* 出力
  * `corrected_coordinates` (*Union\[*[*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)*,* [*`instance_segmentation_prediction`*](/workflows/ja/gaido/developer-guide/kinds/instance-segmentation-prediction.md)*]*）：sv.Detections(...) 形式の検出バウンディングボックスを含む予測。 `object_detection_prediction` または、sv.Detections(...) 形式の検出バウンディングボックスとセグメンテーションマスクを含む予測。 `instance_segmentation_prediction`.
  * `warped_image` ([`image`](/workflows/ja/gaido/developer-guide/kinds/image.md)): ワークフロー内の画像。
  * `extended_transformed_rect_width` ([`整数`](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：整数値。
  * `extended_transformed_rect_height` ([`整数`](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：整数値。

</details>

<details>

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

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/perspective_correction@v1",
	    "predictions": "$steps.object_detection_model.predictions",
	    "images": "$inputs.image",
	    "perspective_polygons": "$steps.perspective_wrap.zones",
	    "transformed_rect_width": 1000,
	    "transformed_rect_height": 1000,
	    "extend_perspective_polygon_by_detections_anchor": "CENTER",
	    "warp_image": false
	}
```

</details>
