Python画像しきい値処理とアルゴリズム比較例分析


画像の2値化またはしきい値設定(2値化)は、画像内のターゲットオブジェクトを抽出し、背景とノイズを区別することを目的としています。通常、しきい値Tが設定され、画像のピクセルはTによって2つのカテゴリに分類されます。Tより大きいピクセルグループとTより小さいピクセルグループです。

グレースケール変換処理後の画像では、各ピクセルのグレースケール値は1つだけで、そのサイズは明るさの度合いを示します。二値化プロセスでは、画像内のピクセルを2種類の色に分割できます。一般的に使用される二値化アルゴリズムを式1に示します。

{Y = 0、灰色<TY = 255、灰色> = T {Y = 0、灰色<TY = 255、灰色> = T

グレースケールグレーがしきい値T未満の場合、そのピクセルは0に設定されます。これは黒を意味します。グレースケールグレーがしきい値T以上の場合、そのY値は255、つまり白を意味します。

Python OpenCVは、2値化処理を実現するためのしきい値関数threshold()を提供します。その式とパラメーターを次の図に示します。

retval、dst = cv2.threshold(src、thresh、maxval、type)9c87cff83c3b5e03e6db91aa473f8462.png




バイナリしきい値

この方法では、最初に127などの特定のしきい値を選択します。

1)127以上のピクセルのグレー値が最大値に設定されている

2)グレー値が127未満のピクセルのグレー値は0に設定されます

例:156-> 255 89-> 0

キーワードはcv2.THRESH_BINARYで、完全なコードは次のとおりです。

import cv2 
def test22():
  src = cv2.imread( "rose.jpg")
  #グレー画像変換
  GrayImage = cv2.cvtColor(src、cv2.COLOR_BGR2BGRA)
  #バイナリしきい値
  r、b = cv2.threshold(GrayImage 、127、255、cv2.THRESH_BINARY)
  #画像を表示
  cv2.imshow( "src"、src)
  cv2.imshow( "result"、b)
 
  if cv2.waitKey(0)== 27:
    cv2.destroyAllWindows()
test22( )


効果は次のとおりです。


50bde48bda2f4d5bbad73f92c3b24f1f.png


アンチバイナリしきい値

この方法は、バイナリしきい値方法に似ています。最初に、127などの特定のグレー値をしきい値として選択します。

1)127より大きいピクセルのグレー値は0に設定されます

2)しきい値未満のグレー値が255に設定されている

例:156-> 0 89-> 255

キーワードはcv2.THRESH_BINARY_INVです

コードは次のように表示されます。

import cv2 
def test22():
  src = cv2.imread( "rose.jpg")
  #グレー画像変換
  GrayImage = cv2.cvtColor(src、cv2.COLOR_BGR2BGRA)
  #バイナリしきい値
  r、b = cv2.threshold(GrayImage 、127、255、cv2.THRESH_BINARY_INV)
  #画像を表示
  cv2.imshow( "src"、src)
  cv2.imshow( "result"、b)
 
  if cv2.waitKey(0)== 27:
    cv2.destroyAllWindows()
test22( )


効果は次のとおりです。


af7831ec38ccbcd2517b32bb2f5dfff9.png


切り捨てのしきい値

この方法では、しきい値を選択する必要があります。画像内のしきい値よりも大きいピクセルがしきい値として設定され、しきい値よりも小さいピクセルは変更されません。

1)127ピクセル以上のグレー値がしきい値127に設定されている

2)しきい値未満のグレー値は変更されません

例:163-> 127 89-> 89

キーワードcv2.THRESH_TRUNC、完全なコードは次のとおりです

import cv2 
def test22():
  src = cv2.imread( "rose.jpg")
  #グレー画像変換
  GrayImage = cv2.cvtColor(src、cv2.COLOR_BGR2BGRA)
  #バイナリしきい値
  r、b = cv2.threshold(GrayImage 、127、255、cv2.THRESH_TRUNC)
  #画像を表示
  cv2.imshow( "src"、src)
  cv2.imshow( "result"、b)
 
  if cv2.waitKey(0)== 27:
    cv2.destroyAllWindows()
test22( )


効果は次のとおりです。


520b5d7fe8ffc4e0dabb43b62f3fd770.png


しきい値が0に減少します

このメソッドは、最初に127などのしきい値を選択します

(1)127のしきい値以上のピクセルは0になります(2)しきい値未満のピクセルは変更されません

例:128-> 0 89-> 89

キーワードはcv2.THRESH_TOZERO_INVで、完全なコードは次のとおりです。

import cv2 
def test22():
  src = cv2.imread( "rose.jpg")
  #グレー画像変換
  GrayImage = cv2.cvtColor(src、cv2.COLOR_BGR2BGRA)
  #バイナリしきい値
  r、b = cv2.threshold(GrayImage 、127、255、cv2.THRESH_TOZERO_INV)
  #画像を表示
  cv2.imshow( "src"、src)
  cv2.imshow( "result"、b)
  if cv2.waitKey(0)== 27:
    cv2.destroyAllWindows()
test22( )


効果は次のとおりです。


c4498ab5bffc83a0a90575e8cfca0ea2.png


しきい値は0です

このメソッドは、最初に127などのしきい値を選択します

(1)しきい値127以上のピクセル、値は変更されません

(2)しきい値より小さいピクセル値が0に設定されている

例:163-> 163 102-> 0

キーワードはcv2.THRESH_TOZEROで、完全なコードは次のとおりです。

import cv2 
def test22():
  src = cv2.imread( "rose.jpg")
  #グレー画像変換
  GrayImage = cv2.cvtColor(src、cv2.COLOR_BGR2BGRA)
  #バイナリしきい値
  r、b = cv2.threshold(GrayImage 、127、255、cv2.THRESH_TOZERO)
  #画像を表示
  cv2.imshow( "src"、src)
  cv2.imshow( "result"、b)
 
  if cv2.waitKey(0)== 27:
    cv2.destroyAllWindows()
test22( )


効果は次のとおりです。


79134d4e86ad86b64e665c0e1210949b.png


以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。


おすすめ

転載: blog.51cto.com/14825302/2550589