Section 1. 이동 변환과 전단 변환
1. 기하학적 변환 (Geometrice Transformation)
영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업
2. 이동 변환 (Translation Transformation)
- 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환
- x축과 y축 방향으로의 이동 변위를 지정
- 어파인 변환 행렬 - 영상이 어떻게 변환될 지에 대한 정보를 담고 있는 행렬
3. 영상의 어파인 변환 함수
- warpAffine() 함수
- warpAffine() 함수 하나로 이동, 전단, 확대, 축소, 회전 변환 모두 수행
- src - 입력 영상
- M - 2x3 어파인 변환 행렬 또는 실수형
- desize - 결과 영상 크기 (w,h) 튜플 (0,0)이면 src와 같은 크기로 설정
- dst - 출력 영상
- flags - 보간법, 기본 값은 cv2.INTER_LINEAR
- borderMode - 가장자리 픽셀 확장 방식, 기본 값은 cv2.BORDER_CONSTRANT
- borderValue - cv2.BORDER_CONSTRANT 일 때 사용할 상수 값, 기본 값은 0
4. 이동 변환 코드 및 결과
5. 전단 변환 (Shear transformation)
- 층 밀림 변환, x축과 y축 방향에 대해 따로 정의
6. 전단 변환 코드 및 결과
dst = cv2.warpAffine(src, aff, (w + int(h * 0.5), h)) # 전단 변환 시 짤리는 부분까지 보기위한 코드
# 전단 변환 비율 0.5를 세로크기에 곱한 결과 값을 가로크기에 더함
Section 2. 크기 변환
1. 크기 변환 (Scale transformation)
- 영상의 크기를 원본 영상보다 크게 (확대) 또는 작게 (축소) 만드는 변환
- x축과 y축 방향으로의 스케일 비율(scale factor) 를 지정
2. 크기 변환 함수
- warpAffine 함수가 아닌 resize() 함수
- src - 입력 영상
- dsize - 결과 영상 크기.(w,h) 튜플 (0,0)이면 fx와 fy 값을 이용하여 결정
- dst - 출력 영상
- fx,fy - x와 y방향 스케일 비율, (dsize 값이 0일 때 유효)
- interpolation - 보간법 지정, 기본값은 cv2.INTER_LINEAR
3. 크기 변환 코드 및 결과
- 480x320 크기의 rose.bmp 영상파일을 1920x1280 크기의 영상파일로 확대 변환
- LINEAR 방식과 LANCZOS4 방식을 비교
Section 3. 이미지 피라미드
1. 이미지 피라미드 (Image pyramid)
- 하나의 영상에 대해 다양한 해상도의 영상 세트를 구성한 것
- 100x100 크기의 고양이를 인식한다고 가정할 때 입력 영상 파일은 다양한 크기로 고양이를 표현할 수도 있으므로 여러 해상도 구간에서 고양이를 인식할 수 있도록 이미지 피라미드 생성함
Section 4. 회전 변환
1. 회전 변환 (Roation Transformation)
- 영상을 특정 각도만큼 회전시키는 변환 (반시계 방향)
2. 회전 변환 코드 및 결과
- 하지만 영상 파일의 중앙을 기준으로 회전하는 것이 아닌 왼쪽 상단 (0,0)을 기준으로 회전함
3. 회전 변환 행렬 구하는 함수
- getRotationMatrix2D() 함수
- 변환하는 함수가 아닌 어떻게 변환 시킬 지에 대한 정보 (어파인 변환 행렬)를 반환하는 함수
- center - 회전 중심 좌표, (x, y) 튜플
- angle - (반시계 방향) 회전 각도(degree), 음수는 시계 방향
- scale - 추가적인 확대 비율
- retval - 2x3 어파인 변환 행렬 또는 실수형
4. 영상 파일 중심 회전 변환 코드 및 결과
- getRotationMatrix2D() 함수의 scale 인자 값에 0.5를 지정하여 0.5배 축소
cp = (src.shape[1] / 2, src.shape[0] / 2) # 영상 파일의 중심 좌표를 구하는 코드
- 아래의 어파인 행렬로 인한 변환 과정