본문 바로가기

난 이 분야 전문가야!/OpenCV

컴퓨터비전인강 4주차 :: 영상의 변환

Ch 05. 기하학적 변환 - 02. 영상의 확대와 축소

Ch 05. 기하학적 변환 - 03. 이미지 피라미드

Ch 05. 기하학적 변환 - 04. 영상의 회전

 

 

오늘은 오랜만에 카페에 와서 공부했습니다.

집 근처에 카페가 리모델링하고 더 좋아졌더라고요.

이번 강의에서는 영상의 크기 변환과 회전 변환에 대해서 배워보았습니다^^

 

 

영상의 크기 변환(Scale transformation)

영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환

 

openCV에서 이미 영상의 크기를 변환해주는 함수를 제공해줌

 

cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) -> dst

 

dsize: 결과 영상 크기를 튜플 형태로 입력 (w, h), (0,0) 일 경우 fx, fy 값을 이용하여 결정.

fx, fy: x와 y 방향 스케일 비율 (dsize 값이 0일때 유효)

interpolation: 보간법 지정. 기본값은 cv2.INTER_LINEAR

    그외

    cv2.INTER_CUBIC  -  (4 x 4 이웃 픽셀 참조)

    cv2.INTER_LANCZOS4  -  (8x8 이웃 픽셀 참조)   

    cv2.INTER_AREA  -  영상 축소 시 효과적

 

계산 시간 & 퀄리티

cv2.INTER_LINEAR  <  cv2.INTER_CUBIC  < cv2.INTER_LANCZOS4

 

 

영상의 축소 시 고려할 사항

   영상 축소 시 디테일이 사라지는 경우가 발생 (e.g. 한 픽셀로 구성된 선분)

   입력 영상을 부드럽게 필터링한 후 축소, 다단계 축소

   opencv의 cv2.resize() 함수에서는 cv2.INTER_AREA 플래그를 사용

 

영상의 대칭 변환 함수

cv2.flip(src, flipcode, dst=None) -> dst

 

flipCode: 대칭 방향 지정

     - 양수 (좌우 대칭)

     - 0     (상하 대칭)

     - 음수 (좌우 & 상하 대칭)

 

 

이미지 피라미드

   하나의 영상에 대해 다양한 해상도의 영상 세트를 구성하는 것

   보통 가우시안 블러링 & 다운 샘플링 형태로 축소하여 구성

 

   다운 샘플링: 큰 영상을 점점 작게 하여 작은 영상을 만드는 것

   업 샘플링: 작은 영상을 점점 크게 하여 큰 영상을 만드는 것

 

 

openCV 피라미드 함수

- 다운 샘플링

cv2.pyrDown(src, dst=None, dstsize=None, borderType=None) -> dst

 

dstsize: 출력 영상 크기.

             따로 지정하지 않으면 입력 영상의 가로, 세로 크기의 1/2로 설정.

참고)

   먼저 5x5 크기의 가우시안 필터를 적용

   이후 짝수 행과 열을 제거하여 작은 크기의 영상을 생성

 

- 업 샘플링

cv2.pyrUp(src, dst=None, dstsize=None, borderType=None) -> dst

 

 

영상의  회전

   영상을 특정 각도만큼 회전시키는 변환 (반시계 방향)

 

warpper 함수를 사용하여 변환

 

먼저 affine 변환 행렬을 만듬

rad = 20*math.pi / 180

aff = np.array([[math.cos(rad), math.sin(rad), 0],

                       [-math.sin(rad), math.cos(rad), 0]], dtype=np.float32)

 

dst = cv2.warpAffine(src, aff, (0,0))

 

결과: 반시계 방향으로 20도 돌아간 영상 반환

 

하지만 위의 함수를 사용하여 회전 변환을 할시 영상의 중점을 기준으로 회전을 하지 않고

영상의 (0,0)을 기준으로 회전이 됨

 

특정 좌표를 기준으로 회전하기

cv2.getRotationMatrix2D(center, angle, scale) -> retval

 

center: 좌표 튜플로 입력

angle: 회전 각도 입력, 시계방향으로 회전할 시 음수로 입력

scale: 크기 변환 스케일

 

영상의 중앙 기준 회전 동장 과정

   1. 사용자가 지정한 기준 좌표를 (0,0)으로 이동시켜 영상을 이동

   2. 이동시킨 영상을 지정한 각도로 회전

   3. 다시 원래의 자리로 이동

   4. 출력 영상의 크기로 자름

 

 

 

 

 

 

강의 링크: bit.ly/2NTHHz7

728x90