검색결과 리스트
글
영상 이진화(binarization, thresholding)
영상처리에서의 이진화를 주제로 몇몇 알고있는 내용들을 정리해 봅니다.
영상처리에서 이진화(binarization)는 매우 간단한 연산중의 하나이지만 단순한 만큼 쉽지 않은 문제이기도 합니다.
알다시피 이진화 문제는 two class classification 문제로서 0 아니면 1, 흑 아니면 백, 모 아니면 도(?) 와 같이 대상을 일괄적으로 둘 중 하나의 값으로 분류해 버리는 것입니다.
1. 전역 고정 이진화(Global fixed thresholding)
영상처리에서 이진화는 어떤 주어진 임계값(threshold)보다 밝은 픽셀들은 모두 흰색으로, 그렇지 않은 픽셀들은 모두 검은색으로 바꾸는 것을 지칭한다.
아래 예는 이진화 문제 중 가장 단순한 형태로서 균일한 밝기를 갖는 배경과 물체에 약간의 노이즈를 섞어서 생성한 영상이다.
<그림 1>
그림 1에서 (a)는 원본 영상, (b)는 픽셀들의 밝기값 히스토그램, (c)는 이진화 결과영상이다. 히스토그램에서 볼 수 있듯이 배경영역은 약 100 정도의 밝기값을, 물체는 150 근처의 밝기값 분포를 갖는다. 따라서 임계값(threshold)을 T = 125 정도로 주고 이진화를 했을 때 (c)처럼 가장 좋은 이진화 결과를 기대할 수 있다.
여기서 문제는 임계값 T를 어떻게 자동으로 결정할 것인가이다.
이론적으로 봤을 때 이진화에 따른 분류(classification) 에러를 최소화시켜주는 임계값을 optimal threshold라고 부른다. 즉, 어떤 T값 하나를 고정했을 때 T보다 어두운 물체 픽셀의 비율과 T보다 밝은 배경픽셀의 비율의 합을 최소화해주는 T를 optimal threshold라고 부른다 (물체가 배경보다 밝다고 했을 경우). 하지만 이것은 어디까지는 이론적인 목표, 지향점을 나타낼 뿐 실제 임계값을 구하는 방법을 제시하는 것은 아니다. T가 optimal인지 여부를 알려면 어떤 픽셀이 물체이고 배경인지를 사전에 알고 있어야 하기 때문이다. 하지만 이걸 미리 알고 있었다면 이미 최적의 이진화가 끝난 상태이므로 T를 구할 필요가 없다.
실제 입력 영상의 밝기 분포를 보고 임계값을 찾아주는 가장 실질적인 방법으로는 Otzu's method가 있다 (N. Otsu, “A threshold selection method from gray-level histograms,” IEEE Trans. Syst., Man, Cybern., vol. SMC-9, pp. 62-66, 1979).
Otsu의 이진화 방법은 임계값 T를 기준으로 영상 픽셀들을 두 클래스로 분류했을 때 두 클래스간의 intra-class variance를 최소화하거나 또는 inter-class variance를 최대화하는 T를 찾는 이진화 방법이다.
입력 영상에서 임계값 T보다 어두운 픽셀들의 비율을 α, 밝기 평균을 μ1, 분산을 σ12, T보다 밝은 픽셀들의 비율을 β, 밝기 평균을 μ2, 분산을 σ22라 했을 때 (α+β=1), intra-class 분산과 inter-class 분산은 각각 다음과 같이 계산된다.
intra-class variance = ασ12+βσ22 --- (1)
inter-class variance = αβ(μ1-μ2)2 --- (2)
식 (1)을 최소화시키는 것은 식 (2)를 최대화시키는 것과 동일하며 둘 중 어느 기준을 사용해도 무방하지만 계산상으로는 식 (2)를 최대화시키는 것이 효율적이다. 즉, Otsu의 이진화 알고리즘은 임계값 T를 0 부터 255까지 단계적으로 변화시키면서 식 (2)를 계산하고 식 (2)가 최대가 되는 T 값을 찾아서 영상을 이진화하는 방법이다.
2. 지역 가변 이진화 I (Locally adaptive thresholding)
문제에 따라서는 아래 예와 같이 하나의 임계값(threshold) 만으로는 어떤 값을 주어도 정확한 이진화가 힘든 경우가 있다.
<그림 2>
그림 2(a)는 흰 종이에 낙서를 한 후에 웹캠으로 촬영한 영상인데 조명 변화 등으로 인해 영상 전체적으로 밝기 변화가 심한 형태로서 그림 2(b) 히스토그램에서 볼 수 있듯이 배경과 물체의 밝기 분포가 서로 상당부분 겹쳐 있는 경우이다. 이 경우에는 어떤 임계값을 사용해도 물체와 배경이 명확하게 구분되지 않는다.
이러한 경우에는 하나의 고정된 threshold 값으로는 이진화가 불가능하며 픽셀 위치마다 서로 다른 threshold를 사용하는 가변 thresholding 기법이 필요하다.
<그림 3>
그림 3은 배경의 밝기 변화를 일차 평면(ax+by+c=0)을 이용하여 근사하여 제거한 결과 이미지를 보여준다(평면근사 방법에 대해서는 최소자승법 이해와 다양한 활용예 (Least Square Method) 글 참조). 배경의 밝기 변화가 제거된 영상은 히스토그램을 그려보면 아래 그림과 같이 배경 영역과 낙서 영역의 밝기값이 잘 분리가 되어서 깨끗한 이진 결과 영상을 얻을 수 있다.
<그림 4>
위의 이진화 과정은 얼핏 global thresholding처럼 보이지만 사실은 원래 입력 영상 관점에서 봤을 때 local adaptive thresholding이 적용된 것이다. 위 과정을 다시 살펴보면 배경의 밝기 변화가 심한 영상에서 먼저 밝기 변화를 제거한 후 밝기 보정된 영상에 대해 global thresholding을 적용한 것이다. 그러나, 이를 원래 영상 관점에서 보면 배경의 밝기를 근사한 평면에 상수값을 더한 것을 threshold 평면으로 볼 수 있고 이 threshold 평면에 대해 직접 이진화를 수행한 것으로 해석할 수 있다.
3. 지역 가변 이진화 II (Locally adaptive thresholding)
사실 위에 설명한 방법은 이진화에 따른 어려움, 특성을 설명하기 위한 하나의 예이고 실용적인 관점에서 간단하면서도 효과적인 방법은 픽셀 주변의 local 영역의 밝기 평균을 임계값으로 사용하는 방법이다 (비전 라이브러리인 OpenCV에 adaptiveThreshold라는 이름의 함수로 제공)
이 방법은 영상 픽셀마다 서로 다른 threshold를 사용하는데, 그 threshold 값은 그 픽셀을 중심으로 한 n x n 주변 영역의 밝기 평균에 일정한 상수를 빼서 결정한다.
주변 영역의 크기를 어떻게 잡느냐와 상수 C를 어떻게 주느냐(+, - 모두 가능)에 따라서 결과가 달라질 수 있으며 문제에 따라서 적절히 값을 조정하면 좋은 이진화 결과를 얻을 수 있다.
아래 그림은 그림 2의 원본 이미지에 local 밝기 평균을 임계값으로 사용하여 이진화한 결과를 보여준다 (n=73, C=10을 사용).
<그림 5>
4. Hysteresis(히스테레시스) thresholding
이진화 문제는 결국 어떤 값이 있을 때 이 값이 A 클래스인지 B 클래스인지 둘 중 하나로 분류하는 것인데 그 경계가 모호한 경우가 많다. 예를 들어 영상에서 어떤 픽셀값이 p1 = 79, p2 = 81이고 임계값(threshold)이 T = 80이라고 하자. 이 경우 p1과 p2는 사실 큰 값의 차이가 없음에도 불구하고 이진화를 하게 되면 전혀 다른 클래스로 분류되게 된다. 이와 같이 경계에 걸친 모호한 값들에 대해서는 하나의 엄격한 기준을 적용하는 것 보다는 이진화 오류를 최소화하기 위해 자신의 값 뿐만 아니라 주변의(공간적 또는 시간적으로) 값을 같이 참조하는 것이 효과적이다.
Hysteresis thresholding은 주변의 분류 결과에 따라서 자신의 분류 결과가 달라질 수 있는 thresholding 기법으로서 Canny edge detector에 사용된 이진화 기법이 가장 대표적인 예이다. Hysteresis(히스테레시스)라는 용어는 위키피디아에는 "Hysteresis is the dependence of a system not only on its current environment but also on its past environment"로 설명되어 있다. 즉, hysteresis는 어떤 시스템의 상태가 자신의 현재 값 뿐만 아니라 과거 또는 주변의 값에 의존하는 현상을 지칭한다.
아래 그림은 edge 검출기 중에서 가장 성능이 좋은 것으로 알려진 Canny edge 검출기를 이용한 edge 검출 예이다(J. Canny, ”A computational approach to edge detection,” IEEE Trans. on PAMI, 8(6):679–698, 1986). 영상에서 에지(edge)를 검출하는 문제도 결국 어떤 픽셀이 edge 픽셀인지 아닌지를 결정하는 이진화 문제로 볼 수 있다.
<그림 6>
Canny edge 검출기에서는 입력 영상에 대해 먼저 Sobel 필터를 적용하여 각 픽셀에 대한 edginess를 계산한 후 다음과 같은 hysteresis thresholding 과정을 거쳐 최종적인 edge 픽셀 여부를 결정한다.
- high threshold와 low threshold의 두 개의 threshold 값이 존재하며 high threshold 이상의 edginess를 갖는 픽셀들은 무조건 edge 픽셀로 분류한다.
- low와 high 사이에 있으면서 이미 edge로 분류된 픽셀들과 연결되어(인접해) 있으면 edge 픽셀로 분류한다.
- 나머지 픽셀들(low threshold 이하이거나 high threshold 이하이면서 edge 픽셀과 연결되어 있지 않은 경우)은 모두 non edge 픽셀로 분류한다.
즉, hysteresis thresholding의 요점은 판단이 확실한 경우(low threshold 이하 또는 high threshold 이상)에는 그대로 이진화를 하되, 그 판단이 불확실한 경우에는 주변 상황을 보고 결정을 하는 것이다.
Hysteresis thresholding 기법은 edge 검출 문제뿐만 아니라 영상 이진화, 피부색 검출 등 모든 이진화 문제에 적용 가능하다. 예를 들어, 영상에서의 피부색 검출의 경우를 보면 먼저 확률이 매우 높은(high threshold) 색들을 피부색으로 분류한 후에 이들을 중심으로 이들과 인접하면서 일정 확률(low threshold) 이상인 픽셀들을 피부색 픽셀로 확장해 나가는 방식이 가능할 것이다.
5. 시간축이 고려된 이진화 문제
마지막으로 시간에 따라 어떤 대상의 분류 상태가 변할 수 있는 경우의 이진화 문제를 살펴보도록 하자.
우리가 어떤 대상에 대해 판단을 할 때 어느 한 순간의 한 값만을 보고 판단을 하는 것은 사실 오류 가능성이 높은 위험한 방법이다. 하지만 방법이 없다보니 어떤 임계값을 미리 정해놓고 관측된 값이 임계값보다 낮으면 A, 높으면 B 이런식으로 판단을 하게 된다. 그런데, 이 대상을 계속 관찰하다 보면 관측된 값이 어떤 때는 임계값보다 높고 또 어떤 때는 임계값보다 낮을 수도 있을 것이다. 이럴 때마다 그 분류가 계속 바뀐다면 결과적으로 매우 불안정한 시스템이 될 것이다.
이런 경우에 생각할 수 있는 한 방법은 high와 low의 두 개의 임계값을 정해놓고 어떤 대상의 분류가 바뀌는 데에는 보다 엄격한 기준을 적용하는 것이다. 만일 어떤 대상의 관측값이 임계값 이하여서 A 클래스로 분류되었다고 하자. 이후 대상의 관측값이 high threshold 이하인 경우에는 계속 A 클래스로 분류하되, high threshold를 넘어서면 B 클래스로 분류를 바꾼다. 그리고 일단 B가 된 이후에는 관측값이 low threshold보다 낮게 나타난 경우에만 A로 분류를 변경하는 방식이다. 즉, 분류의 경계를 넘나들 때에는 그 방향에 따라서 서로 다른 문턱값을 적용하는 방식이다.
예를 들어보면 처음에 구름이 껴 있는 하늘을 보고 오늘은 그래도 날씨가 좋은 편이다라고 생각했는데 점점 먹구름이 끼는 것이다. 그래도 나는 오늘 날씨가 좋다라는 생각을 바꾸지 않았지만 결국 천둥과 소나기를 접하고 나서야 오늘은 날씨가 나쁘다라고 생각을 바꾼다. 그러다 점점 하늘이 개어서 날씨가 좋아졌지만 쉽사리 마음을 되돌리지 못하고 청명한 하늘과 시원한 솔바람을 맞기 전까지는 여전히 날씨가 나쁘다고 생각하는 식이다.
어찌보면 앞서 설명한 hysteresis 방법과 상당히 유사한 방식으로서 이 기법에 대해서 따로 명칭이 있는지는 잘 모르겠다 (어쩌면 이 기법 또한 hysteresis thresholding 방법중 하나인지도 모른다). 그 응용은 다양한 응용이 가능할 것이며 일례로 열화상 카메라로 감지한 이동체의 움직임을 보고 사람인지 아닌지를 판단하는 문제, 추적하는 대상의 속도나 궤적을 보고 대상을 분류하는 문제 등의 응용이 가능할 것이다.
☞ 예전부터 올리려고 생각했던 글을 이제야 올립니다. 글에서는 주로 영상처리 관점에서 내용을 다루었지만 기본 개념은 영상뿐만 아니라 일반적인 이진화 문제에도 그대로 적용될 수 있습니다. 최적의 해는 문제마다 다를 수 있지만 여러 방법들을 알고 있으면 최적의 해를 찾는데 도움이 되리라 생각합니다.
by 다크 프로그래머
'영상처리' 카테고리의 다른 글
영상 feature 비교 (SIFT, HOG, Haar, Ferns, LBP, MCT) (92) | 2014.01.09 |
---|---|
타겟 추적을 위한 카메라의 팬,틸트 제어 (45) | 2013.12.10 |
OpenCV Haar/cascade training 무한루프 방지 (11) | 2013.12.02 |