OpenCV를 사용한 적응 임계값
OpenCV에는 단순 임계값과 적응형 임계값의 두 가지 유형의 임계값이 있습니다. 이 기사에서는 적응형 임계값이 무엇인지 자세히 알아보고 OpenCV 라이브러리를 사용하여 이를 구현하는 방법을 알아봅니다.
OpenCV를 사용한 적응 임계값
OpenCV에서 적응 임계값은 모든 이미지 영역에 대해 다른 임계값이 계산되는 프로세스입니다. 단순 임계값과 달리 이미지의 다른 모든 픽셀에 동일한 임계값이 사용됩니다.
픽셀의 값이 임계값보다 작은 경우 0
이 설정됩니다. 픽셀의 값이 임계값보다 큰 경우 255
가 설정됩니다.
적응 임계값은 적응 임계값 평균과 가우스의 두 가지 방법을 사용합니다. 다음은 적응형 임계값에 대한 구문입니다.
통사론:
cv2.adaptiveThreshold(
inputImage,
maximumValue,
thresholdMethod,
typeOfthreshold,
sizeOfBlock,
constantValue,
)
다음은 adaptiveThreshold()
메소드에 전달되는 매개변수입니다.
inputImage
: 소스는 입력 이미지입니다.maximumValue
: 픽셀에 할당할 수 있는 최대 값입니다. 이것은 최대 임계값에 불과합니다. 기껏해야 255가 걸릴 수 있습니다.adaptiveMethod
: 적응 방법은 임계값 계산 방법을 결정합니다. 적응 임계값에는 두 가지 적응 방법이 있습니다.cv2.ADAPTIVE_THRESH_MEAN_C
: 이웃 영역 값의 평균에서 상수 값을 뺀 값, 즉 블록 크기의 평균에 점의 블록 크기 이웃에서 상수 값을 뺀 값을 곱한 값입니다.cv2.ADAPTIVE_THRESH_GAUSSIAN_C
: 이웃 값의 가우스 가중 합계에서 상수 값을 뺀 값을 취합니다.typeOfthreshold
: 적용할 임계값 유형입니다.sizeOfBlock
은 인접 영역의 크기입니다.constantValue
: 주변 픽셀의 평균 또는 가중 합에서 공제된 상수 값.
adaptiveThreshold()
메서드의 구문과 매개변수를 살펴보았으므로 이제 예를 들어 적응형 임계값이 실제로 어떻게 작동하는지 살펴보겠습니다.
먼저 시스템에 OpenCV 라이브러리가 설치되어 있는지 확인하십시오. 그런 다음 아래 예제와 같이 OpenCV 라이브러리를 가져와야 합니다.
적응 임계값 방법은 원본 이미지를 회색조 이미지로 예상합니다. 따라서 imread()
메서드로 이미지를 읽는 동안 회색조 이미지를 얻은 다음 해당 이미지를 image
변수에 저장하기 위해 두 번째 인수로 0
을 전달해야 합니다.
코드 조각:
import cv2
image = cv2.imread("text.jpg", 0)
mean = cv2.adaptiveThreshold(
image, 250, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 25, 15
)
gaussian = cv2.adaptiveThreshold(
image, 250, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 15
)
cv2.imshow("Adaptive Thresholding Mean", mean)
cv2.imshow("Adaptive Thresholding Gaussian", gaussian)
cv2.waitKey(0)
이미지에는 책의 텍스트가 포함되어 있습니다. 이제 위의 이미지에 적응 임계값 기술을 모두 적용하고 이 두 기술에 동일한 매개변수를 전달하고 출력 이미지의 차이를 확인합니다.
먼저 이미지를 전달한 다음 두 번째 매개변수로 255
(흰색) 및 적응형 메서드 ADAPTIVE_THRESH_MEAN_C
및 ADAPTIVE_THRESH_GAUSSIAN_C
를 세 번째 매개변수로 각각 전달합니다.
임계값 유형의 경우 THRESH_BINARY
를 전달하여 이미지에서 기본 임계값을 수행합니다. 그런 다음 이웃 영역의 크기를 지정해야 합니다. 이 경우 블록 크기로 25
를 전달했습니다.
이제 adaptiveThreshold()
메서드의 마지막 매개 변수로 일부 상수 값을 전달한 다음 이 두 작업의 결과를 각각 mean
및 gaussian
변수에 저장합니다.
마지막으로 imshow()
메서드를 사용하여 출력 창에 이러한 결과 이미지를 인쇄하고 탭의 이름을 지정할 수 있습니다. 이것이 평균과 가우시안 모두의 결과입니다.
출력:
결론
OpenCV에는 단순 및 적응의 두 가지 유형의 임계값이 있습니다. 단순 임계값에서는 동일한 임계값이 이미지의 다른 모든 픽셀에 적용됩니다.
이 유형의 임계값은 조명 조건이 변하지 않는 일부 이미지에 적합할 수 있습니다. 그러나 대부분의 이미지에서 조명은 상당히 다양합니다.
이러한 경우 이 임계값 기술을 사용하는 것은 좋은 방법이 아닐 수 있습니다.
따라서 OpenCV 라이브러리에는 적응 임계값이라는 또 다른 임계값 기술이 있습니다. 적응형 임계값에서는 모든 영역에 대해 서로 다른 임계값이 계산되어 더 나은 결과를 제공합니다.
Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.
LinkedIn