私は最近、角膜内皮細胞のセグメンテーション プロセスに取り組んでおり、それを実行して良い結果を得る方法を説明しているかなりまともな論文を見つけました。私はその論文に従い、scikit-image と openCV を使用してすべてを実装しようとしてきましたが、分水界のセグメンテーションで立ち往生してしまいました。
プロセスがどのように想定されているかを簡単に説明します。
まず、元の内皮細胞の画像を持っています 元の画像
次に、画像のグレースケールを少し平準化するために、形態学的グレースケール再構成を実行するように指示されます(ただし、グレースケールのマーカーを取得する方法は説明されていないため、私はだまされて試してみました自力で入手)
これは、再構成された画像が次のようになるはずだったものです 。
これは、再構成された画像 ( r とラベル付けします) がどのように見えるかです:
目的は、再構成された画像を使用して流域セグメンテーションのマーカーを取得することですが、どうすればよいでしょうか?! 元の画像を取得し (これをfとラベル付けします) 、セルの h ドーム、つまりマーカーを抽出するために ( f - r )でしきい値を実行します。
これは、hdomes イメージが次のようになるはずだったものです 。
これは私のhdomesイメージがどのように見えるかです:
私が入手した hdome は彼らのものと同じくらい優れていると信じているので、最後のステップは、取得するために懸命に取り組んできた hdome を使用して、元の画像に対して流域セグメンテーションを最終的に実行することです!
入力画像として反転した元の画像を使用し、マーカーとしてマーカーを使用します。
これは、派生した出力です。
しかし、私は黒の画像しか得ていません。すべてのピクセルが黒で、何が起こっているのかわかりません...マーカーと反転画像も使用してみましたが、黒の画像も取得しています。私が使用している論文は、Luc M. Vincent、Barry R. Masters、「角膜内皮細胞画像の形態学的画像処理とネットワーク分析」、Proc. スピー1769
長いテキストで申し訳ありませんが、これまでの私の理解をすべて詳細に説明したかったのですが、scikit-image と opencv の両方から流域セグメンテーションを試しましたが、どちらも黒い画像が表示されました。
ここに私が使用している次のコードがあります
img = cv2.imread('input.png',0)
mask = img
marker = cv2.erode(mask, cv2.getStructuringElement(cv2.MORPH_ERODE,(3,3)), iterations = 3)
reconstructedImage = reconstruction(marker, mask)
hdomes = img - reconstructedImage
cell_markers = cv2.threshold(hdomes, 0, 255, cv2.THRESH_BINARY)[1]
inverted = (255 - img)
labels = watershed(inverted, cell_markers)
cv2.imwrite('test.png', labels)
plt.figure()
plt.imshow(labels)
plt.show()
ありがとうございました!