영상처리 기술에서 보간법은 이미지 확대나 회전, 좌표 변환 기술 Affine Transform 등 알고리즘 구현 시 빈번히 사용됩니다. 머신 러닝 Machine Learning 및 딥러닝 Deep Learning 등 특히 CNN 계열에 Coarse Map을 Dense Map으로 Up-Sampling시 활용되는 기술이기도 합니다. 이미지를 두 배로 확대할 때 보간법은 새로운 픽셀 Pixel 값을 그럴듯하게 예측하는 기술로 볼 수 있습니다. 이론적인 부분은 영상처리 기술에서 다루도록 하겠습니다.
기본적인 보간법 세가지는 아래와 같습니다.
1. 최근접 이웃 보간법 Nearest Neighbor Interpolation
- 소수점 좌표에서 가장 가까운 정수 좌표 픽셀 사용, 수행속도가 가장 빠르지만 계단 현상 및 깨짐 현상 발생
2. 양선형 보간법 Bilinear Interpolation
- 주변 4개 픽셀을 사용해 선형 평균을 이용, 최근접 보다 자연스러운 결과를 보이고 일반적으로 많이 활용되는 기술
3. 양큐빅 보간법 Bicubic Interpolation
- 주변 16개 픽셀을 활용하며 앞에 두 기술보다 자연스러우며, Super Resolution 기술들에서 비교 결과로 많이 사용, 고화질 이미지 편집에 사용되는 기술이며 처리속도는 느림
이미지 회전 시 보간법이 사용되는 이유는 회전은 수학적으로 기존 픽셀 좌표를 회전 행렬로 이동시키는 과정입니다. 회전 시 생성되는 좌표는 보통 소수점 좌표가 되며, 새로운 평면에 매칭 시 좌표는 소수점이 아닌 정수이기때문에 빈공간이 생기게 됩니다. 그 빈공간을 채워주기 위해 보간법이 활용됩니다. 예를 들어 좌표 (5, 5)를 30도 회전하면 (5.3, 3.9) 되므로 실제 좌표 매칭을 위해서는 주변 픽셀 (5, 3), (6, 3), (5, 4), (6, 4)를 이용하여 추정해야 합니다.
OpenCV에서 이미지 회전 및 확대 시 보간법을 지정할 수 있습니다. 아래는 파이썬 활용시 CV 상수 입니다. 첫번째 예제는 회전시 파이썬 코드이며, 이전 블로그에서 설명한 “cv2.warpAffine” 함수를 사용합니다. 두번째 예제는 “cv2.resize” 함수를 활용한 보간법 사용 예입니다.
1. 최근접 이웃 보간법 - cv2.INTER_NEAREST
2. 양선형 보간법 - cv2.INTER_LINEAR
3. 양큐빅 보간법 - cv2.INTER_CUBIC
4. Lanczos 보간법 - cv2.INTER_LANCZOS4
# 이미지 회전 예제
import cv2
import numpy as np
# 이미지 로드
img = cv2.imread('lena.jpg')
# 회전 중심, 각도, 스케일
center = (img.shape[1] // 2, img.shape[0] // 2)
angle = 50
scale = 1.0
# 회전 행렬 생성
M = cv2.getRotationMatrix2D(center, angle, scale)
# 양큐빅 보간법 사용예
rotated = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]), flags=cv2.INTER_CUBIC)
# 결과 보기
cv2.imshow('Rotated Image', rotat_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 이미지 확대 예제
img = cv2.imread('lena.jpg')
# 2배 확대, 선형 보간법
resized = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
# 결과 보기
cv2.imshow('Resized Image', resiz_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
'영상처리 도구' 카테고리의 다른 글
OpenCV 적응적 이진화 방법 Adaptive Thresholding (Python, C++) (0) | 2025.05.28 |
---|---|
딥러닝, 컴퓨터 비전, 영상처리 라이브러리 Image Processing Library (0) | 2025.05.18 |
OpenCV 칼라 처리 및 변환 cvtColor (0) | 2023.12.10 |
OpenCV 이미지 산술연산과 논리연산, 혼합 Image Blending (0) | 2023.11.26 |
OpenCV 모폴로지 연산 Morphological Transformations (0) | 2023.11.19 |