Pomiar długości włókien DNA na podstawie obrazu pojedynczych cząsteczek

14

Jestem biologiem z bardzo niewielkim doświadczeniem w przetwarzaniu obrazów, ale mam wystarczającą wiedzę na temat MATLAB i mam zestaw narzędzi do przetwarzania obrazów. Idealnie szukam rozwiązania opartego na MATLAB, ale pomocne byłoby również podejście opisujące, jak to zrobić.

Aktualizacja (28 listopada 2011 r.) Wydaje się, że istnieją pewne problemy (takie jak nakładanie się sygnału i definicji koloru) podczas korzystania z obrazów kompozytowych (co przedstawiłem w pytaniu wstępnym). Dołączam osobne obrazy z 2 kanałów: zielony wprowadź opis zdjęcia tutaji czerwony wprowadź opis zdjęcia tutaj(turkusowe obszary na obrazie złożonym można zignorować) oraz obraz złożony wprowadź opis zdjęcia tutaj. Czerwony kanał jest zły z 2 powodów: 1. Ma słaby kontrast z powodu wyższego tła, 2. Ponieważ czerwony wydaje się krwawić na zielono na poziomie tła.

Cechą jest zdefiniowany jako obszar o złożony obraz, który ma zielony-czerwony-turkusowo-czerwony-zielony lub równoważnie 2 sąsiadujące segmenty liniowe na zielonym i czerwonym, które są współliniowe i zakaźny.

Mam nadzieję, że oglądanie obrazów z dwóch oddzielnych kanałów ułatwi identyfikację funkcji.

Mam następujące sugestie dotyczące algorytmu:

  1. Najpierw zidentyfikuj współliniowe zielone segmenty (i określ długości zielonych segmentów)

  2. Ustal, czy w kanale czerwonym znajdują się sąsiednie segmenty zakaźne i kolinearne skierowane ku sobie (tj. Zielony-> czerwony-> <-czerwony <-zielony). Jeśli tak, określ długość czerwonego segmentu od punktu, w którym kończą się zielone segmenty (ponieważ będą się one nakładać z zielonymi segmentami), aż do punktu na czerwonym segmencie, który znajduje się najbliżej drugiego czerwonego segmentu obiektu. (tzn. jeden z końców czerwonego segmentu jest ustawiony na koniec nakładającego się zielonego segmentu).

Wielkie dzięki!

Tło :

Moje pytanie dotyczy wyodrębnienia funkcji z obrazu:

wprowadź opis zdjęcia tutaj

Oryginalny obraz (tif) znajduje się tutaj:

Przykład obrazu 1 (dropbox)

Ten obraz jest złożony z 3 kanałów (w formacie tif): czerwonego, zielonego i turkusowego. Turkusowe włókna po prostu zaznaczają całe DNA, które mamy na szkiełku nakrywkowym. Interesującą cechą jest zielono-czerwony - turkusowy - czerwono-zielony element na pojedynczej nici DNA, która jest środkiem obrazu.

Czerwień jest generalnie najgłośniejsza. Ten przykład jest dobry, ponieważ kontrast jest dobry. Czasami jednak obrazy nie są tak ładne i na obrazie jest odcień, więc twarde kodowanie określonej wartości RGB dla koloru zielonego i czerwonego może nie działać dla wszystkich obrazów. Należy również pamiętać, że włókna niekoniecznie są poziome, mogą być obracane (ale nigdy pionowe).

Zobacz to zdjęcie jako przykład:

wprowadź opis zdjęcia tutaj Oryginalny obraz (tif) znajduje się tutaj:

Przykład obrazu 2 (dropbox)

Czasami pojedynczy obraz ma wiele takich cech, a czasem wiele cech tego samego łańcucha DNA. Wreszcie czasami mogą występować tylko częściowe cechy (tj. Izolowane zielone lub izolowane czerwone lub izolowane zielono-czerwone segmenty, ale niesparowane).

Pytanie:

Byłbym wdzięczny, gdyby ktoś mógł mi pomóc w uzyskaniu długości poszczególnych segmentów zielonych i czerwonych segmentów, tj. Ponieważ interesującą cechą jest zielono-czerwony - turkusowy - czerwono-zielony, każda cecha miałaby tablicę 5 wartości (długość pierwszego zielonego segmentu, długość pierwszego czerwonego segmentu, długość turkusowego segmentu, długość drugiego czerwonego segmentu i długość drugiego zielonego segmentu).

Lee Sande
źródło
3
Witaj, to pytanie zostanie wkrótce przeniesione do przetwarzania sygnałów . Koncentrujemy się na przetwarzaniu obrazów i algorytmach, a ja zredagowałem twoje pytanie, aby o to poprosić. Chociaż w MATLAB mogą znajdować się osoby znające się na rzeczy, możesz uzyskać rozwiązania w innych językach (lub pseudokodzie), które poprowadzą cię do odpowiedzi. Jeśli nadal tkwisz we wdrażaniu rozwiązania w MATLAB (zakładając, że nie otrzymałeś jeszcze odpowiedzi MATLAB), zawsze możesz wrócić do Stack Overflow, aby poprosić o pomoc w tłumaczeniu.
Lorem Ipsum
Pierwszym krokiem powinno być zapisanie każdego sygnału w jego niezależnym kanale. Tak, CFP jest turkusowy, ale nie powinieneś usuwać miksowania sygnału z zielonego kanału.
Jonas

Odpowiedzi:

11

Przykład w 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]]  

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

Edytować

Tutaj możesz zobaczyć czerwone i zielone skupiska. Jak możesz sobie wyobrazić, musisz zdecydować, kiedy porcja jest czerwona!

wprowadź opis zdjęcia tutaj

Dr Belizariusz
źródło
Wielkie dzięki za odpowiedź. Nie jestem pewien, co ma przedstawiać niebieska linia, ponieważ na tym obrazie jest tylko jedna cecha. Czy możliwe jest uzyskanie długości tylko czerwonego i zielonego segmentu na linii, na którą nałożyłeś czerwony / zielony ?.
Lee Sande,
1
@Lee Oczywiście, że jest to możliwe! Po przekształceniu Hougha użyj rozszerzonej linii jako maski i zmierz pobliskie czerwone punkty.
Dr belisarius
@Lee Jedyną rzeczą, na którą trzeba zwrócić uwagę, jest dobra definicja „czerwonego” :)
Dr. Belisarius
@Lee Jeśli masz dostęp do Mathematica, mógłbym napisać trochę więcej kodu, aby oddzielić segmenty
dr belisarius
Wielkie dzięki za odpowiedź. Z twojej odpowiedzi zdałem sobie sprawę, że czerwony kanał jest problematyczny i sygnał nakładający się na sąsiedni zielony segment musiałby zostać obcięty. Zaktualizowałem problem - czy mógłbyś rzucić okiem i powiedzieć, czy to ma sens?
Lee Sande,