Skip to content

Transformation matrix

변형 행렬들 선형 대수학에서 선형 변환(linear transformations)은 행렬(matrix,매트릭스)로 나타내는 것이 가능하다. 또한 역사적으로 행렬상에서 행렬을 변환(또는 변형)시키는 다양한 표현방법이 조사되어왔다.

Category

Rigid Transformation
Rigid Transform은 형태는 유지하고, 회전과 이동 변환
강체(Rigid)는 2개의 모션벡터만 있다면 변환이 가능합니다. 즉 2개의 좌표점을 이용해서 변환 하기 때문에 변환에 제약이 있다고 생각하시면 되겠습니다. 여기서 포인트는 형태가 변하지 않는다는 것 을 포인트로 생각하면 됩니다. 즉 정사각형은 계속 정사각형이어야 하는 것 입니다.
Similarity Transformation
Similarity 변환 즉, 닮음 변환은 rigid 변환에 추가적으로 스케일 변화까지 허용한 변환입니다
Affine Transformation
Affine 변환은 직선, 길이(거리)의 비, 평행성(parallelism)을 보존하는 변환이다.
호모그래피 (Homography) (Projective Transformation)
Homography Transform: Projection Transform
형태와 회전, 회전, 이동 을 전부 포함하는 변환

OpenCV methods

OpenCV에서 2D 변환과 관련된 함수들을 정리해 보았습니다.

estimateRigidTransform()
다수의 매칭쌍으로부터 similarity 변환이나 affine 변환을 구할 때 사용 (파라미터로 선택 가능). 내부적으로 RANSAC을 이용.
opencv2/video/video.hpp
getAffineTransform()
3쌍의 입력 매칭쌍으로부터 affine 변환을 구해줌.
opencv2/imgproc/imgproc.hpp
invertAffineTransform()
affine 변환의 역변환을 구해줌.
opencv2/imgproc/imgproc.hpp
getPerspectiveTransform()
4쌍의 입력 매칭쌍으로부터 homography 행렬을 계산해 줌.
opencv2/imgproc/imgproc.hpp
findHomography()
다수의 매칭쌍으로부터 homography 행렬을 계산해 줌 (근사 방법은 전체 데이터 fitting, RANSAC, LMedS 중 선택).
opencv2/calib3d/calib3d.hpp
transform()
2×2 또는 2×3 변환행렬(similarity, affine 등)을 이용하여 좌표변환을 할 때 사용.
perspectiveTransform()
3x3 homography 변환행렬 또는 4×4 변환행렬을 이용하여 좌표변환을 할 때 사용.

Scaling matrix

각 축의 크기를 변환할 경우 아래와 같은 공식이 성립된다.

  • x' = ax
  • y' = by
  • z' = cz

이를 행렬로 변환할 경우 아래와 같다.
Size_matrix.gif

Rotation matrix

회전행렬 유도 In linear algebra, a rotation matrix is a matrix that is used to perform a rotation in Euclidean space.

회전을 위한 행렬의 총칭이다.

In two dimensions

In two dimensions, every rotation matrix has the following form,

Positive_rotation_matrix.png

The direction of vector rotation is counterclockwise if θ is positive (e.g. 90°), and clockwise if θ is negative (e.g. −90°). Thus the clockwise rotation matrix is found as

Negative_rotation_matrix.png

유도 방법

유도방법은 아래와 같다.

우측 그림의 (가)와 같이 카메라를 기준으로 좌표가 (x, y)인 A점에 물체가 있다고 할 때, 카메라가 왼쪽으로 θ=30° 만큼 회전하면 같은 물체에 대해 그 물체가 보이는 좌표값은 (x', y')이 된다. 이 때 x'과 y'은 원래 좌표와 각 θ에 의해 결정된다. 그림의 (나)를 자세히 보면 아래와 같은 관계가 성립됨을 알 수 있다.

  • x' = xcosθ - ysinθ
  • y' = xsinθ + ycosθ

θ가 음의 방향(시계방향)인 경우 아래와 같이 회전 행렬을 변경해야 한다.

  • x' = xcosθ + ysinθ
  • y' = -xsinθ + ycosθ

이는 z축(지면에 대해 들어가고 나오는 방향)을 기준으로 회전한 것과 같다. 이를 행렬로 표현하면 아래와 같다.
Rotation_matrix_3d_z.gif

같은 방법으로 x축, y축을 중심으로 회전시키는 행렬은 아래와 같다.
Rotation_matrix_3d_xy.gif

정확한 유도 방법은 다음2을 참조.

See also

Favorite site

References


  1. The_coordinate_conversion_by_the_matrix.pdf 

  2. Rotation_matrix_prove.pdf