이미지 변환 (확대/축소)
이미지 변환
이미지 데이터의 개수를 늘리거나 줄여 알고리즘의 연산량을 줄이는 것을 주목적
변환의 종류 : 크기변환, 특정 요소의 위치 변경, 이미지의 회전
- 강체 변환 (Rigid Transformation)
- 유사 변환 (Similarity Transformation)
- 선형 변환 (Linear Transformation)
- 아핀 변환 (Affine Transformation)
- 원근 변환 (Perspective Transformation)
강체변환 = 유클리디언 변환 (Euclidean Transformation) :
변환의 기준점으로부터 크기와 각도가 보존되는 변환. > 평행이동(translation)과 회전(rotation)만 허용
유사변환 : 강체변환에 등방성(Isotropic) 크기변환(Scaling)까지 허용된 변환.
선형변환 : 벡터 공간에서의 이동 > 선형성을 갖는 변환. 이방성을 가질수도 있음.
아핀 변환 : 선형변환 + 이동변환
원근 변환 : 아핀변환 - 수평성
확대 & 축소
이미지 확대와 축소 : 이미지 피라미드를 활용해 이미지의 크기를 원하는 단계까지 샘플링하는 작업
이미지 피라미드 : 입력 이미지의 크기를 단계적으로 변화시켜 원하는 단계에 도달할 때까지 진행하는 분석 작업 > 가우시안 피라미드, 라플라시안 피라미드
이미지 확대(Pyramid Up)
# 이미지 확대 함수
dst = cv2.pyrUp(
src,
dstsize=None,
borderType=None
)
입력 이미지(src)의 행과 열을 2배로 키워 이미지를 확대하는 변환 함수. 이미지를 흐림효과 후 업샘플링 적용. 입력 이미지에 새로운 열과 행을 추가해 짝수 행과 열을 만들고 0의 값 할당. 이후 색상이 결정되지 않는 픽셀은 근사값으로 채워 가우시안 필터로 컨벌루션 진행
새롭게 삽입된 요소 모두 픽셀값이 0이며, 각 차원의 방향으로 2배 피라미드 업샘플링 수행했기 때문에 평균 밝기로 복원하기 위해 4로 정규화된 커널 사용.
이미지 축소(Pyramid Down)
# 이미지 축소 함수
dst = cv2.pyrDown(
src,
dstsize=None,
borderType=None
)
입력 이미지(src)의 행과 열을 2배로 줄여 이미지를 축소하는 변환 함수. 이미지를 흐림효과 후 다운샘플링 적용. 이미지를 2배 작게 만들어야 하므로 홀수 크기의 이미지에는 +1을 해서 짝수 크기의 이미지로 변경. Gi 레이어를 컨벌루션하고 모든 짝수행과 열을 제거해 Gi+1을 생성. 생성된레이어는 src의 ¼ 이미지를 가짐. (형렬이기 때문에 크기는 2배이나 면적은 4배)
# 이미지 축소
import cv2
src = cv2.imread("Chapter6/Example-06-02-Py/ferris-wheel.jpg")
dst = src.copy()
for i in range(3):
dst = cv2.pyrDown(dst)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
반복문을 활용해 다운샘플링을 3회 적용해서 출력 이미지(dst) 크기를 따로 지정하지 않아도 ⅛ 크기로 변환. 입력 이미지(src)와 출력 이미지(src) 매개 변수에 동일한 변수를 구성한다면 간단하게 변환 가능. dst 변수에 원본 이미지를 복사해 메모리를 미리 할당한다면 반복문을 활용해 연속적으로 적용 가능.