줄리아에서 이미지 배열을 회전하는 방법

줄리아에서 이미지 배열을 회전하는 방법

how to rotate imagearraymatrix in julia

이미지 회전

imrotate(X, theta) : 배열 X를 theta라디안만큼 회전시킨다. 여기서 주의해야할 점은 각도의 단위가 도($^{\circ})$인 매트랩과 달리 각도의 단위가 라디안이라는 것이다. 또한 매트랩과는 다르게 시계방향으로 회전한다. 다른 변수를 입력하지 않을 경우 보간법은 bilinear이고 회전된 이미지는 자르지 않는다. 원본 이미지 X와 이를 $90^\circ=\pi/2$, $180^\circ=\pi$, $270^\circ=\frac{3}{2}\pi$만큼 회전시키는 예제 코드와 그 결과는 아래와 같다.

using Images
using Interpolations

X=load("example\_image.png")
Y1=imrotate(X,pi/2)
Y2=imrotate(X,pi)
Y3=imrotate(X,pi*3/2)

1.PNG

2.PNG

위와 같이 회전시킬 경우 원본의 배열과 모양이 딱 들어맞으므로 이미지의 크기에 변함이 없다. 그런데 $90$도의 배수가 아닌 각도로 회전시키면 원래의 모양과 들어맞지않다. 그래서 원래 이미지의 모든 점을 표현하기위해 아래와 같이 이미지가 커진다. 이 때 이미지의 원래 크기를 유지하고 싶다면 변수 axes()를 추가해주면 된다.

Y4=imrotate(X,pi/6)
Y5=imrotate(X,pi/6,axes(X))

3.PNG

4.PNG

또한 Interpolations 패키지의 Constant()를 사용하면 보간법을 nearest1로 적용할 수 있다. 최단거리의 점만 계산에 사용하므로 정확도는 떨어지지만 계산은 빠르다. 반대로 bilinear2의 경우 주위의 네 점을 모두 계산에 사용하므로 속도는 상대적으로 느리지만 더 정확하다. 여기서 정확하다는 말은 회전했을 때 이미지가 손상되는 정도가 낮다는 뜻이다. 아래 그림을 보자. 이미지가 커서 언뜻 보면 차이가 느껴지지 않지만 확대하면 두 보간법의 차이가 확실하게 보인다.

Y6=imrotate(X,pi/6,Constant())

5.PNG

6.PNG

7.PNG

같이보기

환경

  • OS: Windows10
  • Version: 1.5.3 (2020-11-09)

  1. 최근접 보간법, 최근린 보간법 ↩︎

  2. 쌍선형 보간법, 양선형 보간법 ↩︎

댓글