Skip to content

Affine transformation

아핀기하학에서 아핀 변환(Affine transformation)은 두 아핀 공간 사이의 공선점을 보존하는 변환이다.

3D 점군의 Affine 변환 추정 및 적용

다음 예제에서는 3D 점군의 Affine 변환을 추정하고, 추정된 변환 행렬을 이용하여 원본 점군을 변환합니다.

import numpy as np
import cv2

# 대응점 쌍 생성
src_pts = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 1]], dtype=np.float32)
dst_pts = np.array([[0, 0, 0], [2, 0, 0], [0, 2, 0], [2, 2, 2]], dtype=np.float32)

# 3D Affine 변환 추정
retval, out, inliers = cv2.estimateAffine3D(src_pts, dst_pts)

# 변환 행렬 출력
print("Estimated Affine Transformation:\n", out)

# 원본 점군 변환
transformed_pts = cv2.transform(src_pts.reshape(-1, 1, 3), out)

# 결과 출력
print("Original Points:\n", src_pts)
print("Transformed Points:\n", transformed_pts.reshape(-1, 3))

위 예제에서는 src_ptsdst_pts 변수를 통해 각각 원본과 변환된 3D 점군을 정의합니다.

cv2.estimateAffine3D() 함수를 사용하여 3D Affine 변환 행렬을 추정하고, 이를 out 변수에 저장합니다.

추정된 변환 행렬을 출력한 후, cv2.transform() 함수를 사용하여 원본 점군을 변환합니다.

장점
3D Affine 변환은 3차원 공간에서의 이동, 회전, 크기 조절 등을 포함한 선형 변환을 표현하기에 유용합니다.
OpenCV에서 제공하는 estimateAffine3D() 함수를 사용하여 쉽게 3D Affine 변환을 추정할 수 있습니다.
단점
3D Affine 변환은 일반화된 3차원 변환 중에 하나로, 일부 복잡한 형태의 변환을 정확하게 표현하기 어려울 수 있습니다.

See also

Favorite site