OpenCV

[OpenCV] 이진화(Binarization, thresholding)

디벨로펄 2023. 1. 7.
반응형

이진화, 사진을 두가지(흑, 백)으로만 분류하는 것입니다.

이진화는 왜 할까?

경계값을 기준으로 이진화시키면 물체가 뚜렷해지기 때문이다.

이진화 변환 예시

- 이진화 input : 임계값, 최댓값

* cv2.THRESH_BINARY옵션에서

임계값이하의 pixel은 rgb = (0,0,0) =검정으로 변환되며, 임계값 초과의 pixel은 설정한 최댓값으로 변환된다.

image =cv2.imread('./sampleData/sample2.jpg', cv2.IMREAD_GRAYSCALE) # 이미지 파일 불러오기.
divider = 4
dst = cv2.resize(image, dsize=(int(image.shape[1]//divider),
                               int(image.shape[0]//divider)), interpolation=cv2.INTER_AREA)
ret, dst3 = cv2.threshold(dst, 170, 200, cv2.THRESH_BINARY) # ret에는 임계값, dst3에는 결과image
cv2.imshow("binary", dst3)
cv2.waitKey(0)

* 다양한 이진화 옵션

cv2.THRESH_BINARY 임계값 이상 = 최댓값, 임계값 이하 = 0
cv2.THRESH_BINARY_INV 위의 반전, 임계값 이상 = 0, 임계값 이하 = 최댓값
cv2.THRESH_TOZERO 임계값 이상 = 원본값, 임계값 이하 = 0
cv2.THRESH_TOZERO_INV 위의 반전, 임계값 이상 = 0, 임계값 이하 = 원본값
cv2.THRESH_TRUNC 임계값 이상 = 임계값 임계값 이하 = 원본값
cv2.THRESH_MASK 흑색 이미지로
cv2.THRESH_OTSU otsu 알고리즘
cv2.THRESH_TRIANGLE triangle 알고리즘

* OTSU 이진화 : 입력 영상이 배경과 객체 두가지로 구성된 경우 활용 가능. Bimodal histogram. 

임의의 임계값 T에 의해 나눠지는 두 픽셀 분포의 분산이 최소가 되는 T를 선택하는 방법.

 

 

전체 이미지에 동일한 threshhold를 적용하다보니, 그림자가 존재하는 경우 원하는 대로 이미지가 나오지 않는다는 것을 추측해볼 수 있다. 이를 어떻게 해결할 수 있을까?

 

 

참고

https://deep-learning-study.tistory.com/224

 

[파이썬 OpenCV] 이진 영상 처리 - 자동 이진화 - Otsu 방법

황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝' 을 공부하면서 정리해 보았습니다. 예제 코드 출처 : 황선규 박사님 github홈페이지 『OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝』 예

deep-learning-study.tistory.com

 

반응형

댓글