Messung der Länge von DNA-Fasern aus einem Bild einzelner Moleküle


14

Ich bin ein Biologe mit sehr wenig Erfahrung in der Bildverarbeitung, aber ausreichenden Kenntnissen von MATLAB und habe die Bildverarbeitungs-Toolbox. Idealerweise bin ich auf der Suche nach einer MATLAB-basierten Lösung, aber ein Ansatz, der die Vorgehensweise beschreibt, wäre auch hilfreich.

Update (28. November 2011) Bei der Verwendung von zusammengesetzten Bildern treten anscheinend bestimmte Probleme auf (z. B. Überlappungen bei Signal und Farbdefinition) (wie in der ersten Frage dargestellt). Ich füge separate Bilder aus den beiden Kanälen hinzu: Grün Bildbeschreibung hier eingebenund Rot Bildbeschreibung hier eingeben(die türkisfarbenen Bereiche im zusammengesetzten Bild können ignoriert werden) und das zusammengesetzte Bild Bildbeschreibung hier eingeben. Der rote Kanal ist aus zwei Gründen schlecht: 1. Er hat einen schlechten Kontrast aufgrund eines höheren Hintergrunds. 2. Da Rot auf der Hintergrundebene ins Grüne zu bluten scheint.

Ein Feature ist definiert als ein Bereich auf dem zusammengesetzten Bild, der Grün-Rot-Türkis-Rot-Grün aufweist, oder gleichwertig die 2 benachbarten linearen Segmente auf dem Grün und dem Rot, die kollinear und ansteckend sind.

Ich hoffe, dass das Betrachten der Bilder aus den beiden getrennten Kanälen die Identifizierung der Merkmale erleichtert.

Ich habe folgende Vorschläge für den Algorithmus:

  1. Identifizieren Sie zuerst kolineare grüne Segmente (und bestimmen Sie die Länge der grünen Segmente)

  2. Stellen Sie fest, ob benachbarte ansteckende und kolineare Segmente im roten Kanal einander zugewandt sind (dh grün-> rot-> <-rot <-grün). Wenn ja, definieren Sie die Länge des roten Segments ab dem Punkt, an dem die grünen Segmente enden (da sie sich mit den grünen Segmenten überschneiden), bis zu dem Punkt auf dem roten Segment, der dem anderen roten Segment des Features am nächsten liegt. (dh eines der Enden des roten Segments befindet sich am Ende des überlappenden grünen Segments).

Danke vielmals!

Hintergrund :

Meine Frage bezieht sich auf das Extrahieren von Merkmalen aus einem Bild:

Bildbeschreibung hier eingeben

Das Originalbild (tif) befindet sich hier:

Bildbeispiel 1 (Dropbox)

Dieses Bild besteht aus 3 Kanälen (im TIF-Format): Rot, Grün und Türkis. Die türkisfarbenen Fasern markieren einfach die gesamte DNA, die wir auf dem Deckglas haben. Das interessante Merkmal ist das Grün-Rot-Türkis-Rot-Grün-Merkmal auf dem einzelnen DNA-Strang, der sich in der Mitte des Bildes befindet.

Rot ist im Allgemeinen am lautesten. Dieses Beispiel ist gut, weil der Kontrast gut ist. Manchmal sind die Bilder jedoch nicht so schön und das gesamte Bild weist Farbtöne auf. Daher funktioniert die harte Kodierung eines bestimmten RGB-Werts für die grüne und rote Farbe möglicherweise nicht für alle Bilder. Beachten Sie auch, dass die Fasern nicht unbedingt horizontal sind, sondern möglicherweise gedreht werden (aber niemals vertikal).

Bitte sehen Sie dieses Bild für ein Beispiel:

Bildbeschreibung hier eingeben Das Originalbild (tif) befindet sich hier:

Bildbeispiel 2 (Dropbox)

Manchmal weist ein einzelnes Bild viele solcher Merkmale auf, und manchmal befinden sich mehrere Merkmale auf demselben DNA-Strang. Schließlich können manchmal nur Teilmerkmale vorhanden sein (dh isolierte grüne oder isolierte rote oder isolierte grün-rote Segmente, aber ungepaart).

Frage:

Ich wäre dankbar, wenn mir jemand helfen könnte, die Längen der einzelnen Segmente von grünen und roten Segmenten zu ermitteln, dh da das interessierende Merkmal Grün-Rot - Türkis - Rot-Grün ist, hätte jedes Merkmal ein Array von 5 Werten (Länge des ersten grünen Segments, Länge des ersten roten Segments, Länge des türkisen Segments, Länge des zweiten roten Segments und Länge des zweiten grünen Segments).


3
Hallo, diese Frage wird in Kürze zur Signalverarbeitung migriert . Unser Fokus liegt auf Bildverarbeitung und Algorithmen, und ich habe Ihre Frage bearbeitet, um Sie danach zu fragen. Obwohl es in MATLAB möglicherweise Experten gibt, erhalten Sie möglicherweise Lösungen in anderen Sprachen (oder Pseudocodes), die Sie zur Antwort führen. Wenn Sie immer noch nicht in der Lage sind, die Lösung in MATLAB zu implementieren (vorausgesetzt, Sie haben noch keine MATLAB-Antwort erhalten), können Sie jederzeit zu Stack Overflow zurückkehren , um Hilfe bei der Übersetzung anzufordern .
Lorem Ipsum

Ein erster Schritt sollte darin bestehen, jedes Signal in seinem unabhängigen Kanal zu speichern. Ja, CFP ist türkis, aber Sie sollten sein Signal nicht vom grünen Kanal abmischen müssen.
Jonas

Antworten:


11

Beispiel in 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]]  

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

(*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*)  

Bildbeschreibung hier eingeben

Bearbeiten

Hier sehen Sie möglicherweise die roten und grünen Cluster getrennt. Wie Sie sich vorstellen können, müssen Sie sich entscheiden, wann eine Portion rot ist!

Bildbeschreibung hier eingeben


Vielen Dank für Ihre Antwort. Mir ist nicht klar, was die blaue Linie darstellen soll, da es nur ein Merkmal in diesem Bild gibt. Ist es möglich, die Länge nur der roten und grünen Segmente auf der Linie zu ermitteln, auf der Sie Rot / Grün überlagert haben?
Lee Sande

1
@Lee Natürlich ist es möglich! Wenn Sie die Hough-Transformation durchgeführt haben, verwenden Sie die erweiterte Linie als Maske und messen Sie nahegelegene rote Punkte.
Dr. Belisarius

@Lee Der einzige Grund zur Sorge ist eine gute Definition von "rot" :)
Dr. belisarius

@Lee Wenn Sie Zugriff auf Mathematica haben, könnte ich etwas mehr Code veröffentlichen, um die Segmente zu trennen
Dr. belisarius

Vielen Dank für deine Antwort. Ich habe aus Ihrer Antwort erkannt, dass der rote Kanal problematisch ist und das Signal, das das benachbarte grüne Segment überlappt, abgeschnitten werden müsste. Ich habe das Problem aktualisiert. Könnten Sie bitte einen Blick darauf werfen und mir mitteilen, ob es sinnvoll ist?
Lee Sande
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.