rasterImage()를 사용하면 그냥 회전이 되는 것 같기도 한데...
아마 이 방법은 화면으로 출력에 관여하는 것 같다.
실제 영상 자료를 다루어야 한다면 필요 없는 부분일 듯 하다.
그보다 문제는 영상 정보의 수치처리에 어렵다.
뭔가 획기적으로 편한 방법이 있을 수 있겠지만,
일단 무식한 방법으로 접근해 보기로 한다.
직접 좌표를 이동하는 방법이다.
내가 알고 있는 회전 변환은 2차원 평면에서는 별 문제 없이 적용시킬 수 있지만
matrix에서 0과 음의 좌표 따위는 취급하지 않는다.
이걸 고민해야하는 이유는 그림 파일을 불러오면
1사분면에 위치하며 x 축과 y축에 바짝 붙어있는(?)
커다란 직사각형 모양으로 그림 픽셀 좌표가 형성되게 된다.
그런데 어느 특정점을 기준으로 이 사각형을 회전시키게 되면
1사분면이 아닌 2, 3, 4 사분면에 사각형의 일부가 이동하는데 문제가 있다.
이 사분면에 위치하는 정보를 없애면 그만이지만
그림 정보의 손실이 없으려면
회전한 사각형이 1사분면에만 존재하여야 하며
그로 인하여 회전하기전에 사각형을 1사분면 방향으로 이동시켜 주는 것이 필요하다.
가장 생각없이 옮기는 방법은
원래 사각형이 가로 a픽셀, 세로 b픽셀의 크기라고 하면
이와 같은 크기의 matrix(a,b)를 가지고 있다고 할 수 있고,
이 (a, b) 보다 겁나 큰 (c, d)의 크기를 가지는 matrix 를 만들어
그 내부로 적당히 평행 이동시키면 된다.
이 방법의 문제는 c, d 의 크기를 어느 정도로 잡을 것이냐의 문제와
크기가 크면 클 수록 계산에 시간이 소요된다는 단점이 있다.
계산 시간의 소요는 multicore 사용이 어려운 R에서는 큰 문제이다.
최적화시켜보기 위하여 오랜만에 좀 생각을 많이 해 보았다.
1사분면에 있는 사각형은 가로 a, 세로 b의 크기를 가지고 있다.
이 사각형을 구성하는 4개의 점은 반지름이 r인 원위에 있다고 생각해보면
반지름은 다음과 같다.
이 원의 공식은 다음과 같다.
이 원이 최소한으로 평행 이동하여 원의 모든 부분이 1사분면 혹은 x, y축에 위치하기 위해서는
원의 중심이 (a/2, b/2) 에서 (r, r)에 해당하도록 평행 이동 시키면 될 것이다.
이 원은 가로, 세로 2r 인 정사각형 내부에 존재하게 된다.
그러니깐 최소한으로 하려면 matrix(2r, 2r) 을 만들어서
x 축으로 살짝, y 축으로 살짝 옮겨주면 되겠다.
'공부해 봅시다 > R-Project' 카테고리의 다른 글
기준점 찾기 (0) | 2013.04.16 |
---|---|
이미지 회전 (0) | 2013.04.12 |
그림 파일 불러오기 (0) | 2013.04.12 |
stringr (0) | 2012.11.30 |
3개를 1개로 #2 (0) | 2012.08.16 |