[ch05] 기하학적 변환 - 영상의 이동 변환과 전단 변환

빨주노·2021년 8월 22일
0

영상의 기하학적 변환(geometric transformation)이란?

  • 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업
  • Image registration, removal of geometric distortion, etc.

    주로 projective, affine을 사용한다.

이동 변환(Translation transformation)

  • 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환
  • x축과 y축 방향으로의 이동 변위를 지정

영상의 어파인 변환 함수

cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) -> dst
  • src : 입력 영상
  • M : 2x3 어파인 변환 행렬. 실수형.
  • dsize : 결과 영상 크기. (w, h) 튜플. (0, 0) 이면 src와 같은 크기로 설정.
  • dst : 출력 영상
  • flags : 보간법. 기본값은 cv2.INTER_LINEAR.
  • borderMode : 가장자리 픽셀 확장 방식. 기본값은 cv2.BORDER_CONSTANT.
  • borderValue : cv2.BORDER_CONSTANT일 때 사용할 상수 값. 기본값은 0.
    • 0은 검정색, 255는 흰색을 나타낸다.

영상의 이동 변환 예제

src = cv2.imread('tekapo.bmp')

aff = np.array([1, 0, 200],
               [0, 1, 100]], dtype=np.float32)

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

  • affine 행렬을 다음과 같이 바꾸면 어떻게 될까?
aff = np.array([1, 0, 100],
               [0, 1, 200]], dtype=np.float32)

영상의 이동 변위가 변화하는 모습을 확인할 수 있다.

전단 변환 (Shear transformation)

  • 층 밀림 변환. x축과 y축 방향에 대해 따로 정의.

영상의 전단 변환 예제

src = cv2.imread('tekapo.bmp')

aff = np.array([[1, 0.5, 0],
                [0, 1, 0]], dtype=np.float32)
         
h, w = src.shape[:2]
dst = cv2.warpAffine(src, aff, (w + int(h*0.5), h))

  • 층이 밀리는 정도를 아래와 같이 조정하면 어떻게 될까?
...
aff = np.array([[1, 0.1, 0],
                [0, 1, 0]], dtype=np.float32)
...
dst = cv2.warpAffine(src, aff, (w + int(h*0.1), h))

이를 응용하면 밀리는 정도 뿐만 아니라, y축 방향으로도 밀리는 모습을 관찰할 수 있다.

profile
딥 하게 딥러닝 하는중

0개의 댓글

관련 채용 정보