반응형

영상이 기울어져 있을 때 영상 회전을 통하여 영상을 올바르게 하거나

올바른 영상을 회전시키고자 할 때 해당되는 경우이다.

일반적인 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

+ Recent posts