컴공지식/컴퓨터비전

Local (Adaptive) Thresholding 코드 구현

개강한 공대생 2024. 10. 2. 22:56

이건 이미지의 각 부분마다 주변 픽셀들의 밝기를 기준으로 다른 임계값을 적용하는 방법이다.

이미지가 조명에 따라 밝기가 달라질 때, 전역 임계값(global thresholding)보다 훨씬 좋은 결과를 줄 수 있다.

 

int main() {
    Mat image, binary, adaptive_binary; // 입력 이미지와 결과 이미지를 위한 변수들
    image = imread("opencv.jpg", 0); // 이미지를 그레이스케일로 불러옴

    threshold(image, binary, 150, 255, THRESH_BINARY); // 전역 임계값으로 이진화
    adaptiveThreshold(image, adaptive_binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 85, 15); // 적응형 임계값 적용
    
    imshow("Input image", image); // 원본 이미지 표시
    imshow("binary", binary); // 전역 이진화 결과 이미지 표시
    imshow("adaptive binary", adaptive_binary); // 적응형 임계값 결과 이미지 표시
    
    waitKey(0); // 키 입력 대기
}

 

여기선 주변 85x85 크기의 블록 안에서 픽셀 값의 평균을 계산하고, 그 값에서 15를 뺀 값을 임계값으로 사용한다.