O ImageJ é um software de processamento e análise de imagens de código aberto, feito em Java, e extensível através de plugins. Foram estas as características que me fizeram optar por ele para construir exemplos aqui no blog, assim ninguém precisa piratear… ops! comprar licença de software proprietário para acompanhar os tutoriais.
Contar objetos é uma tarefa que tem a matemática já bem conhecida pelos pesquisadores de análise de imagens, e é bastante versátil em aplicações: pode contar células em um exame de sangue, partículas em uma lâmina de caracterização de minérios, ou defeitos em uma peça de fabricação industrial. Tudo isso depois de ter segmentado os objetos.
Depois de revirar o Flickr e o Wikimedia Commons à procura de uma imagem de células bem didática… desisti! Vou usar uma imagem de letras, afinal reconhecimento de caracteres também é uma área de aplicação bem interessante de se explorar.

Escrevi o endereço do blog com canetinha e digitalizei no meu scanner hp. Usei o Gimp para esta tarefa porque o ImageJ não tem este recurso (pelo menos não a versão básica, mas pode ser que alguém já tenha feito um plugin). Adquiri uma imagem colorida de 600 dpi (que é mais que suficiente), depois salvei em TIFF, para não perder informação.
Convertendo para tens de cinza
A primeira coisa a fazer aqui é descartar a informação de cor, já que ela não vai ajudar aqui. A melhor forma de fazer isso quase nunca é convertendo diretamente para 8 bits. Neste caso, quanto mais contraste houver entre os objetos e o fundo, melhor, e o melhor resultado que consegui foi usando o canal do vermelho.
Para descartar os canais verde e azul, vá primeiro em Image –> Type –> RGB Stack. Isto transforma a sua imagem em um Stack (uma pilha) com os três canais separados. O primeiro é o vermelho (a palavra Red aparece no canto superior direito da imagem, junto com as outras informações), os outros dois podem ser excluidos em Image –> Stacks –> Delete Slice.

O resultado é uma imagem em tons de cinza, que ainda precisa ser segmentada.
Segmentando a imagem
Neste caso, o threshold funciona sem maiores problemas. Use Image –> Adjust –> Threshold… Isto abre uma janela para que você escolha o nível de threshold que separa as letras do fundo – quando ficar contente com o resultado, aplique (clique em Apply).
Esta ferramenta trata a parte escura da imagem como fundo, e a parte clara como objetos. Como não é este o nosso caso, precisamos inverter a imagem. Isto pode ser feito em Edit –> Invert.

Analisando (contando objetos)

Agora temos uma imagem binária, onde o fundo está em branco, e os objetos em preto. Isto é o que precisamos para usar o método de contagem automática de objetos. Ele está em Analyze –> Analyse Particles… Isto abre uma janela como esta:
Deixe as opções como estão, por enquanto, e clique OK.
Deixando as opções padrão, devem aparecer dois diálogos de resultado, um com as medidas (neste caso só área) de cada letra (Result), e outro com o resumo (Sumary). No resumo o campo Count que informa o número de partículas encontradas, que é o que nos interessa agora.
Resultado: 25 partículas! Ops, eram 22 letras (contando com os pontos).
Porque o método encontrou partículas a mais?
Simples: usamos as opções padrão do programa, sem se preocupar com o que elas significam ou se são adequadas ao caso em questão. Isso é um erro bem comum. A segunda parte deste tutorial vai falar sobre as opções do analisador de partículas, do que significam e como descobrimos quais os valores adequados para cada caso.
Até mais!



Gostaria de parabenizar pelas dicas didáticas que tanto vêm me auxiliando. Gostaria de saber se existe alguma dica de utilização do Image J para reduzir ruído na imagem.
Olá, Priscila,
Muito obrigada e seja vem-vinda!
Sobre ruídos: Alguns são fáceis de resolver, com filtros (o ImageJ tem alguns filtros); outros tipos de ruído são mais complicados de reduzir, e outros são impossíveis com as técnicas conhecidas hoje. Se quiser enviar uma de suas imagens, talvez eu posso te indicar um caminho a seguir.
Até mais!
Olá Gabriela,
Obrigada pela disponibilidade em ajudar? Como devo proceder para te enviar uma imagem para ver se você pode dar alguma dica?
Envie para o email gabriela@imagesurvey.com.br.
Estou desenvolvendo uma software para análise de imagem. Já criei ferramentas que aplicam filtros em uma região selecionada da imagem, que contam bordas em uma linha horizontal ou vertical que você posiciona aonde quiser, e uma ferramenta de contagem de blobs de uma região da imagem. você posiciona e configura as ferramentas e salva isso em um arquivo. você carrega diferentes arquivos e o software analisa e retorna Aprovado ou reprovado.
Só que muitas vezes não é posível garantir a posição da peça, por isso, estou precisando criar uma ferramenta, na qual voc~e seleciona uma região da peça, então o software procura aquela região em cada conforme o padrão selecionado na primeira e realoca demais ferramentas.
Tens alguma dica de que caminho seguir para esta minha necessidade? trabalho com análise de imagens em 2D, utilizo VS.net, com a biblioteca Aforge.net e tento algumas coisas com openCV.
Gabriel,
O nome do que você está procurando é “tamplate maching”, e não é muito simples, mas tem cerca de 74.400.000 ocorrências no Google, incluindo exemplos de código em várias linguagens.
Procure primeiro na openCV, deve ter algo lá também.
ola gabriela,parabens opr suas explicacoes.preciso de sua ajuda,olha, preciso determinar o tamanho de uma imagen e abaixo dela preciso que apareca uma dimenssao de 10 micrometros.tem como fazer isso no imagej:
obrigada.
Olá Eva!
Se entendi bem… você não tem a escala da sua imagem e quer que o ImageJ descubra sozinho. Bom, programa nenhum faz isso – vais ter que adquirir as imagens de novo, desta vez com a escala. Ou então se informa no seu laboratório, se eles já têm protocolo para aquisição de imagens que determine a escala de acordo com a lente, como aqui: http://www.imagesurvey.com.br/2010/08/usando-escala-pre-definida-em-microscopia-otica-digital/
Boa sorte!
Gabriela,
Preciso fazer a análise da imagem da massa de um muffin. Estou fazendo várias preparações diferentes e analisando as “bolhas” das massas (corte central do muffin): tamanho e número das mesmas.
Eu já fiz toda a primeira parte de contar objetos, limpei em “red”…
O que não consigo chegar é na padronização do tamanho das partículas que quero contar. Ou o resultado não conta nada ou conta muita coisa que não quero.
Você tem como me ajudar?
Obrigada.
Um abraço,
Marilyn
Provavelmente o seu muffin não forma uma imagem tão fácil de segmentar quanto a minha imagem de bolinhas.
Aqui no blog eu mostro situações que ilustram apenas uma técnica ou duas de cada vez para ficar mais didático, mas no mundo real você normalmente precisa usar várias delas juntas. Antes de tentar contar as bolinha você vai precisar de uma técnica que funcione com a sua imagem, e nisso e só posso tentar te ajudar se eu puder vê-la.
Leia um pouco sobre segmentação primeiro e, se ainda assim não conseguir envia a imagem para mim pelo email que você encontra na página de contato.
Até mais!