OpenCV: しきい値を使用したセグメンテーション
この記事では、オブジェクト セグメンテーションの基本的なテクニックについて説明します。 閾値処理 。詳細に進む前に、以下に OpenCV の概要を簡単に説明します。 OpenCV (Open Source Computer Vision) は、次のようなさまざまな分野でリアルタイムのコンピュータ ビジョン タスクを実行することを目的としたプログラミング関数のクロスプラットフォーム オープンソース ライブラリです。 InputArray src: 入力画像 (Mat 8 ビットまたは 32 ビット) OutputArray dst: 出力画像 (入力と同じサイズ) double thresh: しきい値を設定します double maxval: タイプ 1 および 2 で使用される maxVal int type* : 使用するしきい値の種類を指定します。 (0-4) *以下に閾値処理タイプのリストを示します。 入力画像
入力 RGB 画像は、しきい値処理が行われる前に、まずグレースケール画像に変換されます。
しきい値の種類
- 顔認識
- 虹彩認識システム
- ジェスチャー認識
- ヒューマン・コンピューター・インタラクション (HCI)
- モバイルロボティクス
- オブジェクトの識別
- セグメンテーションと認識
- 立体視ステレオビジョン: 2 台のカメラによる奥行き認識
- 拡張現実
- 強度値が閾値より低いピクセル。
- 閾値より大きい強度値を持つピクセル。
入力 RGB 画像は、しきい値処理が行われる前に、まずグレースケール画像に変換されます。
しきい値の種類
前に取得した 2 つのグループのうち、設定されたしきい値より大きいピクセル強度を持つメンバーを含むグループには、Max_Value が割り当てられ、グレースケールの場合は値 255 (白) が割り当てられます。残りのグループのメンバーのピクセル強度は 0 (黒) に設定されています。
ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値は maxVal に設定されます。
Inv.バイナリしきい値はバイナリしきい値と同じです。唯一の本質的な違いは、Inv.Binary のしきい値処理にあり、設定されたしきい値より大きいピクセル強度を持つグループには「0」が割り当てられ、しきい値未満の強度を持つ残りのピクセルは maxVal に設定されます。
ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値は 0 に設定され、それ以外の場合は maxVal に設定されます。
設定された閾値より大きいピクセル強度を有するグループは、設定された閾値まで切り捨てられるか、換言すれば、ピクセル値が設定された閾値と同じになるように設定される。他の値はすべて同じままです。
ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値はしきい値に設定され、それ以外の場合は変更されません。
非常に単純な閾値処理手法で、閾値未満のピクセル強度値を持つグループのすべてのピクセルに対してピクセル強度を「0」に設定します。
ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の (x y) の値は変化しません。残りのピクセルはすべて「0」に設定されます。
前の手法と同様に、ここでは、しきい値より大きいピクセル強度値を持つグループのすべてのピクセルに対してピクセル強度を「0」に設定します。
ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の (x y) の値は「0」に設定されます。残りのピクセル値はすべて変更されません。 OpenCV プログラムをコンパイルするには、システムに OpenCV ライブラリがインストールされている必要があります。近日中に同じための簡単なチュートリアルを投稿する予定です。 OpenCV をすでにインストールしている場合は、選択した入力イメージを使用して以下のコードを実行します。 CPP // CPP program to demonstrate segmentation // thresholding. #include #include #include #include using namespace cv ; int main ( int argc char ** argv ) { if ( argc != 2 ) { cout < < ' Usage: ' ' ' < < endl ; return -1 ; } int threshold_value = 0 ; // Valid Values: 0 1 2 3 4 int threshold_type = 2 ; // maxVal useful for threshold_type 1 and 2 int maxVal = 255 ; // Source image Mat src = imread ( argv [ 1 ] 1 ); cvNamedWindow ( 'Original' CV_WINDOW_NORMAL ); imshow ( 'Original' src ); Mat src_gray dst ; // Convert the image to GrayScale cvtColor ( src src_gray CV_BGR2GRAY ); // Create a window to display results cvNamedWindow ( 'Result' CV_WINDOW_NORMAL ); createTrackbar ( 'Threshold' 'Result' & threshold_value 255 ); while ( 1 ) { threshold ( src_gray dst threshold_value maxVal threshold_type ); imshow ( 'Result' dst ); waitKey ( 1 ); } }