[python] 파이썬 OpenCV 4 Adaptive Thresholding

 파이썬과 OpenCV 4를 활용하여 Adaptive Thresholding 개념에 대해 정리합니다. 이미지에 조명이 균일하지 않게 되면 명암이 존재하게 되고, 일반적인 Thresholding을 적용하면 의도치 않은 결과를 얻을 수 있습니다. 이런 경우 Adaptive Thresholding를 사용하면 어느정도 보완할 수 있습니다. 이미지의 특정 픽셀에 대한 Adaptive Threshold 값은, 해당 픽셀의 주위 픽셀값들을 토대로 산정됩니다. 아래는, OpenCV 4에서 제공하는 방법으로 cv.ADAPTIVE_THRESH_MEAN_C, cv.ADAPTIVE_THRESH_GAUSSIAN_C 2가지를 활용한 샘플코드입니다.


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

img = cv.imread('sudoku.jpg',0)
img = cv.medianBlur(img,5)

ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2)
th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,11,2)

titles = ['Original Image', 'Global Thresholding (v = 127)',
            'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]

for i in range(4):
    plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
    
plt.show()


아래는 결과입니다.

명암 대조가 보다 뚜렷한 이미지의 경우 Adaptive Thresholding을 사용하면 보다 분별력 있는 결과를 얻을 수 있습니다.

끝.


댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

NPN, PNP 트랜지스터 차이점

3선 결선식 센서의 타입 PNP, NPN

제너 다이오드에 저항을 연결하는 이유

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

커패시터에 저장된 에너지 계산

3상 모터 전력에서 전류 계산하기 (How to Convert Three-Phase Power to Amps)

[공압밸브] 5포트 2웨이 & 4포트 2웨이, 단동 VS 복동 차이점

SSR과 기계식 릴레이 차이점