기하학적 변환 (Geometric Transform)
이미지를 인위적으로 확대, 축소, 위치 변경, 회전, 왜곡 등 이미지의 형태 변환
> 이미지를 구성하는 픽셀 좌표값의 위치를 재배치하는 과정
이차원 공간에서의 기하학적 변환
- 아핀 변환 (Affine Transformation)
- 원근 변환 (Perspective Transformation)
아핀 변환
행렬의 기본 형은 3x3 행렬이지만 세번째 행의 값은 0, 0, 1의 값을 지님. 좌변의 행렬과 우변의 행렬의 세 번째 행의 값은항상 같은 값을 지니게 되어 OpenCV 에서는 2x3 행렬로 표현.(불필요한 연산을 줄이기 위해)
아핀 변환은 임의의 세 개의 점을 매핑해서 기하학적 변환을 수행. 임의 위치인 A,B,C의 픽셀 좌표를 A’, B’, C’로 이동한 좌표를 아핀 맵 행렬로 계산. > 여섯개의 미지수를 구하기 위해 세 개의 픽셀 좌표를 재매핑 해서 아핀 맵 행렬로 계산.
# 아핀 맵 행렬 생성 함수
M = cv2.getAffineTransform(
src,
dst
)
변환 전 세 개의 픽셀 좌표(src)와 변환 후 세 개의 픽셀 좌표(dst)를 이용해 아핀 맵 행렬(M)을 생성. python에서는 모든 배열과 행렬이 Numpy 배열로 통일돼 있으므로 ndarray 클래스를 사용하며, 정밀도(dtype)는 float32 지정
# 아핀 변환 함수
dst = cv2.warpAffine(
src,
M,
dsize,
dst = None,
flags = None,
borderMode = None,
borderValue = None
)
입력 이미지(src)에 아핀 맵 행렬(M)을 적용하고 출력 이미지 크기(dsize)로 변형해서 출력 이미지 (dst) 반환. 이미지를 변형하기 때문에 보간법(flags)과 테두리 외삽법(borderMode) 설정. 테두리 색상(borderValue)은 변환 후에 발생하는 공백의 공간에 할당할 색상.
원근 변환
3x3 행렬이며 아핀변환과 달리 뒤틀림이나 원근 왜곡을 표현해야 하므로 수평성이 유지되지 않음. 원근 변환에서는 8개의 미지수를 필요로 함. 임의의 위치인 A,B,C,D의 픽셀 좌표를 A’,B’,C’,D’로 이동한 좌표를 원근 맵 행렬로 계산해서 변환 진행.
# 원근 맵 행렬 생성 함수
M = cv2.getPerspectiveTransform(
src,
dst
)
변환 전 4개의 픽셀 좌표(src)와 변환 후 4개의 픽셀 좌표(dst)를 활용해 원근 맵 행렬(M) 생성.
# 원근 변환 함수
dst = cv2.warpPerspective(
src,
M,
dsize,
dst = None,
flags = None,
borderMode = None,
borderValue = None
)
입력 이미지(src)에 아핀 맵 행렬(M)을 적용하고 출력 이미지 크기(dsize)로 변형해서 출력 이미지 (dst) 반환. 이미지를 변형하기 때문에 보간법(flags)과 테두리 외삽법(borderMode) 설정. 테두리 색상(borderValue)은 변환 후에 발생하는 공백의 공간에 할당할 색상.
'영상처리 > OpenCV' 카테고리의 다른 글
모폴로지 연산 (0) | 2022.06.08 |
---|---|
모폴로지 변환 (0) | 2022.06.08 |
이미지 변환 (대칭/회전) (0) | 2022.06.08 |
이미지 크기 조절 (0) | 2022.06.08 |
이미지 변환 (확대/축소) (0) | 2022.06.08 |