반응형

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

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

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

위와 같이 2x2 픽셀 영상의 크기를 3x3 으로 증가시켰을 경우를 생각해보자.

(0, 0) 픽셀은 그대로 (0, 0) 에,  (0, 1) 픽셀은 (0, 2) 픽셀에 대응되는 것을 확인할 수 있다.

 

하지만 확대영상의 (0, 1) 픽셀과 (1, 0) 픽셀, (1, 1) 픽셀 등에는 대응되는 원 영상의 픽셀값이

존재하지 않는다는 것을 볼 수 있는데 이렇게 영상을 확대하는 경우 홀이 발생하여 영상의

품질은 나빠지게 된다.  따라서 보간법을 이용하여 적절한 데이터값을 할당하여 주어야 한다.

 

 

1. 최근접 이웃 보간법 (CV_INTER_NN)

 

  최근접 이웃 보간법은 가장 간단한 보간법으로 목적 영상에서 픽셀값은 원 영상의 가장 가까운 픽셀의

  픽셀값으로 할당하는 방법이다.  즉 확대영상의 홀 부분에 근처 할당된 픽셀값을 넣어주는 것이다.

 

  역방향 사상에 의해 원 영상을 확대하여 영상을 얻는 경우 목적 영상의 픽셀에 해당되는 원 영상의

  픽셀좌표는 다음의 식을 통해 얻어진다. 

 

   

 

  여기서 Xsrc 와 Ysrc 는 원 영상의 x와 y 좌표이고  Xdst 와 Ydst  는 목적 영상의 x와 y좌표이다.

 

  최근접 이웃 보간법을 이용하여 영상을 확대하는 경우 우둘투둘한 계단 모양이 생기게 되는데

  이런 현상을 에일리어싱(aliasing) 이라 한다.

 

 

 

2. 양선형 보간법 (CV_INTER_LINEAR)

 

  가장 보편적으로 사용되는 보간법으로 원 영상을 확대하는 경우 목적 영상의 각 픽셀에 대해

  원 영상의 좌표가 실수값을 갖는 경우 주위에 있는 4개의 픽셀값을 가지고 보간한다.

 

  즉 주위의 4 지점에 대하여 떨어진 거리를 고려하여 x축으로 보간하고 y축으로 다시한번 보간하는

  방식이다.

 

  위의 그림과 같이 A, B, C, D 점의 픽셀값으로 고려하여 G위치의 픽셀값을 양선형 보간법을 사용하여 구해보자.

 

  우선 x축 방향으로 동일 선상에 위치하는 E점과 F점을 만들어준다.

 

  그럼

         E = (1-α)A + αB

         F = (1-α)C + αD

 

  가 된다.

 

  이번에는 y축 방향으로 E점와 F점의 위치를 고려하여

 

 

  이렇게 나타내어 줄 수 있고

 

      G = (1- β)E + βF 로 표시할 수 있다.

 

 

 

3. 큐빅 보간법 (CV_INTER_CUBIC)

 

  원 영상을 확대하는 경우 목적 영상의 각 픽셀에 대해 원 영상의 좌표가 실수 값을 갖는 경우

  주위에 있는 16개의 픽셀값을 가지고 보간한다.

  

  즉 위의 양선형 보간법의 경우 4개의 픽셀값을 고려하여 보간하였다면 큐빅 보간법은 16개의 픽셀값을

  고려하여 보간하는 방식이다.

 

  주황색 지점의 픽셀을 구하기 위해 근처 검은색 사각형의 픽셀값들을 고려하는 방식이다.

 

  우선 검은색 픽셀값들을 고려하여 행 방향에 따라 보간을 하여 아래와 같은 붉은 사각형의 값을 구한다.

 

 

  그리고 붉은 구해진 붉은 사각형들을 이용하여 중앙에 위치한 주황색 원의 픽셀값을 구할 수 있다.

 

 

4. 재표본 추출법 (CV_INTER_AREA)

 

  원 영상을 축소하게 될 때 픽셀의 갯수는 감소하게 되어 어느 부분의 픽셀을 가져올 것인지

  선택해 주어야 하는데 예를들어 크기를 1/2 배 축소하는 경우 원 영상에서 홀수인 픽셀들을

  사용하여 목적영상을 만드는 방식이다.

  영상을 확대하는 경우는 최근접 이웃 보간법과 비슷하다.

 

 

반응형

'OpenCV > 기하학적 변환을 통한 영상처리' 카테고리의 다른 글

회전영상  (0) 2019.08.13
사상(Mapping)  (0) 2019.08.12
반응형

사상이란 입력 영상의 각 좌표를 출력 영상의 하나의 좌표로 대응시키는 관계를 말한다.

 

사상은 크게 전방향 사상과 역방향 사상으로 나뉘게 되는데 

 

전방향 사상

 

전방향 사상의 경우 입력의 모든 픽셀에 대하여 출력 영상의 새로운 픽셀로 대응되지만

출력영상에는 대응되는 픽셀이 중복되거나 혹은 아무 픽셀도 대응되지 않는 빈 픽셀이 생길 수 있다.

 

역방향 사상

 

역방향 사상은 출력영상의 모든 픽셀에 대하여 입력 영상의 새로운 픽셀로 대응시키는 관계를 말하며 이 경우

전방향 사상에서 생기는 출력 영상에서 중복과 홀이 생기는 것을 막을 수 있다.

 

즉 역방향 사상은 출력 영상을 통해 입력영상이 어떻게 되어있는지 알아보는 사상이다.

 

 

 

 

 

 

출처: OpenCV를 이용한 영상처리 (임동훈 지음)

반응형

'OpenCV > 기하학적 변환을 통한 영상처리' 카테고리의 다른 글

회전영상  (0) 2019.08.13
영상의 확대 및 축소  (0) 2019.08.13

+ Recent posts