ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • opencv의 interpolation option, INTER_LINEAR / INTER_AREA 차이
    영상처리 2024. 2. 26. 20:18
    728x90

    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
Designed by Tistory.