これは、 OpenCVライブラリを使用して Python で実行できます。
特に、次の機能に興味があります。
- ヒストグラム ストレッチ (
cv.EqualizeHist
)。これは現在の Python API にはありませんが、OpenCV の最新の SVN リリースをダウンロードすると使用できます。この部分は表示のみを目的としており、同じ結果を得る必要はありません
- 画像のしきい値処理
- 侵食などの形態学的操作(拡張、開く、閉じるなども)
- cv.FindContoursを使用して、バイナリ イメージ内のブロブの輪郭を決定します。この質問を参照してください。Python ではなく C を使用していますが、API は実質的に同じであるため、そこから多くを学ぶことができます。
- 流域のセグメンテーション (使用
cv.Watershed
--存在しますが、何らかの理由でマニュアルで見つけることができません)
それを念頭に置いて、OpenCV を使用して matlab の記事と同じ結果を得る方法を次に示します。
- 経験的に決定されたしきい値 (または大津の方法) を使用して画像をしきい値処理します。
- 画像に膨張を適用してギャップを埋めます。必要に応じて、前のしきい値処理ステップの前に画像をぼかします。これにより、小さな「穴」も削除されます。
- を使用してアウトラインを決定する
cv.FindContours
- 必要に応じて、輪郭をペイントします
- ブロブ情報を使用して、元の画像の各ブロブを反復処理し、各ブロブに個別のしきい値を適用して細胞核を分離します (これが彼らの
imextendedmax
操作が行っていることです)
- 必要に応じて、核にペイントします
- 流域変換を適用する
私はこれを試したことがないので (申し訳ありませんが、今は時間がありません)、まだコードをお見せすることはできません。しかし、OpenCV での私の経験に基づいて、ステップ 7 までのすべてがうまく機能すると確信しています。OpenCV の流域変換を使用したことはありませんが、ここで機能しない理由がわかりません。
私が示した手順を実行してみて、問題がある場合はお知らせください。より多くの人があなたを助けることができるように、必ずソースを投稿してください。
最後に、細胞の染色とその存在の定量化に関する質問に答えるために、使用している色素を知ることは非常に簡単です. たとえば、赤色の色素で染色された細胞を特定するには、画像から赤色のチャネルを抽出し、強度の高い領域を (おそらくしきい値処理によって) 調べます。