logo

OpenCV: しきい値を使用したセグメンテーション

この記事では、オブジェクト セグメンテーションの基本的なテクニックについて説明します。 閾値処理 。詳細に進む前に、以下に OpenCV の概要を簡単に説明します。 OpenCV (Open Source Computer Vision) は、次のようなさまざまな分野でリアルタイムのコンピュータ ビジョン タスクを実行することを目的としたプログラミング関数のクロスプラットフォーム オープンソース ライブラリです。
  • 顔認識
  • 虹彩認識システム
  • ジェスチャー認識
  • ヒューマン・コンピューター・インタラクション (HCI)
  • モバイルロボティクス
  • オブジェクトの識別
  • セグメンテーションと認識
  • 立体視ステレオビジョン: 2 台のカメラによる奥行き認識
  • 拡張現実
また、上記の領域をサポートするために使用されるさまざまな分類器を含む堅牢な統計機械学習ライブラリも含まれています。 OpenCV を使用するには、必要なライブラリをインポートまたはインクルードするだけで、利用可能な無数の関数を利用できるようになります。 閾値処理 は、オブジェクトを背景から分離するために使用される非常に一般的なセグメンテーション手法です。以下の記事では、しきい値に使用されるさまざまなテクニックについて説明しました。 グレースケール画像(8ビット) 。のプロセス しきい値処理 画像の各ピクセル値 (ピクセル強度) を指定されたしきい値と比較することが含まれます。これにより、入力画像のすべてのピクセルが 2 つのグループに分割されます。
  1. 強度値が閾値より低いピクセル。
  2. 閾値より大きい強度値を持つピクセル。
これら 2 つのグループには、さまざまなセグメンテーション タイプに応じて異なる値が与えられるようになりました。 OpenCV は、次の関数を使用して、グレースケール (8 ビット) 画像で 5 つの異なるしきい値スキームをサポートします。 Double Threshold(InputArray src OutputArray dst double thresh double maxval int type) パラメータ:
  • InputArray src: 入力画像 (Mat 8 ビットまたは 32 ビット)
  • OutputArray dst: 出力画像 (入力と同じサイズ)
  • double thresh: しきい値を設定します
  • double maxval: タイプ 1 および 2 で使用される maxVal
  • int type* : 使用するしきい値の種類を指定します。 (0-4)
  • *以下に閾値処理タイプのリストを示します。 入力画像 元の' title= 入力 RGB 画像は、しきい値処理が行われる前に、まずグレースケール画像に変換されます。 OpenCV: しきい値を使用したセグメンテーション' title= しきい値の種類
      バイナリしきい値(int型=0) 0_130' title= 前に取得した 2 つのグループのうち、設定されたしきい値より大きいピクセル強度を持つメンバーを含むグループには、Max_Value が割り当てられ、グレースケールの場合は値 255 (白) が割り当てられます。残りのグループのメンバーのピクセル強度は 0 (黒) に設定されています。 EQ1' title= ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値は maxVal に設定されます。 反転バイナリしきい値(int type=1) 1_130' title= Inv.バイナリしきい値はバイナリしきい値と同じです。唯一の本質的な違いは、Inv.Binary のしきい値処理にあり、設定されたしきい値より大きいピクセル強度を持つグループには「0」が割り当てられ、しきい値未満の強度を持つ残りのピクセルは maxVal に設定されます。 EQ2' title= ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値は 0 に設定され、それ以外の場合は maxVal に設定されます。 切り捨て閾値(int type=2) 2_150' title= 設定された閾値より大きいピクセル強度を有するグループは、設定された閾値まで切り捨てられるか、換言すれば、ピクセル値が設定された閾値と同じになるように設定される。他の値はすべて同じままです。 EQ3' title= ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の値はしきい値に設定され、それ以外の場合は変更されません。 ゼロへのしきい値(int type=3) OpenCV: しきい値を使用したセグメンテーション' title= 非常に単純な閾値処理手法で、閾値未満のピクセル強度値を持つグループのすべてのピクセルに対してピクセル強度を「0」に設定します。 eq4' title= ソース画像の (x y) のピクセル強度値がしきい値より大きい場合、最終画像の (x y) の値は変化しません。残りのピクセルはすべて「0」に設定されます。 ゼロへのしきい値を反転(int type=4) OpenCV: しきい値を使用したセグメンテーション' title= 前の手法と同様に、ここでは、しきい値より大きいピクセル強度値を持つグループのすべてのピクセルに対してピクセル強度を「0」に設定します。 EQ5' title= ソース画像の (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);  } }