영상의 이진화란 모든 픽셀을 두가지 즉 흑과 백으로만 표현하는 영상을 말한다.
왼쪽도 흑과 백으로 착각할 수 있지만 저것은 밝기값이 0 ~ 255까지 가지는 이미지이다.
그럼 이진화를 어떻게 할 수 있을까?
단순하게 접근을 하면 픽셀값이 일정값을 넘으면 백, 일정값보다 낮으면 흑으로 하는 임계값을 설정해주는 방법이다.
opencv로는 한 줄이면 끝이다.
결과
하지만 이것이 과연 좋은 방법일까? 임계값은 어떻게 정해주어야 할까 임계값을 어떻게 주는 지에 따라 결과의 값은 달라질 것이다.
임계값을 자동으로 정해주기 위해 Otsu Algorithm이라는 것이 도입이 된다.
아이디어는 특정 임계값을 기준으로 양쪽의 픽셀 분포가 균일하게 있으면 좋다는 것이다.
그런 임계값을 고르기 위해 양쪽의 분산이 최저가 되는 지점을 찾는 것이다.
아래가 수식적으로 유도한 것이다.
M과 W를 구할 때 점화식처럼 t-1, t를 활용하면 매번 구할 필요없어 속도 향상을 기대할 수 있게된다.
OPENCV에서는 뒤의 옵션을 바꿔주기만 하면 된다.
아까 위의 아인슈타인 이미지로 임계값은 109가 나오게 된다. 127와는 조금 차이가 있다.
육안으로는 크게 차이가 없어보인다
이외에도 adaptive binarization이라고 이미지의 위치마다 다른 밝기를 가져 Otsu 알고리즘이 제대로 동작하지 않는 경우가 있는데 그 때에는 adaptive binarization을 이용하면 좋다.
adaptive와 gaussian이 합쳐진 것 두 개가 있는 것으로 알고있다.
adaptive는 일정 크기의 filter를 정해놓고 그 filter내의 평균이나 가우시안 필터와 곱해져 나온 합을 임계값으로 설정하는 방법이다.(임의 상수를 정해 그 합에서 빼준다.)
적절하게 필터 크기와 상수를 정해주면 값에 따라 결과가 다르게 나온다.
Otsu Algorithm
adaptive binarization (mean)
여기서 사용된 수학은 고등학교 정도의 수학지식 정도지만 이런 아이디어를 접목시킨 거에 감탄이 나왔다. 수학자들은 얼마나 똑똑한 걸까하면서