Program/OPEN_CV

[Open CV] 이진 영상 처리 _ 모폴로지 _ 자동이진화 ( OTSU )

사막여유 2022. 6. 5. 12:23
728x90

 

임계값 자동 결정 방법

 - 영상의 히스토그램이 bimodal ( 쌍봉분포 ) 이고, 전경 & 배경 픽셀 분포가 비슷하면
    쌍봉 분포의 중앙값을 픽셀 값 평균으로 잡는다.

 - 히스토그램이 binmodal 이지만, 전경&배경 픽셀 분포가 아래와 같이 크게 다르다면 어떻게 잡아야 되는가?

 

Otsu 이진화 방법

 - 입력 영상이 배경 ( background ) 과 객체 ( object ) 두 개로 구성되어 있다고 가정
    Bimodal histogram

 - 임의의 임계값 T에 의해 나눠지는 두 픽셀 분포 그룹의 분산이 최소화되는 T를 선택

 - 일종의 최적화 알고리즘 ( optimization algorithm )

 * 1979년도에 발표된 논문으로 아주 오래된 알고리즘임에도 불구하고 접근이라든지 , 계산의 효율 등의 면에서
   상당히 잘 기술해놨기 때문에 현재까지도 많이 사용되고 있는 자동 이진화 알고리즘이다.

 

위와 같이 하나의 GrayScale 영상에서 Bimodal 형태의 히스토그램이 나타나게 되면

임의의 T값을 설정하여 ( 0~255 ) 픽셀들의 그룹이 T보다 작은 그룹과 큰 그룹으로 나누고 난 뒤,

작은 그룹과 큰 그룹의 분산을 계산하여 이 분산 값이 최소가 되는 부분을 찾는

효율적으로 구분이 잘 되는 알고리즘을 사용하고 있다.

 

 * 분산이 작다고 하는 것은 평균을 기준으로 많이 모여있다고 하는 것. 

 

 

실제 오츠의 이진화를 적용한 결과 영상

 

위 이미지와 같이 T ( 임계값 ) 값을 0부터 시작하여 255까지 상승시키며 분산이 최소화되는 구간을 찾고

해당 구간을 찾게 되면 임계값을 기준으로 0 또는 255로 영상을 이진화시킨다.

 * Otsu 알고리즘은 효율적이고 빠르게 동작되는 알고리즘이다.

 

 

실제 코딩 구현

 * threshold 인자 중 Type 부분에서 cv2.THRESH_BINARY | cv2.THRESH_OTSU 처럼 사용해도 좋지만   일반적으로 cv2.THRESH_OTSU 만 사용해도 무방하다.

 * 영상의 반전을 주고 싶을 때는 cv2.THRESH_BINARY_INV를 사용하여 
    cv2.THRESH_BIANRY_INV | cv2.THRESH_OTSU 와 같은 방식을 사용하여 반전시킬 수도 있다.

Otsu 알고리즘 이진화 결과영상

위와 같이 Otsu 알고리즘을 적용시켜도 하단 부분에 쌀알이 제대로 표현되지 않은 것을 볼 수 있다.

이런 부분들은 추후 지역 이진화 침식, 팽창, 열기, 닫기 등의 처리로 제대로 표현할 수 있다.

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90