728x90

적응 평균 임계치 이진화에 대한 내용은

 

opencv document와 다음 링크를 참고했다.

homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm

opencv-python.readthedocs.io/en/latest/doc/09.imageThresholding/imageThresholding.html

 

 

 

 

이전에 단순 이진화의 경우 본인이 지정한 밝기 값을 기준으로 이진화를 수행하였다.

 

평균 기반 적응적 임계치 이진화 같은 경우 본인이 임계치를 지정하는 것이 아니라

 

해당 픽셀을 중심으로 블록 사이즈 만큼의 커널(마스크) 영역의 밝기 평균을 지역 임계치로 사용한다.

 

해당 픽셀 밝기와 지역 임계치를 비교하여 255를 줄지 0을 줄지 판단한다.

 

다음 함수는 구현내용

def adaptiveThresholdMean(img,  block_size=5, C=4):

    if type(img) is not np.ndarray:
        raise AssertionError("img is not ndarray")
    row, col = img.shape


    res = np.zeros((row, col))
    if (block_size % 2 == 0):
        block_size += 1
    
    for i in range(0, row):
        for j in range(0, col):
            x_min = j-block_size//2
            x_max = j+block_size//2
            y_min = i-block_size//2
            y_max = i+block_size//2
            
            if x_min <= 0:
                x_min = 0
            
            if x_max >= col:
                x_max = col
            
            if y_min <= 0:
                y_min = 0
            
            if y_max >= row:
                y_max = row

            
            val = img[y_min:y_max, x_min:x_max].mean()
            local_th = val-C
            if img[i,j] >= local_th:
                res[i, j] = 255
            else:
                res[i, j] = 0
    return res

 

 

 

다음 예시는 아래의 링크에서 소개하는 설정대로 해보았다.

 

homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm

 

 

 

 

dave.jpg는 opencv 다큐먼트꺼

 

 

 

 

 

300x250

+ Recent posts