OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
距離変換とWatershedアルゴリズムによる画像セグメンテーション

前のチュートリアル: 点と多角形の内外判定
次のチュートリアル: ピンボケ画像の復元フィルタ

原著者Theodore Tsesmelis
互換性OpenCV >= 3.0

目的

このチュートリアルでは、以下の方法を学ぶ:

  • 画像のシャープニングのためにラプラシアンフィルタリングを行う目的で、OpenCV関数 cv::filter2D を使用する
  • 二値画像の派生表現を得る目的で、OpenCV関数 cv::distanceTransform を使用する。この表現では、各ピクセルの値は最も近い背景ピクセルまでの距離に置き換えられる
  • 画像中のオブジェクトを背景から分離する目的で、OpenCV関数 cv::watershed を使用する

理論

コード

説明 / 結果

  • 元画像を読み込み、問題なく読み込めたかを確認してから表示する:
  • 次に、白い背景の画像がある場合は、それを黒に変換しておくとよい。これにより、後でDistance Transformを適用する際に前景オブジェクトをより容易に判別できるようになる:
  • その後、前景オブジェクトのエッジを際立たせるために画像をシャープにする。かなり強いフィルタ(二次微分の近似)を用いてラプラシアンフィルタを適用する:

  • 次に、新しくシャープにした元画像を、それぞれグレースケールと二値に変換する:
  • これで二値画像にDistance Transformを適用する準備が整った。さらに、結果を可視化したりしきい値処理したりできるよう、出力画像を正規化する:
  • dist 画像をしきい値処理し、その後、上記の画像からピークを抽出する目的でいくつかのモルフォロジー演算(すなわち膨張)を行う:
  • 各ブロブから、cv::findContours 関数の助けを借りて、watershedアルゴリズム用のシード/マーカーを作成する:
  • 最後に、watershedアルゴリズムを適用し、結果を可視化する: