> 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/ko/blocks/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의 원근 변환 함수를 사용합니다. 다각형 확장이 활성화되면 출력 크기는 확장된 영역을 포함하도록 자동으로 조정됩니다.

### 유형 식별자

다음 식별자를 단계에서 사용하세요 `"type"` 필드: `roboflow_core/perspective_correction@v1` 워크플로에 블록을 단계로 추가하려면.

### 속성

| **이름**                                            | **유형**      | **설명**                                                                                                                                                                                                                                                                                                                                                                      | 참조 |
| ------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `이름`                                              | `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이면 이미지를 제공해야 합니다..                                                                                                                                                                                      | ✅  |

해당 **참조** 열은 워크플로 런타임에서 사용 가능한 동적 값으로 속성을 매개변수화할 수 있는 가능성을 표시합니다 `워크플로` 참조하세요 *바인딩* 자세한 정보를 위해

### 입력 및 출력 바인딩

사용 가능한 연결은 바인딩 종류에 따라 달라집니다. 어떤 바인딩 종류가 `원근 보정` 버전 `v1` 있습니다.

<details>

<summary>입력 및 출력 바인딩</summary>

* 입력
  * `predictions` (*Union\[*[*`instance_segmentation_prediction`*](/workflows/ko/developer-guide/developer-guide/kinds/instance-segmentation-prediction.md)*,* [*`object_detection_prediction`*](/workflows/ko/developer-guide/developer-guide/kinds/object-detection-prediction.md)*]*): 변환할 선택적 객체 탐지 또는 인스턴스 세그멘테이션 예측 결과입니다. 제공되면 바운딩 박스, 마스크, 키포인트가 상단 좌표 공간으로 변환됩니다. 제공되지 않으면 이미지 왜곡 변환만 수행됩니다(활성화된 경우). 예측 결과 또는 이미지 중 하나는 반드시 제공되어야 합니다..
  * `이미지들` ([*`이미지`*](/workflows/ko/developer-guide/developer-guide/kinds/image.md)): 선택적으로 상단 뷰로 왜곡 변환할 입력 이미지입니다. warp\_image가 True인 경우 필요합니다. 이미지는 원근 변환 행렬을 사용하여 상단 뷰를 생성하도록 변환됩니다. 이미지만 제공되고(예측 결과 없음) 있으면 이미지 왜곡 변환만 수행됩니다..
  * `perspective_polygons` ([*`list_of_values`*](/workflows/ko/developer-guide/developer-guide/kinds/list-of-values.md)): 원근 뷰에서 상단 뷰로 변환할 영역을 정의하는 원근 다각형입니다. 각 다각형은 꼭짓점(좌표) 4개로 정확히 구성되어야 합니다. 형식: 4개의 좌표 쌍 리스트 \[\[x1, y1], \[x2, y2], \[x3, y3], \[x4, y4]] 또는 NumPy 배열. 배치 요소에 대해 여러 다각형이 제공되면, 가장 큰 다각형(면적 기준)이 선택됩니다. 이 다각형은 대상 사각형으로 매핑될 원근 뷰의 소스 영역을 정의합니다..
  * `transformed_rect_width` ([*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 상단 뷰에서 대상 사각형의 너비(픽셀 단위)입니다. 원근 다각형은 이 너비에 맞도록 변환됩니다. 좌표는 이 크기에 맞게 스케일 조정됩니다. 다각형 확장이 활성화되면 실제 출력 너비는 확장된 영역을 수용하기 위해 더 커질 수 있습니다..
  * `transformed_rect_height` ([*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 상단 뷰에서 대상 사각형의 높이(픽셀 단위)입니다. 원근 다각형은 이 높이에 맞도록 변환됩니다. 좌표는 이 크기에 맞게 스케일 조정됩니다. 다각형 확장이 활성화되면 실제 출력 높이는 확장된 영역을 수용하기 위해 더 커질 수 있습니다..
  * `extend_perspective_polygon_by_detections_anchor` ([*`문자열`*](/workflows/ko/developer-guide/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/ko/developer-guide/developer-guide/kinds/boolean.md)): True인 경우 입력 이미지에 원근 변환을 적용하여 상단 뷰의 왜곡된 이미지를 생성합니다. 왜곡된 이미지는 지정된 변환 사각형 크기(및 추가 확장분)에서 원근 보정된 뷰를 보여줍니다. False(기본값)인 경우 탐지 좌표만 변환되고 원본 이미지는 변경되지 않은 채 반환됩니다. 이 값이 True이면 이미지를 제공해야 합니다..
* 출력
  * `corrected_coordinates` (*Union\[*[*`object_detection_prediction`*](/workflows/ko/developer-guide/developer-guide/kinds/object-detection-prediction.md)*,* [*`instance_segmentation_prediction`*](/workflows/ko/developer-guide/developer-guide/kinds/instance-segmentation-prediction.md)*]*): sv.Detections(...) 형식의 탐지된 바운딩 박스를 가진 예측 결과, if `object_detection_prediction` 또는 sv.Detections(...) 형식의 탐지된 바운딩 박스와 세그멘테이션 마스크를 가진 예측 결과, if `instance_segmentation_prediction`.
  * `warped_image` ([`이미지`](/workflows/ko/developer-guide/developer-guide/kinds/image.md)): 워크플로의 이미지.
  * `extended_transformed_rect_width` ([`정수`](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 정수 값.
  * `extended_transformed_rect_height` ([`정수`](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 정수 값.

</details>

<details>

<summary>예시 JSON 정의</summary>

```json
{
	    "name": "<여기에_단계_이름_입력>",
	    "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>
