> 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. 必要に応じて、すべての検出を含むように透視ポリゴンを拡張します:
   * もし `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 の透視変換関数を使用します。これらは適切なポリゴン順序と有効な座標データを必要とします。ポリゴン拡張が有効な場合、出力寸法は拡張領域を含むよう自動的に調整されます。

### タイプ識別子

step の次の識別子を使用してください `"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`                          | `int`       | 真上ビューにおける宛先矩形の幅（ピクセル単位）。透視ポリゴンはこの幅に収まるよう変換されます。座標はこの寸法に合わせてスケーリングされます。ポリゴン拡張が有効な場合、実際の出力幅は拡張領域に対応するためにより大きくなることがあります..                                                                                                                                                                                                                               | ✅  |
| `transformed_rect_height`                         | `int`       | 真上ビューにおける宛先矩形の高さ（ピクセル単位）。透視ポリゴンはこの高さに収まるよう変換されます。座標はこの寸法に合わせてスケーリングされます。ポリゴン拡張が有効な場合、実際の出力高さは拡張領域に対応するためにより大きくなることがあります..                                                                                                                                                                                                                            | ✅  |
| `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 にするには画像を提供する必要があります..                                                                                                                                                                          | ✅  |

The **参照** 列は、workflow runtime で利用可能な動的値を使ってプロパティをパラメータ化できることを示します。詳細は `ワークフロー`  runtime. を参照してください。 *Bindings* 詳細は

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

利用可能な接続は、そのバインディング種別によって異なります。Polygon Visualization がバージョン `透視補正` で持つバインディング種別を確認してください。 `v1` です。

<details>

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

* input
  * `predictions` (*Union\[*[*`instance_segmentation_prediction`*](/workflows/ja/gaido/developer-guide/kinds/instance-segmentation-prediction.md)*,* [*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-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` ([*`integer`*](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 真上ビューにおける宛先矩形の幅（ピクセル単位）。透視ポリゴンはこの幅に収まるよう変換されます。座標はこの寸法に合わせてスケーリングされます。ポリゴン拡張が有効な場合、実際の出力幅は拡張領域に対応するためにより大きくなることがあります..
  * `transformed_rect_height` ([*`integer`*](/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 にするには画像を提供する必要があります..
* output
  * `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` ([`integer`](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 整数値。
  * `extended_transformed_rect_height` ([`integer`](/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>
