Python OpenCV 강좌 : 제 36강 - 적응형 이진화

Python OpenCV Adaptive Threshold

Python OpenCV 강좌 : 제 36강 - 적응형 이진화
[ Python-OpenCV ] - 윤대희

적응형 이진화(Adaptive Threshold)


1 적응형 이진화 알고리즘은 입력 이미지에 따라 임곗값스스로 다른 값을 할당할 수 있도록 구성된 이진화 알고리즘입니다.

이미지에 따라 어떠한 임곗값을 주더라도 이진화 처리가 어려운 이미지가 존재합니다.

예를 들어, 조명의 변화나 반사가 심한 경우 이미지 내의 밝기 분포가 달라 국소적으로 임곗값을 적용해야 하는 경우가 있습니다.

이러한 경우 적응형 이진화 알고리즘을 적용한다면 우수한 결과를 얻을 수 있습니다.



Main Code


import cv2

src = cv2.imread("tree.jpg")
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 467, 37)

cv2.imshow("binary", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()



Detailed Code


src = cv2.imread("tree.jpg")
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

원본 이미지(src)를 선언하고, 그레이스케일(gray)을 적용합니다.



binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 467, 37)

적응형 이진화 함수(cv2.adaptiveThreshold)로 그레이스케일 이미지를 이진화를 적용합니다.

cv2.adaptiveThreshold(입력 이미지, 최댓값, 적응형 이진화 플래그, 임곗값 형식, 블록 크기, 감산값)을 의미합니다.

입력 이미지는 8비트의 단일 채널 이미지를 사용합니다.

최댓값임곗값 형식기존 이진화 함수와 동일한 역할을 합니다.

적응형 이진화 플래그는 블록 크기 내의 연산 방법을 의미합니다.


적응형 이진화 플래그

플래그 설명
cv2.ADAPTIVE_THRESH_MEAN_C blockSize 영역의 모든 픽셀에 평균 가중치를 적용
cv2.ADAPTIVE_THRESH_GAUSSIAN_C blockSize 영역의 모든 픽셀에 중심점으로부터의 거리에 대한 가우시안 가중치 적용


플래그는 두 종류이지만, 연산 방법은 세 가지가 있습니다.

평균 가중치, 가우시안 가중치, 혼합이 있습니다.

혼합은 평균 가중치가우시안 가중치OR 연산해 사용할 수 있습니다.


  • Tip : cv2.ADAPTIVE_THRESH_MEAN_C | cv2.ADAPTIVE_THRESH_GAUSSIAN_C의 형태로 사용합니다.


다음으로, 블록 크기감산값은 결괏값을 계산하는 수식에서 활용됩니다.


\[T(x, y) = \frac{1}{blockSize^2} \sum_{x_i} \sum_{y_i} I(x+x_i, y+y_i) - C\]


블록 크기는 \(blockSize\)를 의미하며, 감산값은 \(C\)를 의미합니다.

수식에서 확인할 수 있듯이 주변 영역의 크기인 blockSize와 상수 C에 따라 설정되는 임곗값의 결과가 크게 달라집니다.

blockSize는 중심점이 존재할 수 있게 홀수만 가능하며 상수 C일반적으로 양수의 값을 사용하지만 경우에 따라 0이나 음수도 사용 가능합니다.


  • Tip : blockSize가 클수록 연산 시간이 오래걸리게 됩니다.



Result


2


도움이 되셨다면 광고 클릭 부탁드립니다.


Book Image

책이 출간되었습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C# OpenCvSharp4
  • Python OpenCV4
  • Using Tesseract
  • Using TensorFlow
  • Using Regular Expression
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]


    ⤧  Previous post Python OpenCV 강좌 : 제 35강 - 트랙 바 ⤧  Next post Python OpenCV 강좌 : 제 37강 - 템플릿 매칭
    Python-OpenCV Category