728x90

Affine transform은 기존의 vector 공간의 linear transform에 위치이동 변환을 추가한 것이라고 할 수 있다.

 

이는 원래는 위치이동 변환의 경우 linear transform이 아닌데, 차원축을 하나 추가함으로 이를 가능하게 한다.

 

자세히 살펴보자.

 

예를들어 다음과 같은 큐브가 있다고 가정해보자.

 

 

그리고 이 큐브의 중심점이 바로 x,y,z 축의 중심점이라고 가정하고, v큐브의 각 점을 vector로 표현한다고 생각해보자.

 

그러면 v 벡터 set에 벡터의 크기변환과 회전변환을 적용하면 어떻게 될까?

 

 

결과는 위 그림과 같이 된다.

 

그러나 이는 큐브의 중심이 원점인 경우이다..

 

큐브의 중심이 원점이 아닌 경우는 어떻게 될까?

 

 

이는 우리가 원하는 결과와 다르다.

(우리가 원하는 결과는 큐브가 제자리에서 크기가 변환되고, 회전이 일어나야 되는데, 중심축을 기준점으로 하여 위치이동이 함께 일어난다.)

 

 

즉, 어떤 사물을 변환할때, 위치가 변하지 않은 상태에서 선형변환을 하려면, 사물의 중심점을 위치변환을 먼저 해주는 것이 필요하다는 것이다.

 

위치변환은 다음과 같이 표현이 가능하다.

 

 

이러한 위치변환을 포함하여 벡터의 연산을 표현하면 다음과 같다.

 

 

그러나 이러한 형태로 벡터 연산을 진행하면 다음과 같이 매우 지저분해진다.

 

 

 

그렇기 때문에 위치변환을 행렬의 덧셈이 아니라,  행렬의 곱셈으로 표현하고 이를 'Affine transform'이라고 지칭한다.

이를 위해서 변환을 1차원 늘려서 진행하는데, 예를들어서 2차원의 위치변환을 행렬의 곱으로 표현하는 경우 3차원 행렬의 곱으로 이루어진다.

 

다음 그림을 보자.

 

 

x,y 점이 z축으로 1의 위치 위에 존재한다고 생각하면 행렬의 곱으로 위치변환이 가능해진다.

그러면 어떠한 형식으로 표현될까?

 

 

첫번째 결과인 Px+a만 일단 살펴보면 아래와 같다.

 

 

왼쪽식이 오른쪽식이 되려면 Px를 남고 t1,3은 a가 되야 하므로 

t1,1 = 1 , t1,2 = 0 , t1,3 = a 가 되야한다.

 

마찬가지로 나머지 모두 해보면 아래와 같은 결과가 나온다.

 

 이를 shearing 변환이라고 한다.

 

이를 general하게 표현하면 다음과 같이 된다.

 

 

이때, 보통 z는 1로 정한다. 왜냐하면 우리는 x,y축에서의 위치변환을 하기위해서 z축의 값을 추가한 것이고,

z의 값의 곱이 x,y에 더해지는데 z를 1정하면 우리가 이동하고 싶어하는 a,b가 그대로 유지되기 때문이다.

 

마찬가지로 scale 및 회전변환의 affine transform 버젼은 다음과 같다.

 

 

 

 

https://luv-n-interest.tistory.com/810?category=973578 

 

아핀 변환, Affine Transformation [게임수학]

벡터 공간 -> 변환을 배운 것처럼 아핀 공간 -> 변환을 배워보자. 우리가 실제로 게임에서 다룰 모델들은 아핀 공간에 존재한다. 왜 벡터가 아니라 아핀 공간에서 다루느냐? 아핀 공간에는 방향과

luv-n-interest.tistory.com

https://redstarhong.tistory.com/56

 

Affine Transform (아핀 변환)

Corner Detection method 중 하나인 Harris Detector의 한계로 Not invariant to image scale Not invariant to Affine(projective) transformation 이라는 게 있다. viewpoint에 따라 이미지에 Affine transforma..

redstarhong.tistory.com

 

728x90

+ Recent posts