画像の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)
バイナリしきい値
この方法では、最初に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( )
効果は次のとおりです。
アンチバイナリしきい値
この方法は、バイナリしきい値方法に似ています。最初に、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( )
効果は次のとおりです。
切り捨てのしきい値
この方法では、しきい値を選択する必要があります。画像内のしきい値よりも大きいピクセルがしきい値として設定され、しきい値よりも小さいピクセルは変更されません。
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( )
効果は次のとおりです。
しきい値が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( )
効果は次のとおりです。
しきい値は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( )
効果は次のとおりです。
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。