Este é mais um tutorial ImageJ que fiz com ideias dos leitores. Não, não vou mudar o nome do blog para BlogdoImageJ… tenho alguns artigos teóricos sendo preparados.
A ideia do tutorial de hoje é preparar terreno e colher alguns dados para falar de reconhecimento de padrões. Vamos começar com a mesma imagem sintética da semana passada, mas desta vez o objetivo é determinar a cor de cada bolinha.
Segmentação
O primeiro passo, o com acontece quase sempre, é a segmentação. A combinação de threshold com watershed funcionou bem para esta imagem, mas chega ao final com uma imagem binária, o que não é suficiente para medir cor. Mesmo assim, o começamos com aquela solução:

Segmentação da imagem: para saber como fazer, siga o link acima para o post sobre segmentação com watersheds.
Agora, combinamos o resultado desta segmentação com a imagem colorida, usando um cálculo de máxima. Explico: numa imagem RGB, o preto tem valor zero nos três canais e o branco tem o valor máximo. Qualquer cor, quando comparada ao preto terá o valor maior no pixel em questão. Desta forma, o que permaneceu preto no whatershed, fica com a cor que tinha antes, e o que ficou branco (as linhas divisórias) será branco na imagem resultado. Isto cria uma imagem colorida, com a mesma segmentação da imagem binária.
Como fazer no ImageJ:

Image Calculator
- Transforme a imagem binária em RGB (porque as duas precisam ter os 3 canais para a operação que se segue). Com a imagem binária em foco, vá em Image –> Type –> RGB Color.
- Com a imagem que você acabou de converter e a imagem colorida abertas, chame o Image Calculator: Process –> Image Calculator…
- Complete como na imagem ao lado, com as duas imagens (não importa a ordem) e a operação de máxima (Max). Clique OK.

As duas imagens e o resultado do cálculo de máxima.
Agora temos os objetos separados, exceto por aquele caso em que dois círculos estão muito sobrepostos.
Medir cor
No computador, cores são representadas por números, por isso podem ser medidas como qualquer outra grandeza. Neste exemplo, estamos medindo objetos em uma imagem RGB, e cada cor é representada por 3 números, um em cada canal de cor (vermelho, verde e azul).
Para selecionar o que o ImageJ deve medir, use o diálogo Set Measurements, do menu Analyse. Selecione Mean Gray Value e Modal Gray Value.
Agora feche todas as imagens, menos a imagem que resultou do cálculo de máxima (é importante para o próximo passo).
O Analisador de partículas não mede imagens RGB, por isso não vai ser possível medir a imagem diretamente. Mas podemos repartir a informação de cor em seus três canais, gerando 3 imagens em tons de cinza. Use Image –> Color –> Split channels… para obter os canais, e Image –> Stacks –> Images to Stack para unir as 3 imagens em uma pilha.
Agora é preciso indicar ao programa, qual parte das nossas imagens é o fundo, e quais são os objetos. Use o Threshold (Image –> Adjust –> Threshold…). Apenas escolha um nível de threshold que deixe o branco de fora (mínimo 0 e máximo 254). Não aplique, nem clique OK. Apenas deixe o diálogo aí.
Agora abra o analisador de partículas (Analyse –> Analyse Particles…). Marque Display results e Show Outlines. No OK, aparecerá um aviso sobre analisar toda a pilha (clique OK) – verá os seguintes resultados:

Os autlines dos três canais analisados (em ordem: vermelho, verde e azul).

Parte da tabela de resultados da análise.
E agora?
Bom, antes de mais nada, salve os resultados em um formato mais amigável. Infelizmente, o único disponível é o .xls. Salve assim mesmo – vai funcionar no Excel e no BrOffice, certamente.
Semana que vem vamos olhar estes dados de perto e ver o que podemos fazer com eles. Assine o feed, para ser avisado assim que sair.
Para seguir adiante:
- Classificação de objetos por centro de classe – parte I
- Classificação de objetos por centro de classe – parte II
E até mais!



