単一分子の画像からDNA繊維の長さを測定する


14

私は画像処理の経験がほとんどない生物学者ですが、MATLABについて十分な知識があり、画像処理ツールボックスを持っています。理想的には、MATLABベースのソリューションを探していますが、その実行方法を概説するアプローチも役立ちます。

更新(2011年11月28日) 合成画像(最初の質問で示したもの)を使用する場合、特定の問題(信号の重複や色の定義など)があるようです。2つのチャネルから別々の画像を添付しています:緑ここに画像の説明を入力してくださいと赤ここに画像の説明を入力してください(合成画像の青緑色の領域は無視できます)、および合成画像ここに画像の説明を入力してくださいです。赤チャンネルは、2つの理由で不良です。1。背景が高いためコントラストが低い。2。背景レベルで赤が緑に染み込んでいるように見えるため。

機能が同等緑-赤-青緑色、赤-緑または緑に2つの隣接する線形セグメントと同一直線上と伝染性である赤色を有する合成画像上の領域として定義されます。

2つの別々のチャネルからの画像を見ることで、機能の識別が容易になることを望んでいます。

アルゴリズムについて次の提案があります。

  1. 最初に同一直線上の緑のセグメントを特定します(そして緑のセグメントの長さを決定します)

  2. 赤のチャネルに、互いに向かい合って隣接する伝染性の同一線上セグメントが存在するかどうかを判断します(緑->赤-> <-赤<-緑)。「はい」の場合、緑のセグメントが終了する点(緑のセグメントと重なるため)から、他の赤のセグメントに最も近い赤のセグメント上の点までの赤のセグメントの長さを定義します。(つまり、赤のセグメントの端の1つは、重なっている緑のセグメントの端に設定されます)。

どうもありがとう!

背景

私の質問は、画像から特徴を抽出することに関するものです。

ここに画像の説明を入力してください

元の画像(tif)は次の場所にあります。

画像例1(ドロップボックス)

この画像は、3つのチャネル(tif形式)の合成です:赤、緑、青緑色。ターコイズ色の繊維は、カバースリップ上にあるすべてのDNAを単純にマークします。関心のある特徴は、画像の中央にある1本のDNA鎖にある緑-赤-ターコイズ-赤-緑の特徴です。

赤は一般的に最もうるさいです。コントラストが良いので、この例は良いです。ただし、画像があまり美しくなく、画像全体に色相がある場合があるため、緑と赤の色に特定のRGB値をハードコーディングすると、すべての画像で機能しない場合があります。また、繊維は必ずしも水平ではなく、回転する可能性があります(ただし、垂直になることはありません)。

例については、この画像を参照してください。

ここに画像の説明を入力してください 元の画像(tif)は次の場所にあります。

画像例2(ドロップボックス)

また、単一の画像にそのような多くの特徴がある場合もあれば、同じDNA鎖に複数の特徴がある場合もあります。最後に、部分的な特徴のみが存在する場合があります(つまり、孤立した緑または孤立した赤または孤立した緑赤のセグメントですが、ペアではありません)。

質問:

緑色と赤色のセグメントの個々のセグメントの長さを誰かが手伝ってくれると感謝します。つまり、関心のある特徴は緑-赤-ターコイズ-赤-緑なので、各特徴には5つの値の配列があります(最初の緑のセグメントの長さ、最初の赤のセグメントの長さ、青緑色のセグメントの長さ、2番目の赤のセグメントの長さ、2番目の緑のセグメントの長さ)


3
こんにちは、この質問はSignal Processingに移行しようとしています。私たちの焦点は画像処理とアルゴリズムにあり、それを求めるためにあなたの質問を編集しました。MATLABの知識のある人もいるかもしれませんが、他の言語(または擬似コード)で解決策を得られる可能性があります。MATLABでソリューションをまだ実装していない場合(MATLABの回答がまだない場合)、いつでもStack Overflowに戻って翻訳の支援を求めることができます。
ロレムイプサム

最初のステップは、各チャンネルを独立したチャンネルに保存することです。はい、CFPは青緑色ですが、緑のチャンネルからの信号をアンミックスする必要はありません。
ジョナス

回答:


11

Mathematicaの例:

(* Get your image*)
img = Import["http://dl.dropbox.com/u/18072545/c_29.tif"];
(*Detect the extended minima and remove background*)
nB = ImageSubtract[img, ColorNegate@FillingTransform@ColorNegate[img]]  

ここに画像の説明を入力してください

(*Separate RGB channels*)
cS = ImageAdjust /@ ColorSeparate[img]

ここに画像の説明を入力してください

(*Binarize*)
bcS = Binarize[#, .4] & /@ cS  

ここに画像の説明を入力してください

(*Remove large elements*)
tH = TopHatTransform[#, DiskMatrix[2]] & /@ bcS  

ここに画像の説明を入力してください

(*Detect lines using a Hough Transform*)
lines = ImageLines[#, .01, .8] & /@ tH
(*Plot them*)
Show[img, Graphics[{
   Thickness[.01], Red, Line /@ (lines[[1]]),
   Thickness[.006], Green, Line /@ (lines[[2]]),
   Thickness[.004], Blue, Line /@ (lines[[3]])}]]
(*Red and green are superimposed*)  

ここに画像の説明を入力してください

編集

ここでは、赤と緑のクラスターが別々に見える場合があります。想像できるよう、部分がいつ赤くなるかを決める必要があります!

ここに画像の説明を入力してください


ご回答ありがとうございます。この画像には特徴が1つしかないため、青い線が何を表しているのかはわかりません。赤/緑を重ね合わせた線上の赤と緑のセグメントだけの長さを取得することは可能ですか?
リーサンデ

1
@Leeもちろん可能です!ハフ変換を取得したら、膨張した線をマスクとして使用し、近くの赤い点を測定します。
ベリサリウス博士

@リー唯一気にしたいことは、「赤」の良い定義を持っていることです:)
ベリサリウス博士

@Lee Mathematicaにアクセスできる場合は、セグメントを分離するためにさらにコードを投稿できます
博士belisarius

ご回答ありがとうございます。あなたの応答から、赤のチャネルには問題があり、隣接する緑のセグメントと重複する信号を切り捨てる必要があることに気付きました。私は問題を更新しました。あなたが見て、それが理にかなっているかどうか教えてください。
リーサンデ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.