Измерение длины волокон ДНК по изображению отдельных молекул

14

Я биолог с очень небольшим опытом работы с изображениями, но обладаю достаточными знаниями в MATLAB и имею набор инструментов для обработки изображений. В идеале я ищу решение на основе MATLAB, но подход, описывающий, как это сделать, также был бы полезен.

Обновление (28 ноября 2011 г.) Похоже, что существуют определенные проблемы (например, перекрытия в сигнале и определение цвета) при использовании составных изображений (что я и представил в первоначальном вопросе). Я прилагаю отдельные изображения из двух каналов: зеленого введите описание изображения здесьи красного введите описание изображения здесь(бирюзовые области в составном изображении можно игнорировать) и копоитное изображение введите описание изображения здесь. Красный канал плох по двум причинам: 1. У него плохая контрастность из-за более высокого фона, 2. Так как красный, кажется, кровоточит в зеленый на уровне фона.

Функция определяется как область на составном изображении , который имеет зелено-красно-бирюзовый-красный-зеленый или , что эквивалентно 2 смежных линейных сегментов на зеленый и красный , которые коллинеарны и заразным.

Я надеюсь, что просмотр изображений из двух отдельных каналов облегчит идентификацию функций.

У меня есть следующие предложения для алгоритма:

  1. Сначала идентифицируйте коллинеарные зеленые сегменты (и определите длину зеленых сегментов)

  2. Определите, есть ли смежные контагиозные и коллинеарные сегменты, обращенные друг к другу (т.е. зеленые-> красные-> <-red <-зеленые) в красном канале. Если да, определите длину красного сегмента от точки, где заканчиваются зеленые сегменты (потому что они будут перекрываться с зелеными сегментами), до точки на красном сегменте, которая является ближайшей к другому красному сегменту объекта. (то есть один из концов красного сегмента установлен на конец перекрывающегося зеленого сегмента).

Большое спасибо!

Справочная информация :

Мой вопрос касается извлечения функции из изображения:

введите описание изображения здесь

Исходное изображение (TIF) находится здесь:

Пример изображения 1 (выпадающий список)

Это изображение состоит из 3 каналов (в формате TIF): красный, зеленый и бирюзовый. Волокна бирюзового цвета просто маркируют всю ДНК, которую мы имеем на покровном стекле. Интересной особенностью является зеленый-красный-бирюзовый-красно-зеленый элемент на одной нити ДНК, которая является серединой изображения.

Красный вообще самый шумный. Этот пример хорош, потому что контраст хорош. Однако иногда изображения не так хороши, и по всему изображению присутствует оттенок, поэтому жесткое кодирование определенного значения RGB для зеленого и красного цветов может работать не для всех изображений. Кроме того, обратите внимание, что волокна не обязательно горизонтальные, они могут вращаться (но не вертикальные).

Пожалуйста, смотрите это изображение для примера:

введите описание изображения здесь Исходное изображение (TIF) находится здесь:

Пример изображения 2 (выпадающий список)

Кроме того, иногда одно изображение имеет много таких признаков, а иногда есть несколько признаков на одной цепи ДНК. Наконец, иногда могут быть только частичные признаки (то есть изолированные зеленые или изолированные красные или изолированные зелено-красные сегменты, но непарные).

Вопрос:

Я был бы признателен, если бы кто-нибудь мог помочь мне получить длины отдельных сегментов зеленого и красного сегментов, т. Е. Поскольку интересующей особенностью является зеленый-красный-бирюзовый-красный-зеленый, каждая функция будет иметь массив из 5 значений (длина первого зеленого сегмента, длина первого красного сегмента, длина бирюзового сегмента, длина второго красного сегмента и длина второго зеленого сегмента).

Ли Санде
источник
3
Здравствуйте, этот вопрос собирается перейти на обработку сигналов . Мы сосредоточены на обработке изображений и алгоритмах, и я отредактировал ваш вопрос, чтобы спросить об этом. Хотя в MATLAB могут быть знакомые люди, вы можете получить решения на других языках (или псевдокоде), которые помогут вам найти ответ. Если вы все еще застряли в реализации решения в MATLAB (при условии, что вы еще не получили ответ MATLAB), вы всегда можете вернуться в Stack Overflow и попросить помощи в переводе.
Lorem Ipsum
Первым шагом должно быть сохранение каждого сигнала в его независимом канале. Да, 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
@ Ли Конечно, это возможно! Получив преобразование Хафа, используйте расширенную линию в качестве маски и измерьте близлежащие красные точки.
Доктор Велисарий
@ Ли Единственное, о чем нужно заботиться, это иметь хорошее определение «красный» :)
Доктор Белизариус,
@ Ли Если у вас есть доступ к Mathematica, я мог бы опубликовать еще немного кода для разделения сегментов
доктор Белизарий,
Большое спасибо за ваш ответ. Из вашего ответа я понял, что красный канал проблематичен, и сигнал, перекрывающий соседний зеленый сегмент, должен быть обрезан. Я обновил проблему - не могли бы вы взглянуть и сказать мне, если это имеет смысл?
Ли Санд