ABOUT ME

Today
Yesterday
Total
  • adaptiveThreshold 함수 코드
    컴공지식/컴퓨터비전 2024. 10. 2. 22:46

    void adaptiveThreshold(Mat src, Mat dst, double maxval, int adaptiveMethod, int thresholdType, int blockSize, double C)

    이렇게 생겼다.

    double maxval은 임계값을 넘었을 때 적용할 최대 값이고 보통 255로 둔다.

    int adaptiveMethod은 임계값을 계산하는 방식인데 두 가지가 있다.

     

    • ADAPTIVE_THRESH_MEAN_C: 주변 영역의 평균을 사용해 임계값을 계산
    • ADAPTIVE_THRESH_GAUSSIAN_C: 가우시안 가중 평균을 사용해 임계값을 계산

    int thresholdType은 이진화 방법이다. 주로 THRESH_BINARY(임계값을 넘으면 흰색, 아니면 검정)나 THRESH_BINARY_INV(반대) 중에 선택한다.

    int blockSize는 임계값을 계산할 때 사용할 영역 크기다. 이 값이 커질수록 더 넓은 영역을 보고 계산한다. 값은 홀수여야 한다. (3, 5, 7 등)

    blockSize가 3이면, 각 픽셀 주변 3x3 크기의 이웃 픽셀들로 평균을 계산한다.

    double C는 계산된 임계값에서 뺄 값이다. 조정을 위해 이 값을 사용하는데, 값을 줄이면 더 어두운 결과가 나오고, 값을 키우면 더 밝은 결과가 나온다.

     

    아래는 실제 사용 코드다.

    int main() {
        Mat image = imread("lena.png"); // 이미지를 읽어옴
        cvtColor(image, image, CV_BGR2GRAY); // 컬러 이미지를 그레이스케일로 변환
        Mat dst; // 결과 이미지를 저장할 변수
        adaptiveThreshold(image, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 10); // Adaptive Thresholding 적용
        
        imshow("dst", dst); // 이진화된 이미지 보여줌
        imshow("image", image); // 원본 그레이스케일 이미지 보여줌
        waitKey(0); // 키 입력 대기
        return 0;
    }

     

    여기선 ADAPTIVE_THRESH_MEAN_C를 사용했다. 이건 픽셀 주변 영역의 평균값을 기준으로 임계값을 계산한다.

    블록 사이즈는 7로 7x7 영역을 사용해 임계값을 계산한다. 

     

     

     

    '컴공지식 > 컴퓨터비전' 카테고리의 다른 글

    Global Thresholding 구현 코드  (1) 2024.10.02
    inRange 함수  (0) 2024.10.02
    threshold 처리 코드  (0) 2024.10.02
    GrabCut이란?  (1) 2024.10.02
    적응형 임계값(Adaptive Thresholding)이란  (0) 2024.10.02
Designed by Tistory.