줄리아에서 이미지 배열을 회전하는 방법
이미지 회전
imrotate(X, theta)
: 배열 X를 theta라디안만큼 회전시킨다. 여기서 주의해야할 점은 각도의 단위가 도(인 매트랩과 달리 각도의 단위가 라디안이라는 것이다. 또한 매트랩과는 다르게 시계방향으로 회전한다. 다른 변수를 입력하지 않을 경우 보간법은 bilinear이고 회전된 이미지는 자르지 않는다. 원본 이미지 X와 이를 , , 만큼 회전시키는 예제 코드와 그 결과는 아래와 같다.
using Images
using Interpolations
X=load("example\_{i}mage.png")
Y1=imrotate(X,pi/2)
Y2=imrotate(X,pi)
Y3=imrotate(X,pi*3/2)
위와 같이 회전시킬 경우 원본의 배열과 모양이 딱 들어맞으므로 이미지의 크기에 변함이 없다. 그런데 도의 배수가 아닌 각도로 회전시키면 원래의 모양과 들어맞지않다. 그래서 원래 이미지의 모든 점을 표현하기위해 아래와 같이 이미지가 커진다. 이 때 이미지의 원래 크기를 유지하고 싶다면 변수 axes()
를 추가해주면 된다.
Y4=imrotate(X,pi/6)
Y5=imrotate(X,pi/6,axes(X))
또한 Interpolations
패키지의 Constant()
를 사용하면 보간법을 nearest
1로 적용할 수 있다. 최단거리의 점만 계산에 사용하므로 정확도는 떨어지지만 계산은 빠르다. 반대로 bilinear
2의 경우 주위의 네 점을 모두 계산에 사용하므로 속도는 상대적으로 느리지만 더 정확하다. 여기서 정확하다는 말은 회전했을 때 이미지가 손상되는 정도가 낮다는 뜻이다. 아래 그림을 보자. 이미지가 커서 언뜻 보면 차이가 느껴지지 않지만 확대하면 두 보간법의 차이가 확실하게 보인다.
Y6=imrotate(X,pi/6,Constant())
같이보기
환경
- OS: Windows10
- Version: 1.5.3 (2020-11-09)