2022 하계 모각코

[3회차] Computer Vision - Rotation

yeonarom 2022. 7. 14. 19:10

[Computer Vision]

Rotation

어떤 한 점의 좌표값 (X, Y)는 아래와 같다.

$$ X = rcos\theta $$

$$ Y = rsin\theta $$

Rotation은 이 점을 원하는 각도만큼 회전하는 것으로 이미지를 돌릴 때 사용한다.

 

(X, Y) 좌표에 위치한 점을 회전했을 때 좌표를 (X`, Y`)라 하면 X`과 Y`의 값은 아래와 같다.

$$ \theta : 현재\,점의\,각도\quad \theta_2 : 회전할\,각도 $$

$$ X^` = rcos(\theta+\theta_2) = r({cos\theta}{cos\theta_2} - {sin\theta}{sin\theta_2}) = Xcos\theta_2 - Ysin\theta_2 $$

$$ Y^` = rsin(\theta+theta_2) = r({sin\theta}{cos\theta_2} + {cos\theta}{sin\theta_2}) = Ycos\theta_2 + Xsin\theta_2 $$

 

X`과 Y`을 X, Y에 대한 행렬곱으로 표현하면 아래와 같다.

$$ \begin{pmatrix}X^`\\Y^`\\  \end{pmatrix} = \begin{pmatrix}cos\theta_2&-sin\theta_2\\sin\theta_2&cos\theta_2\\  \end{pmatrix}\begin{pmatrix}X\\Y\\  \end{pmatrix} $$


위의 공식을 사용해 픽셀을 회전했을 때 위치를 구하는 loc_ratate함수를 아래와 같이 작성하였다.

def loc_rotate(radi, x, y):
    I = np.array([[np.cos(radi), -np.sin(radi)], [np.sin(radi), np.cos(radi)]])
    return I@[x, y]

위 함수를 이용하여 이미지를 Rotation하는 rotation 함수를 작성하였다.

이 함수를 실제 이미지에 적용해보자.

 

아래는 랜덤으로 색상을 지정해 만든 5x5 이미지이다.

랜덤 5x5 이미지

plt.imshow(rotation(img, 90))

이 이미지를 90도로 Rotation하면 아래와 같은 이미지가 출력된다.

각 픽셀이 왼쪽으로 90도 회전되어 위치하는 것을 확인할 수 있다.

랜덤 5x5 이미지 90도 Rotation

픽셀 값이 제대로 Rotation 되는 것을 확인했으니 사이즈가 큰 이미지를 Rotation 해보자.

아래의 사진을 Rotation에 사용하였다.

원본 이미지

이 사진을 각각 90도, 180도, 270도로 Rotation 하면 아래와 같은 이미지가 출력된다.

원본이미지를 각각 90도,180도, 270도 Rotation