2016-07-08 3 views
0

私は誰かが画像処理の問題で私を助けてくれることを望んでいました。私のハエの胚は、末梢神経系(PNS)の細胞核 - 付着1で染色されています。これらの細胞核は、ハエの胚の各セグメントにクラスターを形成します。私がすることによって、いくつかの成功を収めている添付ファイル2.画像処理 - Fly Embryos画像のグループに細胞をクラスタリングする

PNS Stain

PNS Stain showing blobs

- 私の目標は、胚性セグメント(すなわちセグメント当たり1つのブロブまたはポイント)のそれぞれにラベルを付けるために細胞核のこれらのクラスタを使用することです(核の各クラスタがブロブを形成するように)ラベル付けされた核のガウスぼかしを行い、その後、これらの「ブロブ」を識別するために適応閾値処理を使用する。しかし、それは非常に堅牢な方法ではありません - いくつかのクラスタは形成されないか、複数のクラスタが一緒に固執します。私は私の分析を行うためにscikit-画像を使用しています、ここで私が使用している私のコードの関連部分である:

EmbryoBlur =ガウス(胚、シグマ=(10,5))

それは確実に核のクラスタごとに単一のポイントやブロブを形成するようにClusteredCells = threshold_adaptive(EmbryoBlur、BLOCK_SIZE = 151は、メソッド=「意味」)

誰もが、提案する任意の他の戦略を持っていますか?

誰かが戦略を概念的に説明したいとしても、私はscikit-imageで実装しようとすることもできます。

ありがとうございました!

答えて

0

これは、ガウス混合モデルhttp://www.ics.uci.edu/~smyth/courses/cs274/notes/EMnotes.pdf

別の関連するアプローチは、(上記で簡単にリンクに覆わ)K平均クラスタリングあるため期待値最大化(EM)で解決することができる問題のように見えるの両方これらのうちクラスタ内の分散を低下させることによってデータをクラスタリングしようとします。 K-の場合、これは通常距離メトリックで行われ、EMはクラスタリングの確率を使用します。

両方のアプローチとの唯一の欠点は、あなたがあなたセグメント私はScikitの知識がないdata.Unfortunatelyの前にありますどのように多くのクラスタ知っている必要があり、うまくいけば、これは

0

に見て、あなたにいくつかのアイデアを与えるだろう私はこれがまさにあなたが探しているものなのかどうかわかりませんが、私はガウスのぼかしを実行し、背景とセルマトリックスから核を埋めてセグメント化するためにランダムウォーカーセグメンテーション(流域に似ています)を使用するスクリプトをまとめました。

セグメンテーションのぼかし(シグマ)と下限と上限の値を増減する値を使用して再生することができます。

私はそれをPNS Stain画像でテストしましたが、白い枠線をトリミングする必要がありました。

#griffinc StackOverflow 

import numpy as np 
import matplotlib.pyplot as plt 

from skimage.io import imread 
from skimage.segmentation import random_walker 
from skimage.color import rgb2grey 
from scipy.ndimage.filters import gaussian_filter 


#change this to your personal image directory 
image = imread(r'C:\Users\YOURNAMEHERE\Desktop\mge1v.png') 
grey_image = rgb2grey(image) 

blurred = gaussian_filter(grey_image, sigma=6) #play with sigma for blur amount 


#Get markers for random walk 
def get_markers(grey_array, bottom_thresh, top_thresh): 

    markers = np.zeros_like(grey_array) 
    markers[grey_array < bottom_thresh] = 1 
    markers[grey_array > top_thresh] = 2 

    return markers 


#perform Random Walker, fills in positive regions 
#play with .1 and .15 to set the thresholds for the labels 
segmentation = random_walker(blurred, get_markers(blurred, .1, .125), beta=130, mode='bf') 


#Plot images 
fig, axes = plt.subplots(2, 2, figsize=(12, 11)) 

ax0, ax1, ax2, ax3 = axes.ravel() 

ax0.imshow(image, cmap=plt.cm.gray, interpolation='nearest') 
ax0.set_title("Original") 

ax1.imshow(grey_image, cmap=plt.cm.gray, interpolation='nearest') 
ax1.set_title("Grey") 

ax2.imshow(blurred, cmap=plt.cm.gray) 
ax2.set_title("Gaussian Blur") 

ax3.imshow(segmentation, cmap=plt.cm.gray) 
ax3.set_title("Random Walk Segmented") 

for ax in axes.ravel(): 
    ax.axis('off') 

fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None) 


plt.show() 

出力:

The output of the question image, had to crop out the white