Mengukur panjang serat DNA dari gambar molekul tunggal

14

Saya seorang ahli biologi dengan pengalaman yang sangat sedikit dengan pemrosesan gambar tetapi memiliki pengetahuan yang cukup tentang MATLAB dan memiliki kotak alat pemrosesan gambar. Idealnya saya mencari solusi berbasis MATLAB, tetapi pendekatan yang menguraikan cara melakukannya juga akan sangat membantu.

Pembaruan (28 Nov 2011) Tampaknya ada masalah tertentu (seperti sinyal dan definisi warna yang tumpang tindih) saat menggunakan gambar komposit (yang saya sajikan dalam pertanyaan awal). Saya melampirkan gambar terpisah dari 2 saluran: hijau masukkan deskripsi gambar di sinidan merah masukkan deskripsi gambar di sini(daerah pirus dalam gambar komposit dapat diabaikan), dan gambar coposite masukkan deskripsi gambar di sini. Saluran merah buruk karena 2 alasan: 1. Memiliki kontras yang buruk karena latar belakang yang lebih tinggi, 2. Karena Merah tampaknya berdarah ke hijau di tingkat latar belakang.

Sebuah fitur didefinisikan sebagai wilayah pada gambar komposit yang memiliki Green-Red-pirus-Red-Green atau ekuivalen 2 segmen linier yang berdekatan di hijau dan merah yang colinear dan menular.

Saya berharap bahwa melihat gambar dari dua saluran yang terpisah membuat identifikasi fitur lebih mudah.

Saya punya saran berikut untuk algoritme:

  1. Pertama mengidentifikasi segmen hijau co-linear (dan menentukan panjang segmen hijau)

  2. Tentukan apakah ada segmen menular dan colinear yang berdekatan menghadap satu sama lain (yaitu hijau-> merah-> <-red <-hijau) di saluran merah. Jika ya tentukan panjang segmen merah dari titik di mana segmen hijau berakhir (karena mereka akan tumpang tindih dengan segmen hijau) sampai titik di segmen merah yang paling dekat dengan segmen merah lainnya dari fitur. (Yaitu salah satu ujung segmen merah diatur ke ujung segmen hijau yang tumpang tindih).

Terimakasih banyak!

Latar belakang :

Pertanyaan saya berkaitan dengan mengekstraksi fitur dari gambar:

masukkan deskripsi gambar di sini

Gambar asli (tif) terletak di sini:

Contoh gambar 1 (dropbox)

Gambar ini adalah gabungan dari 3 saluran (dalam format tif): merah, hijau, dan pirus. Serat berwarna pirus hanya menandai semua DNA yang kita miliki di sampulnya. Fitur yang menarik adalah fitur Hijau-Merah - pirus - Merah-Hijau pada untai DNA tunggal yang merupakan bagian tengah gambar.

Merah umumnya yang paling berisik. Contoh ini bagus karena kontrasnya bagus. Namun, kadang-kadang gambar tidak begitu bagus dan ada rona di seluruh gambar, jadi pengodean keras nilai RGB tertentu untuk warna hijau dan merah mungkin tidak bekerja untuk semua gambar. Juga, perhatikan bahwa serat tidak harus horizontal, mereka dapat diputar (tetapi tidak pernah vertikal).

Silakan lihat gambar ini sebagai contoh:

masukkan deskripsi gambar di sini Gambar asli (tif) terletak di sini:

Contoh gambar 2 (dropbox)

Juga, kadang-kadang gambar tunggal memiliki banyak fitur seperti itu dan kadang-kadang ada banyak fitur pada untai DNA yang sama. Akhirnya kadang-kadang mungkin hanya ada sebagian fitur (yaitu terisolasi hijau atau merah terisolasi atau segmen hijau-merah terisolasi, tetapi tidak berpasangan).

Pertanyaan:

Saya akan berterima kasih jika seseorang dapat membantu saya mendapatkan panjang segmen individu hijau dan segmen merah yaitu karena fitur yang menarik adalah Hijau-Merah - Pirus - Merah-Hijau, setiap fitur akan memiliki array 5 nilai (panjang segmen hijau pertama, panjang segmen merah pertama, panjang segmen pirus, panjang segmen Merah kedua dan panjang segmen Hijau kedua).

Lee Sande
sumber
3
Halo, pertanyaan ini akan segera dimigrasi ke Pemrosesan Sinyal . Fokus kami adalah pada pemrosesan gambar dan algoritma, dan saya telah mengedit pertanyaan Anda untuk menanyakannya. Meskipun mungkin ada orang-orang yang berpengetahuan luas di MATLAB, Anda mungkin mendapatkan solusi dalam bahasa lain (atau kodesemu), yang akan memandu Anda menuju jawabannya. Jika Anda masih terjebak dalam mengimplementasikan solusi di MATLAB (dengan asumsi Anda belum mendapatkan jawaban MATLAB), Anda selalu dapat kembali ke Stack Overflow untuk meminta bantuan dalam menerjemahkan.
Lorem Ipsum
Langkah pertama adalah menyimpan setiap sinyal dalam saluran independennya. Ya, CFP berwarna biru kehijauan, tetapi Anda tidak perlu mencampurkan sinyalnya dari saluran hijau.
Jonas

Jawaban:

11

Contoh dalam 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]]  

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Edit

Di sini Anda dapat melihat cluster Merah dan Hijau terpisah. Seperti yang dapat Anda bayangkan, Anda harus memutuskan kapan sebagian berwarna merah!

masukkan deskripsi gambar di sini

Belisarius
sumber
Terima kasih banyak atas jawaban Anda. Saya tidak jelas apa garis biru seharusnya mewakili karena hanya ada satu fitur di gambar ini. Apakah mungkin untuk mendapatkan panjang hanya segmen merah dan hijau pada garis di mana Anda telah menumpangkan merah / hijau ?.
Lee Sande
1
@ Lee Tentu saja itu mungkin! Setelah Anda memiliki transformasi Hough, gunakan garis melebar sebagai topeng dan mengukur titik merah terdekat.
Dr. belisarius
@ Lee Satu-satunya pemikiran untuk peduli adalah memiliki definisi yang baik tentang "merah" :)
Dr. belisarius
@ Lee Jika Anda memiliki akses ke Mathematica, saya dapat memposting beberapa kode lagi untuk memisahkan segmen
Dr. belisarius
Terimakasih banyak untuk respon Anda. Saya menyadari dari respons Anda bahwa saluran merah bermasalah dan sinyal yang tumpang tindih dengan segmen hijau yang berdekatan harus dipotong. Saya telah memperbarui masalah - bisakah Anda melihatnya dan memberi tahu saya jika ini masuk akal?
Lee Sande