-
opencv의 interpolation option, INTER_LINEAR / INTER_AREA 차이영상처리 2024. 2. 26. 20:18728x90
image를 해상도 변환하는 과정에서 interpolation option을 설정해줄 수 있다.
그 중, INTER_LINEAR 옵션과 INTER_AREA 옵션이 의미가 비슷하여 헷갈리기 쉽다.
import cv2 img=cv2.imread('inputs/20240222_190925.jpg') img_interlinear=cv2.resize(img,(300,400),interpolation=cv2.INTER_LINEAR) img_interarea=cv2.resize(img,(300,400),interpolation=cv2.INTER_AREA) cv2.imwrite('interlinear.jpg',img_interlinear) cv2.imwrite('interarea.jpg',img_interarea) cv2.imshow('interlinear',img_interlinear) cv2.imshow('interarea',img_interarea) cv2.waitKey() cv2.destroyAllWindows()
위와 같은 코드로 결과를 확인해보면 아래와 같이 다른 결과를 얻게 된다.
왼쪽은 INTER_LINEAR 방식, 오른쪽은 INTER_AREA 방식이다. INTER AREA 방식이 blur 하게 나오며, INTER LINEAR는 sharp하지만 edge가 깨진다.
확대해보면 아래와 같이 확연히 보인다.
왼쪽은 INTER_LINEAR 방식, 오른쪽은 INTER_AREA 방식이다. INTER_LINEAR쪽은 선이 끊어지지만, INTER_AREA는 선이 이어지면서 blur가 발생한다. 두 방식의 차이는 아래와 같다.
왼쪽은 INTER_AREA 방식의 pixel 참조, 오른쪽은 INTER_LINEAR 방식의 pixel 참조이다. 위와 같이 최종 image가 1/4크기로 resize될 때, INTER_AREA방식은 주변 16 pixel의 평균을 취하지만, INTER_LINEAR방식은 주변 4 pixel만 참조하게 된다. INTER_LINEAR 방식의 경우 정보가 버려지는 픽셀들이 발생하게 된다.
CIS의 binning과 같은 효과를 얻기 위해서는 interpolation option을 INTER_AREA로 주어야한다.
728x90'영상처리' 카테고리의 다른 글
Android에서 Camera2 API를 활용한 RAW 이미지 캡처 (0) 2025.02.24