A Threshold Selection Method from Gray-Level Histograms
[cite]10.1109/TSMC.1979.4310076[/cite]
1. Introduction
Gray level로 이루어진 이미지에서 적당한 값을 선택해서 배경과 물체로 나누는 일은 너무도 일반적인 일이면서도 중요한 일입니다. 이상적인 경우, 이미지의 히스토그램을 보았을 때 양쪽으로 값들이 몰려있고 그 사이에 깊은 골짜기가 있다면 그것이 우리가 원하는 값이겠지만, 실제 우리가 다루는 이미지는 그렇게 호락호락하지 압습니다. 오히려 모든 영역에서 골고루 넓게 퍼져 있는 경우가 많습니다. 이런 경우 우리는 어떤 방법으로 그 경계를 선택할 수 있을까요? 이제 평가 방법을 한가지 정하여 그것을 기준으로 경계 값을 정할 것입니다. Otsu의 방법이라 불리는 알고리즘입니다.
2. Formulation
일단 히스토그램을 계산한 뒤라고 가정한 상태에서 출발할 것입니다. 픽셀 값 $i $의 히스토그램은 $ p_i = n_i / N$ 입니다.
픽셀 값의 범위가 [1, L]이라고 하였을 때 경계값 $ k $를 기준으로 두 클래스 $ C_0, C_1 $로 나누었다고 생각해봅시다. 그렇다면 이미지에서의 각 클래스의 픽셀 값이 나올 확률를,
$$w_0 = Pr(C_0) = \sum^{k}_{i=1}p_i = w(k)$$
$$w_1 = Pr(C_1) = \sum^{L}_{i=k+1}p_i = 1 - w(k)$$
으로,
그리고 각 클래스의 평균 값을,
$$\mu_0 = \sum^k_{i=1} i p_i / w_0 = \mu(k)/w(k)$$
$$\mu_1 = \sum^L_{i=k+1} i p_i / w_1 = \frac{\mu_T - mu(k)}{1-w(k)}$$
으로 계산할 수 있습니다. $ \mu_T $는 이미지 전체 평균 값입니다.
또한 각 클래스의 분산은,
$$\sigma^2_0 = \sum^k_{i=1}(i-\mu_0)^2p_i / w_0$$
$$\sigma^2_1 = \sum^L_{i=k+1}(i-\mu_1)^2p_i / w_1$$
으로 계산됩니다.
이미지를 두 개의 클래스, 즉 배경과 물체로 나누나는 값을 정한다고 한다면, 어떠한 값이 두 부분을 가장 잘 나눠주는지를 평가하여 가장 높은 녀석을 선택하면 될 것입니다. 그 기준으로 클래스 내부 분산, 클래스간 분산, 전체 픽셀 값의 분산을 이용한 식입니다.
$$\lambda = \sigma^2_B / \sigma^2_W$$
$$\kappa = \sigma^2_T / \sigma^2_W$$
$$\eta = \sigma^2_B / \sigma^2_T$$
여기서 클래스 내부 분산, $ \sigma^2_W = w_0 \sigma^2_0 + w_1\sigma^2_1 $, 클래스 간 분산 $\sigma^2_B = w_0 ( \mu_0 - \mu_T)^2 + w_1 (\mu_1 - \mu_T)^2$, 전체 픽셀 분산 $\sigma^2_T = \sum^L_{i=1}(i - \mu_T)^2p_i $ 입니다.
이제 위의 세 기준 중 하나를 만족시키는 $ k $ 값을 찾으면 배경과 물체를 가장 잘 나눠주는 값이 될 것입니다. 이리저리 풀어보면 가장 아래의 $ \eta $가 가장 계산이 단순하므로 이를 사용하여봅시다. 분모의 $ \sigma^2_T $는 이미지가 주어지면 상수이므로 계산에 영향이 없습니다. 분자만을 놓고 보자면,
$$\sigma^2_B(k) = \frac{[\mu_T w(k) - \mu(k)]^2}{w(k)[1-w(k)]}$$
이므로, 최적의 k* 값은,
$$\sigma^2_B (k*) = \max_{1 \leq k \leq L} \sigma^2_B(k)$$
인 값을 선택하면 됩니다.
이렇게 계산된 값 $ \eta(k) $ 는 클래스간 분리도를 측정하는 값으로 사용할 수 있습니다. 또한 픽셀 값 공간의 affine transform에 영향을 받지 않습니다.
같은 방법으로 3개 이상의 클래스 문제에 대하여도 적용할 수는 있지만, $\sigma^2_B$를 계산하는 부분과 이를 최대화시키는 문제를 풀어내기가 복잡해질 것입니다.