영상이 기울어져 있을 때 영상 회전을 통하여 영상을 올바르게 하거나
올바른 영상을 회전시키고자 할 때 해당되는 경우이다.
일반적인 x-y 좌표계에서 특정 좌표의 회전은 보통 회전행렬을 통해 나타내어진다.
위와 같이 나타낼 수 있을 것이다.
하지만 영상의 회전에서 사용하는 좌표계는 수학적 좌표계가 아닌 왼쪽상단이 원점인 아래와 같은 좌표계를 사용한다.
따라서 영상에서의 반시계방향으로 회전은 x-y좌표계로 볼때에 시계방향의 회전으로 보이게 된다.
그러므로 우리는 영상을 회전시킬 때 기존의 회전행렬을 사용하는 것이 아닌
기존 회전행렬의 θ값에 (-θ) 의 값을 넣어주어야 한다.
그리고 코딩을 진행할 땐
CvMat *rot_mat = cvCreateMat(2, 3, CV_32FC1);
을 통해 배열을 만들어주고
cv2DRotationMatrix(cvPoint2D32f(0, 0), angle, scale, rot_mat);
이 과정을 통해 원점을 통해 angle의 회전각만큼, scale 의 배율만큼 rot_mat 배열을 회전시키도록 해준다.
그리고 생성된 배열행렬을 영상에 적용시키기 위해
cvWarpAffine(src, dst, rot_mat, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
를 작성하여 준다.
4번째 항목에 들어가는 CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS 와 CV_WARP_INVERSE_MAP
이 두가지가 들어갈 수 있는데
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS는 양선형 보간법을 사용하고
목적 영상의 모든 픽셀을 특정 값으로 채울 때 사용되고
(위의 문장에서는 특정값이 생략되었는데 이때는 0이 디폴트로 적용된다.)
CV_WARP_INVERSE_MAP 은 목적 영상에서 원 영상으로 역 변환에 의해 보간된다. 즉 역방향 사상에 의해 보간된다.
'OpenCV > 기하학적 변환을 통한 영상처리' 카테고리의 다른 글
영상의 확대 및 축소 (0) | 2019.08.13 |
---|---|
사상(Mapping) (0) | 2019.08.12 |