2015-11-16 63 views
7

私はOpenCVには比較的新しいので、強い画像処理のバックグラウンドはありません。現在私は、画像から顕微鏡のすべての生物細胞を数えるプログラムを作成するプロジェクトに取り組んでいます。私はインターネットのソースからさまざまな方法を試してイメージにカウントしましたが、期待どおりにうまくいっていません。OpenCVでのC++生物細胞計数

私が使用している方法のいくつかは、次のとおりです。フィルタリングされた画像の輪郭を見つける

  1. 。 (近接しているセルではうまく動作しません)
  2. ガウスぼかしと画像上での極大点の検出。
  3. キャニーエッジ検出(出力結果は、非細胞セグメントを検出)

(と同様の問題が)これは私が細胞の総数をカウントする必要がある画像の一例です。

enter image description here

細胞が一緒に閉じていない場合は私の現在のカウントアルゴリズムは、より良い作品。このような例:

enter image description here

しかし、アルゴリズムは、静止画像の中心で一緒に貼りされた3つのセルを離れて分割することができません。

したがって、画像中の偽陰性/陽性が最も少ない細胞の総数を検出するにはどうすればよいですか?

+2

、このページを見てください:http://stackoverflow.com/questions/5298884/finding-number-of-colored-shapes-from-picture-using -pythonとhttp://codegolf.stackexchange.com/questions/40831/counting-grains-of-riceあなたが探しているものに似ているかもしれません! –

+0

は各セルのサイズに似ていますか? – Micka

+0

@Micka各画像のセルサイズは似ていますが、異なるズームレベルの画像がありますので、1つの画像のセルサイズは別の画像に適用できません。 – Woody

答えて

2

あなたのアプローチはほぼ良好です。ただし、追加の手順が必要です。 Morphological Operationsと呼ばれるものが必要です。

  1. あなたの状況が良い方法で画像をフィルタリングします。
  2. 色に応じてしきい値を適用するか、グレーに変換してからしきい値を適用します。 P.S.あなたが提供した例から、あなたの細胞の色があまりにも飽和しているようです。だから、それをHSV Spaceに変換し、Sチャンネルを使ってそれをしきい値にすることができます(ここで助けが必要かどうか教えてください)。
  3. しきい値処理された画像にOpeningモルフォロジー演算子を適用します。 P.S.あなたはいくつかのカーネルサイズを試して、最高のものを選ぶかもしれません。
  4. 輪郭を取り、あなたがしていたことをやってください。

オープニング:

cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(1, 1)); 
cv::morphologyEx(img, img, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1); 
+0

イメージ上でオープニング演算子を実行するにはどうすればいいですか? – Woody

+0

@woodyコード –

+0

で編集しましたあなたのオープニングオペレータを試しましたが、私はMORPH_RECTをMORPH_ELLIPSEに変更しました。しかし、細胞が検出されない偽陰性が依然として存在する。コンピュータビジョンの – Woody

関連する問題