[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 이미지이다.
plt.imshow(rotation(img, 90))
이 이미지를 90도로 Rotation하면 아래와 같은 이미지가 출력된다.
각 픽셀이 왼쪽으로 90도 회전되어 위치하는 것을 확인할 수 있다.
픽셀 값이 제대로 Rotation 되는 것을 확인했으니 사이즈가 큰 이미지를 Rotation 해보자.
아래의 사진을 Rotation에 사용하였다.
이 사진을 각각 90도, 180도, 270도로 Rotation 하면 아래와 같은 이미지가 출력된다.
'2022 하계 모각코' 카테고리의 다른 글
[4회차] Deep Learning - MLP(Multi-Layer Perceptron) (0) | 2022.07.26 |
---|---|
[4회차] 학습 계획서 (0) | 2022.07.26 |
[3회차] Computer Vision - Gaussian blur, mean filtering, median filtering (0) | 2022.07.14 |
[3회차] 학습 계획서 (0) | 2022.07.14 |
[2회차] Computer Vision - Scaling (0) | 2022.07.07 |