Medição do comprimento das fibras de DNA a partir de uma imagem de moléculas únicas


14

Eu sou um biólogo com muito pouca experiência com processamento de imagem, mas tenho conhecimento suficiente do MATLAB e tenho a caixa de ferramentas de processamento de imagem. Idealmente, estou procurando uma solução baseada em MATLAB, mas uma abordagem que descreve como fazê-lo também seria útil.

Atualização (28 de novembro de 2011) Parece que existem certos problemas (como sobreposições no sinal e definição de cor) ao usar imagens compostas (que é o que apresentei na pergunta inicial). Estou anexando imagens separadas dos 2 canais: verde insira a descrição da imagem aquie vermelho insira a descrição da imagem aqui(as regiões turquesas na imagem composta podem ser ignoradas) e a imagem de coposite insira a descrição da imagem aqui. O canal vermelho é ruim por 2 razões: 1. Possui um contraste ruim devido ao fundo mais alto, 2. Como o vermelho parece sangrar no verde no nível do fundo.

Um recurso é definido como uma região na imagem composta que possui Verde-Vermelho-Turquesa-Vermelho-Verde ou equivalentemente os 2 segmentos lineares adjacentes no verde e no vermelho que são colineares e contagiosos.

Espero que olhar para as imagens dos dois canais separados facilite a identificação dos recursos.

Eu tenho as seguintes sugestões para o algoritmo:

  1. Primeiro, identifique segmentos verdes co-lineares (e determine os comprimentos dos segmentos verdes)

  2. Determine se existem segmentos contagiosos e colineares adjacentes voltados um para o outro (ou seja, verde-> vermelho-> <-ver <-verde) no canal vermelho. Se sim, defina o comprimento do segmento vermelho do ponto em que os segmentos verdes terminam (porque eles se sobrepõem aos segmentos verdes) até o ponto no segmento vermelho mais próximo do outro segmento vermelho do recurso. (ou seja, uma das extremidades do segmento vermelho é definida para o final do segmento verde sobreposto).

Muito Obrigado!

Antecedentes :

Minha pergunta está relacionada à extração do recurso de uma imagem:

insira a descrição da imagem aqui

A imagem original (tif) está localizada aqui:

Exemplo de imagem 1 (dropbox)

Esta imagem é composta por 3 canais (em formato tif): vermelho, verde e turquesa. As fibras de cor turquesa simplesmente marcam todo o DNA que temos na lamela. O recurso de interesse é o recurso Verde-Vermelho - turquesa - Vermelho-Verde na única cadeia de DNA que fica no meio da imagem.

Vermelho é geralmente o mais barulhento. Este exemplo é bom porque o contraste é bom. No entanto, às vezes as imagens não são tão agradáveis ​​e há matiz em toda a imagem, portanto, codificar um valor RGB específico para as cores verde e vermelho pode não funcionar em todas as imagens. Além disso, observe que as fibras não são necessariamente horizontais; elas podem ser giradas (mas nunca na vertical).

Por favor, veja esta imagem para um exemplo:

insira a descrição da imagem aqui A imagem original (tif) está localizada aqui:

Exemplo de imagem 2 (dropbox)

Além disso, às vezes uma única imagem tem muitos desses recursos e, às vezes, há vários recursos na mesma fita de DNA. Finalmente, às vezes, pode haver apenas características parciais (ou seja, verde isolado ou vermelho isolado ou segmentos verde-vermelho isolados, mas não emparelhados).

Questão:

Ficaria muito grato se alguém puder me ajudar a obter os comprimentos dos segmentos individuais dos segmentos verde e vermelho, ou seja, como o recurso de interesse é Verde-Vermelho - turquesa - Vermelho-Verde, cada recurso terá uma matriz de 5 valores (comprimento do primeiro segmento verde, comprimento do primeiro segmento vermelho, comprimento do segmento turquesa, comprimento do segundo segmento vermelho e comprimento do segundo segmento verde).


3
Olá, esta pergunta está prestes a ser migrada para o Processamento de sinais . Nosso foco está no processamento de imagens e algoritmos, e eu editei sua pergunta para fazer isso. Embora possa haver pessoas qualificadas no MATLAB, você pode obter soluções em outros idiomas (ou pseudocódigo), que o guiarão para a resposta. Se você ainda está impedido de implementar a solução no MATLAB (supondo que ainda não tenha recebido uma resposta do MATLAB), sempre pode voltar ao Stack Overflow para pedir ajuda na tradução.
Lorem Ipsum

Um primeiro passo deve ser armazenar cada sinal em seu canal independente. Sim, o CFP é turquesa, mas você não precisa desmistificar o sinal do canal verde.
Jonas

Respostas:


11

Exemplo no 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]]  

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Editar

Aqui você pode ver os clusters de vermelho e verde separados. Como você pode imaginar, você deve decidir quando uma porção é vermelha!

insira a descrição da imagem aqui


Muito obrigado pela sua resposta. Não estou claro o que a linha azul deve representar, pois há apenas um recurso nesta imagem. É possível obter os comprimentos apenas dos segmentos vermelho e verde na linha em que você sobrepôs vermelho / verde ?.
Lee Sande

1
@ Lee Claro que é possível! Depois de transformar a Hough, use a linha dilatada como uma máscara e meça os pontos vermelhos próximos.
Dr. belisarius

@Lee A única coisa que importa é ter uma definição boa de "vermelho" :)
Dr. belisarius

@Lee Se você tem acesso a Mathematica, eu poderia postar mais algum código para separar os segmentos
Dr. belisarius

Muito obrigado pela sua resposta. Percebi pela sua resposta que o canal vermelho é problemático e o sinal sobreposto ao segmento verde adjacente teria que ser truncado. Eu atualizei o problema - você poderia dar uma olhada e me dizer se faz sentido?
Lee Sande
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.