영상 이진화 (Binarization, Thresholding)

  • 영상처리에서 이진화(Binarization)는 전체 픽셀을 대상으로 0 또는 1로 할당하는 과정을 말한다.
  • 영상에서 객체 또는 영역을 목적에 맞게 추출/분리하는 것으로, 매우 간단한 연산중의 하나이지만 단순한 만큼 쉽지 않은 문제이기도 하다.

영상 이진화 방법

전역 고정 이진화

  • 영상처리에서 이진화는 어떤 주어진 임계값(threshold)보다 밝은 픽셀들은 모두 흰색으로, 그렇지 않은 픽셀들은 모두 검은색으로 바꾸는 것을 지칭한다.

  • 위 그림의 사진 (a)의 히스토그램을 (b)처럼 나타 냈을 때, 배경영역은 약 100 정도의 밝기 값을, 물체는 150 근처의 밝기값 분포를 갖는다.
  • 따라서, 임계값(threshold)를 125 정도로 설정하여 이진화하면 그림 (c)와 같은 결과를 얻을 수 있다.
  • 이처럼 영상에 따라, 목적에 맞는 최적의 임계값을 찾아 설정하는 것이 목표이다.
  • 회색조(Grayscale) 이미지에서 아래와 같이 OpenCV 함수를 이용해 이진화 할 수 있다.
src_img = cv2.imread("original_img.jpg", CV.IMREAD_GRAYSCALE)
 
T = 125
dst_img = cv2.threshold(src, T, 255, cv2.THRESH_BINARY)

오츠 알고리즘 (Otzu’s method)

  • A threshold selection method from gray-level histograms
  • 오츠 이진화 방법은 입력 영상의 밝기 분포에 따른 최적의 임계값을 찾아주는 방법으로, 임계값 T를 기준으로 영상 픽셀들을 두 클래스로 분류했을 때 두 클래스간의 intra-class variance를 최소화하거나 또는 inter-class variance를 최대화하는 T를 찾는 이진화 방법이다.
  • 임계값 T보다 어두운 픽셀들의 비율을 , 밝기 평균을 , 분산을 라 하고, 임계값 T보다 밝은 픽셀들의 비율을 , 밝기 평균을 , 분산을 라 했을 때, intra-class 분산과 inter-class 분산은 각각 다음과 같이 계산된다.
  • 식 (1)을 최소화시키는 것은 식 (2)를 최대화시키는 것과 동일하며, 둘 중 어느 기준을 사용해도 무방하지만 계산상으로는 식 (2)를 최대화시키는 것이 효율적이다.
  • 즉, 오츠 이진화 방법은 임계값 T를 0부터 255까지 단계적으로 변화시키면서 식 (2)가 최대가 되는 T값을 찾아서 영상을 이진화 하는 방법이다.
otsu_value, dst_thresh = cv2.threshold(src_img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)

지역 적응 이진화

  • 아래 그림처럼, 하나의 임계값만으로는 목적에 맞는 정확한 이진화가 어려운 경우가 많다.
  • 이러한 경우 하나의 고정된 임계값으로는 이진화가 불가능하며 픽셀 위치마다 서로 다른 임계값을 사용하는 가변적(adaptive) 이진화 기법이 필요하다.

배경 밝기 이용

  • 아래는 다크프로그래머에서 설명하는 최소자승법 기반 밝기 변화를 1차 평면식을 이용하여 근사한 것을 이용해 배경의 밝기 변화를 제거하고, 이진화한 영상이다.

def fit_plane_least_squares(image):
    h, w = image.shape
    ys, xs = np.mgrid[0:h, 0:w]
    
    X = np.column_stack((xs.ravel(), ys.ravel(), np.ones(h * w)))
    I = image.ravel()
    
    beta, _, _, _ = np.linalg.lstsq(X, I, rcond=None)
    a, b, c = beta
    return a, b, c

지역 밝기 정보 이용

  • 대상 픽셀 주변의 local 영역의 밝기 평균을 임계값으로 사용하는 방법으로, OpenCV에서 adaptiveThreshold 함수의 기본 기능 이다.
  • 픽셀마다 서로 다른 임계값을 사용하는데, 임계값은 대상 픽셀을 중심으로 반경 영역의 밝기 평균에 일정한 상수를 빼서 결정한다.
  • 따라서, 주변 영역 크기

참고