OpenCVイメージしきい値


グローバルしきい値


しきい値規則が画像内のすべての画素に同様に適用され、しきい値が固定されている場合をグローバルと呼ぶ.
グローバルしきい値指定アルゴリズムは、入力として元の画像(src)としきい値(threshold)を用い、ソース画素位置(x,y)の画素強度をしきい値と比較して出力画像(dst)を生成する.src(x,y) > thresholdは、dst(x,y)に値の一部を割り当てる.そうでなければ、dst(x,y)に別の値が割り当てられます.
最も単純な形式のグローバルしきい値をバイナリしきい値処理と呼ぶ.
  • ソース画像(src)と閾値に加えて、もう一つの入力パラメータ、すなわち最大値(maxValue)も使用される.
  • 画素位置(x,y)では、その位置の画素強度を閾値、閾値と比較する.
  • src(x,y)がしきい値より大きい場合、指定したしきい値動作は、ターゲットビデオ画素dst(x,y)の値をmaxValueに設定する.それ以外の場合は、以下のように0に設定されます.
    if src(x,y) > thresh
      dst(x,y) = maxValue
    else
      dst(x,y) = 0
    しきい値アルゴリズムはsrc(x,y)に適用されるしきい値規則に基づいてdst(x,y)を得る.OpenCVで使用可能な5つのしきい値タイプについて説明します.

    入力画像



    入力画像には、数値の強度(階調値)と同じ数値が含まれます.「例えば、200のピクセル強度は200、32のピクセル強度は32です.」これが32インチが200インチより暗い理由です.

    バイナリしきい値


    しきい値規則

    # 이진 임계값
    if src(x,y) > thresh
      dst(x,y) = maxValue
    else
      dst(x,y) = 0

    コード#コード#

    import cv2
    
    # 이미지 읽기
    src = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)
    
    # 임계값 및 maxValue 설정
    thresh = 127
    maxValue = 255 
    
    # 기본 임계값
    th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY)

    結果



    しきい値が127に設定されている場合、127以下の数値は表示されません.

    ぎゃくにしんしきい値


    逆バイナリしきい値はバイナリしきい値とは逆です.逆バイナリしきい値のターゲットピクセルは次のとおりです.
  • 0;ソース画素が閾値より大きい場合は
  • である.
  • maxValue;ソース画素が閾値より小さい場合は
  • である.

    しきい値規則

    # 역 이진 임계값
    if src(x,y) > thresh
      dst(x,y) = 0
    else
      dst(x,y) = maxValue

    コード#コード#

    import cv2
    
    # 이미지 읽기
    src = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)
    
    # 임계값 및 maxValue 설정
    thresh = 127
    maxValue = 255 
    
    th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY_INV)

    結果



    クリップしきい値-THRESH TRUNC


    これらのタイプのしきい値は次のとおりです.
  • ソースピクセル値がしきい値より大きい場合、ターゲットピクセルはしきい値に設定されます.
  • でなければ、ソースピクセル値に設定されます.
  • maxValueは無視されます.
  • しきい値規則

    # 임계값 자르기
    if src(x,y) > thresh
      dst(x,y) = thresh
    else
      dst(x,y) = src(x,y)

    コード#コード#

    import cv2
    
    # 이미지 읽기
    src = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)
    
    # 임계값 및 maxValue 설정
    thresh = 127
    maxValue = 255
    
    th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TRUNC)

    結果



    閾値(127)を超える値はすべて127に設定されており、閾値以下の値は変更されていない.maxValueは無視されました

    閾値0-THRESH TOZERO


    これらのタイプのしきい値は次のとおりです.
  • ソースのピクセル値がしきい値より大きい場合、ターゲットのピクセル値はソースのピクセル値に設定されます.
  • でない場合は0に設定されます.
  • maxValueは無視されます.
  • しきい値規則

    # 임계값 0
    if src(x,y) > thresh
      dst(x,y) = src(x,y)
    else
      dst(x,y) = 0

    コード#コード#

    import cv2
    
    # 이미지 읽기
    src = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)
    
    # 임계값 및 maxValue 설정
    thresh = 127
    maxValue = 255
    
    th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TOZERO)

    結果



    逆閾値0-THRESH TOZERO INV


    逆しきい値を0に設定
  • ソースピクセル値がしきい値より大きい場合、ターゲットピクセル値は0に設定されます.
  • でなければ、ソースピクセル値に設定されます.
  • maxValueは無視されます
  • しきい値規則

    # 역 임계값 0
    if src(x,y) > thresh
      dst(x,y) = 0
    else
      dst(x,y) = src(x,y)

    コード#コード#

    import cv2
    
    # 이미지 읽기
    src = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)
    
    # 임계값 및 maxValue 설정
    thresh = 127
    maxValue = 255
    
    th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TOZERO_INV)

    結果