Processamento de imagens na prática

Detecção de bordas – Sobel

Venho ensaiando um post sobre detecção de bordas há algum tempo, mas ele acaba ficando para depois por dois motivos: primeiro porque é um tema enorme, segundo porque o ImageJ não é muito bom nisso. Resolvi começar, e vamos ver aonde consigo chegar em um post.

O conceito de borda

Balantidium coli, por Ed Uthman, MD.

Balantidium coli, por Ed Uthman, MD.

É até estranho pedir para alguém definir a palavra borda, já que é um conceito daqueles que se formam quando ainda estamos aprendendo a ver (isso é lá pelos primeiros meses de vida). A nossa visão é especialista em detectar descontinuidades, mesmo pequenas, e são estas descontinuidades que chamamos de bordas, e muitas (mas não todas) representam os limites entre os objetos.

Como cada um de nós tem lá seus anos de experiência em identificar bordas (se você pode ler, tem pelo menos 7, e se está tentando descobrir como fazer seu TCC tem pelo menos 20…), não pensamos muito sobre como identificamos descontinuidades. Na maioria das vezes processamos a informação até ela ter significado prático para nós, chagando a considerar apenas as descontinuidades que representam limites de um objeto.

Ok, agora traduza isso para uma linguagem que o computador entenda…

Aplicação do filtro Sobel diretamente sobre a imagem original, usando ImageJ

Aplicação do filtro Sobel diretamente sobre a imagem original, usando ImageJ

A forma mais comum de detecção de bordas é baseada em filtros. É como funciona, por exemplo, a única função de detecção de bordas do ImageJ. Ela se resume a um filtro Sobel de tamanho 3×3, aplicado por convolução em duas variações (horizontal e vertical). Depois as duas imagens são combinadas usando a raiz quadrada da soma dos quadrados.

     1  2  1     1  0 -1
     0  0  0     2  0 -2      Duas variações do filtro Sobel
    -1 -2 -1     1  0 -1

Aplicando este método diretamente na imagem original (Menu Process –> Find Edges) obtive um resultado nada útil. O filtro realçou todas as bordas, mesmo aquelas que nossa visão desconsidera. Isso acontece com muita frequência, por isso é comum usar um filtro de média, mediana, ou outro método de “borrar” a imagem, para que as bordas menos significativas desapareçam.

Para obter um resultado melhor

Sequência de imagens produzidas pelos quatro passos.

Sequência de imagens produzidas pelos quatro passos.

Usei os quatro passos que estão descritos a seguir:

1. Borrar a imagem, diminuindo a quantidade de bordas: usei o filtro de mediana, que está em Process –> Filters –> Median.

2. Aplicar o detector de bordas na imagem borrada: Process –> Find Edges.

3. Transformar a imagem para tons de cinza (para poder aplicar o threshold no passo seguinte). Image –> Type –> 8bits.

4. Aplicar threshold, descartando o máximo as bordas inúteis e mantendo apenas a informação que interessa.

Repare que o resultado não é uma borda completa fechando o objeto de interesse. Talvez usando alguma outra técnica de suavização no início até melhore o resultado, mas ele não vai ficar perfeito. Isto porque o objeto não tem uma borda sólida que o circula! Repare bem na parte de baixo…

Entre o filtro e o olho humano

A aplicação de filtros por convolução é uma operação de processamento de imagens que considera informações de apenas alguns pixels por vêz, e realça elementos que estão presentes na imagem. Os filtros não interpretam informação. Por isso não é possível preencher a descontinuidade de uma borda usando filtros.

A visão humana, por outro lado, é especialista em preencher falhas e interpretar imagens (veja Gestalt – porque somos melhores que as máquinas?). Por isso a diferença entre o resultado atingido neste post e a nossa percepção.

Já existem métodos que se aproximam mais da nossa capacidade de encontrar bordas completas (mesmo onde elas estão incompletas) – um bom grupo deles é conhecido como snakes. E a morfologia matemática tem ferramentas para completar descontinuidades de poucos pixels. No entanto ainda não foi possível imitar totalmente a visão humana… estamos tentando!

Créditos

Impossível deixar de elogiar o Specimens Set, de Ed Uthman, MD. Fazia tempo que eu procurava por boas imagens de microscopia com licença Creative Commons para usar aqui, e em pesquisas. Espero que outros profissionais sigam o exemplo.

Comente

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>