Hoje quero trazer uma ferramenta do ImageJ que eu considero muito útil, mas sei que é pouco conhecida e utilizada. É possível reunir imagens em grupos (que o ImageJ chama de Stack, palavra inglesa para pilha), tanto para trabalhar nelas em lote, como para mantê-las juntas e em ordem.
Para mim, este recurso tem se mostrado útil em suas situações:
1. Quando uso várias ferramentas para resolver um problema e quero guardar todos os passos (imagens intermediárias que gerei) para poder documentar o processo depois. Este será o exemplo do post.
2. Para processar um grupo de imagens de uma só vez, economizando tempo e clicks (a tendinite eminente agradece). É o chamado processamento em lote.
O que é uma stack
Uma stack é um conjunto de imagens do mesmo tipo e tamanho. Tipo de imagem significa: RGB, 8-bit Tons de Cinza, 8-bit Paleta de Cor, binária, etc. O exemplo a seguir dá a impressão de que eu misturei os tipos, mas na verdade o que fiz foi me adaptar à regra: transformei tudo em RGB depois do processamento.
Exemplo de uso de stack para documentação de experimento

Imagem de *L*u*z*a*.
Esta imagem original foi obtida no Flickr. E meu objetivo foi identificar os contornos dos lápis, usando algumas ferramentas de detecção de bordas. Para isso, precisei de 8 passos. OK, o resultado não ficou perfeito, mas serve para ilustrar.
1o. passo: Suavização. Suavisar as linhas da imagem com um filtro ajuda a diminuir a influência da textura na detecção de bordas. Fiz isso com o comando Smooth, do menu Process.
2o. passo: Detecção de bordas sobre a imagem colorida suavizada. A função Find Edges do menu Process, aplica um filtro Sobel para a detecção de bordas.
3o. passo: Descartar a informação de cor. Simplesmente converti a imagem em tons de cinza, usando o canal do brilho. Menu Image -> Type -> 8-bit.
4o. passo: Outra suavização. Na imagem do canto superior direito pode-se observar que, além das bordas, aparecem outros pontos e linhas, provenientes da textura que a primeira suavização amenizou, mas não eliminou completamente, por isso passei o filtro mais uma vez.
5o. passo: Realce das bordas. Um filtro de realce pode ser encontrado em Process -> Sharpen. É uma tentativa de melhorar as bordas para o passo seguinte.
6o. passo: Threshold. O link traz os detalhes deste método. Aqui só é necessário dizer que ele segmenta a imagem de acordo com o nível de cinza que eu escolhi, produzindo uma imagem binária que contém o fundo (branco) e as bordas (pretas).
7o. passo: Abertura e Fechamento. Estas duas operações morfológicas são usadas com freqüência para retirar o ruído (pontinhos dispersos) após uma operação de segmentação ou detecção de bordas. Ficam no menu Process -> Binary, e se chamam Open e Close.

Montagem da sequência de imagens produzida no experimento.
A cada passo, dupliquei a imagem para manter o histórico do que fiz. No passo 3 obtive uma imagem em Tons de Cinza que não poderia ser colocada no mesmo stack, com as outras. Resolvi isso convertendo a imagem para RGB (menu Image -> Type -> RGB Color). Isso não altera a aparência da imagem, apenas faz com que o programa gere uma imagem de 3 canais exatamente iguais.
Algumas operações (as dos passos 6 e 7) exigiam uma imagem em tons de cinza. Nestes casos, converti a imagem como no passo 3, fiz a operação e transformei o resultado em RGB, como descrito no parágrafo anterior.
Com isso, terminei com 8 imagens espalhadas pelo meu desktop.
Como criar uma stack
Como todas as imagem que estão abertas têm o mesmo tipo e tamanho, é só ir em Image -> Stacks -> Image to Stacks. Pronto! Imagens empilhadas na ordem em que foram geradas. Se as suas imagens não forem do mesmo tipo e/ou tamanho você receberá uma mensagem de erro. Também não espere que o ImageJ vai adivinhar quais imagens você quer empilhar, ele empilha todas as que estiverem abertas.
Você pode salvar a pilha em TIFF, e manter toda a sua documentação num arquivo só, sem perder nenhuma informação.
Montagem
Para obter a imagem de toda a seqüencia, como fiz para exibir aqui, vá em Image -> Stacks -> Make Montage…. Isto abre uma janela com algumas opções como quantas linhas e colunas, moldura, etc. Usei uma moldura de 2 pixels no exemplo.
Na próxima semana teremos um tutorial sobre processamento em lotes no ImageJ. Para não perder, assine o RSS feed do ImageSurvey!



Excelente tutorial! Obrigado!
@Hugo Torres
De nada, seja sempre bem-vindo!