영상의 기하학적 변환 ( geometric transformation ) 이란?
영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업
픽셀의 좌표가 변환되는 형태
Image registration, removal of geometric distortion, ect.
우리는 위의 affine 과 projective ( perspective ) 의 기하학적 변환만 알아본다.
일단 이동변환 ( Translation transformation )을 먼저 알아본다.
- 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환
- x축과 y축 방향으로의 이동 변위를 지정
아래와같이 표현할 수 있다.
그리고 위와같은 2행3렬의 행렬을 어파인 변환 행렬을 numpy ndarray 로 만들면된다.
- cv2.warpAffine ( src, M, dsize, dst, flags, borderMode, borderValue )
M : 2x3 어파인 변환 행렬. 실수형
dsize : (w,h) 튜플. ( 0,0 )이면 src와 같은 크기로 설정
flags : 보간법 , 기본값은 cv2.INTER_LINEAR
borderMode : 변환을 하게될 경우에는 새롭게 생겨나는 공간이 있는데 그런 공간들을
어떤 색깔로 채울것인지 결정
borderValue : cv2.BORDER_CONSTANT 일 때 사용할 상수 값. 기본값은 0
위와같이 M 행렬을 만들어 준 뒤 ( 픽셀 X과 Y의 이동 거리 ) cv2.warpAffine 함수에 적용시켜주면
아래와같은 영상을 얻을 수 있다.
- 전단 변환 ( Shear transformation )
층 밀림 변환. x축과 y축 방향에 대해 따로 정의
즉, x와 y가 같은 벡터만큼 움직이지 않고 서로 다른 벡터값만큼 이동하는 변환
위와같은 수식을 보면
x' = x + my 인것을 보아 y값이 커질수록 x' ( x의 변환 결과값 )이 커지는 것을 볼 수 있고
y' = mx + x 인것을 보다 x값이 커질수록 y' ( y의 변환 결과값 )이 커지는 것을 볼 수 있다.
* 여기서 m의 상수가 뜻하는 것은 x 또는 y 의 좌표를 옮기고싶은 크기를 나타낸다.
그래서 실제로 코딩으로 구현을 해보면
위와같이 표현할 수 있는데 이대로 실행하게되면 결과가 짤리는 것을 볼 수 있다.
따라서
출력 영상 크기를 옮긴만큼의 m 값에 현재 x가 옮겨졌으니 Width 부분에 my를 더해주어 자연스러운 결과값을 받을 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 기하학적 변환 _ 이미지 피라미드 (0) | 2022.05.24 |
---|---|
[Open CV] 기하학적 변환 _ 영상의 확대와 축소 (0) | 2022.05.23 |
[Open CV] 필터링 _ 실전 코딩 ( 카툰 필터 카메라 ) (0) | 2022.05.21 |
[Open CV] 필터링 _ 잡음제거 _ 양방향 필터 (0) | 2022.05.20 |
[Open CV] 필터링 _ 샤프닝 _ 언샤프 마스크 필터 (0) | 2022.05.19 |