Isto poderia ser utilizado para grãos de várias espécies ?
OI, Wagner! O mais legal de usar imagens é que esta e outras técnicas podem ser usadas para o que você imaginar. O que fiz neste artigo pode ser usado para identificar qualquer coisa que se diferencie por cor, o que acontece com alguns tipos de sementes, sim. Outros são diferenciados pelo tamanho e forma, o que exige o uso de outras características, mas o método de classificação fica bem parecido.
Eu estou trabalhando na minha dissertação com sementes de mamona, porém a fotografia tirada no laboratório LAQA da UFPB não foi preparada devidamente. Alguns problemas como a aproximadade, brilho intenso do flash da camera entre outros. A idéia é através das cores calcular a porcentagem de grãos das cultavares selecionadas para a pesquisa. O aplicativo ImageJ é muito bom para o processamento entretanto eu estou usando o MatLab aí a coisa muda um pouco de figura e estou com problemas para segmentar a imagem.
Oi Gabriela, achei teu blog bem legal! Mas estou precisando de um help… Preciso medir a intensidade luminosa de imagens de neurônios… imagino que deve ser da mesma maneira de como medir a cor dos objetos, mas não estou conseguindo reproduzir.
Olá Jaqueline!
Obrigada. Quanto à tua pergunta, não tenho a menor ideia, porque nunca vi uma destas imagens. Que tal enviar uma para o meu email?
(gabriela@imagesurvey.com.br)
Olá Gabriela, estou tentando aplicar o imageJ em fotos tiradas pela técnica da imunohistoquímica, onde eu verifico a marcação de anticorpos específicos no tecido hepático. A marcação é bem difusa, e fica marrom. O núcleo dos hepatócitos fica na cor violeta e a marcação específica fica em marrom geralmente no citoplasma da célula. Teria como eu quantificar essas marcações através desse software? fico no aguardo! grata.
Oi Wanessa,
Fiz uns testes com a imagem que você enviou, mas não consegui nada definitivo. Os limites não são claros, e além disso, a amplitude do histograma é baixa – o que faz com que nem os métodos de segmentação por cor ajudem. Tentei algumas operações de histograma (brilho, contraste) para ver se melhorava – pode ser que o caminho seja por aí…
Bom, respondendo… acho que dá, mas não é nada trivial, vais ter que pesquisar métodos mais específicos. Talvez encontre alguma publicação da sua área que mostre uma técnica adequada para este caso.
Até mais!
Ola Gabriela,tudo bem?
Em primeiro lugar parabéns pelo blog, essa sua atitude ajuda muitas pessoas.
Li um pouco sobre esse programa e achei muito interessante,
Eu análiso o colágeno e quantifico a coloração verde e vermelha (contando as variações de laranja ate amarelo).
Abri a minha imagem e Utilizei o Analyse -> Tools -> Color Histogram, e ele gerou um histograma com as cores vermelho, verde e azul. Gostaria de saber se dentro do vermelho esta incluído o amarelo e o laranja; qual é a unidade de medida que ele utiliza para quantificar e se a contagem do azul prejudica minha amostra, sendo que não há tons de azul na imagem. Desculpa por tantas perguntas, mas é que realmente me interessei muito, estou a muito tempo procurando um programa que quantifique essas tonalidades, ja tentei o imagelab mas não serve. Muitissimo Obrigada.
Olá, Jenifer!
Isto me lembra que eu preciso escrever um post sobre histogramas… o que tem por aí é sofrível!
Bom, vou tentar te explicar em poucas palavras, mas fique atenta ao próximo post, que eu acho que vai ser sobre histogramas.
- cada pixel da imagem é representado por 3 valores (um para vermelho (red) outro para verde e outro para o azul). As cores que você vê na tela são sempre uma combinação entre estes três valores. Portanto, o histograma não pode ser lido assim da maneira que você está interpretando.
- o histograma mede quantos píxels têm o valor zero em vermelho, quantos tem valor um em vermelho, etc. (a unidade é a quantidade de pixels).
- para quantificar cores, use este método: http://www.imagesurvey.com.br/2009/05/tutorial-imagej-como-medir-a-cor-dos-objetos/
Boa sorte, e até mais!
Gabriela, bom dia!
Faz 24 horas que entrei em contato com o imageJ e estou apanhando com o programa, mas chego lá. Estou gostando bastante. Bom, vamos ao meu problema. Estamos avaliando a pulverização de inseticidas sobre cartões hidrosensíveis comparando dois pulverizadores.
Basicamente estas avaliações são feitas pulverizando o inseticida (usei água) sobre papel hidrosensível. Este papel é amarelo e a parte que entra em contato com a água fica azul.
Após as pulverizações, escaneei os cartões em 600 dpi e salvei com a extensão Tiff. Entretanto não consigo efetuar alguns passos do seu tutorial “medir a cor dos objetos”, pois a intenção é relacionar a cor azul (área atingida pela água) com a área amarela (não atingida) e comparar as pulverizações dos dois pulverizadores. Se você puder me ajudar nisto, fico MUITO agradecido.
Alex
Olá Alex,
Parece interessante seu trabalho… quais passos exatamente você não conseguiu executar?
Existe um limite claro entre o azul e o amarelo das suas imagens? Eles são realmente diferentes ou se confundem de alguma forma? Se você converter sua imagem para tons de cinza ainda consegue enxergar as duas cores? Se separar em canais (“split channels”) há algum canal em que se vê mais diferença entre suas duas cores?
Olá Gabriela. Seu comentários são ótimos.
Trabalho com raspados de células corados com Papanicolaou. Gostaria de saber se é possivel, analisar a cor roxa, de nucleos corados, determinando um padrão normal e pedir ao imagej para marcar tudo o que for roxo mais intenso do que o núcleo que eu nomeei como normal.
Olá Luciano,
Você acabou de descrever a operação de Threshold. O problema é que pelo que eu conheço deste tipo de imagens, esses núcleos nunca ficam muito mais corados que o resto, então pode ser que não fique tão bom. Já vi dar certo usando mean-shift…
Boa sorte e até mais!
Bom dia gabriela, recentemente você me forneceu uma saída para o meu problema. Segue abaixo sua sugestão. Entranto não consigo executa-la. Terial algum tutorial para poder seguir?
Obrigado
Alex
Minha sugestão é a seguinte:
- Scaneie (esta palavra existe?) também um papel que não foi pulverizado – com um grupo de controle.
- recorte em todas as imagens somente a área de interesse (a pulverizada)
- depois separe em canais (não sei se RGB, HSV ou outro sistema) tanto as amostras quanto o controle.
- então compare cada amostra com a original, usando uma função de subtração ou diferença (tem que testar e ver qual funciona melhor)
- destas imagens resultado (controle – amostraX) você pode extrair algumas informações estatísticas em cada canal de cor (média, desvio-padrão, por exemplo) dos valores dos pixels. Isto vai ser seu resultado.
ola
gostaria de saber se para quantificar a intensidade da fluorescencia verde olhando pelo histograma a imagem tem que estar em 8 bit ou rgb??? pq os valores ficam bem diferentes quando muda de 8bit para rgb.
Obrigada
Camila
Camila, é claro que os valores ficam diferentes!
Uma imagem de 8bits só tem um canal de cor equando uma rgb tem 3 canais.
Agora, para saber de qual das duas você precisa, vai ter que decidir qual é a informação mais útil prá você. Ou você copia alguém que já fez (pesquisa no google por trabalhos com objetivos semelhantes ao seu) ou você estuda sobre cores e histograma (na biblioteca).
Até mais!
Bom dia!!! que legal este blog!!!! Queria saber se é possível trabalhar com esta ferramenta para avaliar imagens de feridas???? Estou pensando em meu trabalho de pós doutorado em Portugal. abraços, Rinaldo.
Olá Rinaldo!
Imagens de feridas são imagens como quaisquer outras… você só tem que decidir quais características vai avaliar nelas (tamanho, cor, textura…), ou seja, tem que decidir qual a pergunta. Quando tiveres a pergunta certa, a resposta fica bem mais fácil!