[Volta à página principal]

Exercício 07

Cálculo da curvatura multi-escala


Introdução

Este exercício é composto por duas partes: a extração do contorno de um objeto representado por uma imagem binária e o cálculo da curvatura multi-escala do contorno extraído.

A curvatura do contorno r(t) = (x(t), y(t)) é dada por k(t) = (x'(t) y''(t) - x''(t)y'(t))/((x'(t)^2 + y'(t)^2)^(1.5)) onde x'(t) e y'(t) representam as derivadas de ordem 1 de x(t) e y(t), e x''(t) e y''(t) representam as derivadas de ordem 2 de x(t) e y(t).

Para calcular as derivadas utilizamos o método de derivação por Fourier, implementado no exercício anterior. Neste método, utiliza-se uma filtragem Gaussiana para suavizar a derivada obtida. O cálculo da curvatura multi-escala consiste em calcular a curvatura utilizando uma seqüência de escalas diferentes para a Gaussiana utilizada, obtendo o curvograma.

Método Utilizado

Inicialmente, antes de calcular a curvatura multi-escala é necessário termos o contorno do objeto. Para isto, utiliza-se o algoritmo de extração de contornos, que recebe como entrada uma imagem binária e gera como saída os pontos do contorno externo do objeto na forma (x(t), y(t)).

Em seguida, passa-se a saída do programa de extração de contornos como entrada para o programa que calcula a curvatura multi-escala, que faz o cálculo usando a derivação por Fourier com Gaussianas de escalas diferentes, usando a fórmula da curvatura apresentada acima. O curvograma é então gerado numa imagem PGM, sendo que o eixo y representa a escala da Gaussiana e o eixo x representa o parâmetro da curva (t). Os pixels mais claros representam curvaturas maiores que os mais escuros.

O programa foi desenvolvido usando a linguagem C. Como nos exercícios 3 e 6, foi utilizada a biblioteca FFTW versão 2.1.3 para o cálculo da FFT.

O código do EP com as imagens de teste em formato PBM pode ser obtido aqui.

Resultados

Foram utilizadas as imagens de teste encontradas em http://www.linux.ime.usp.br/~emr/mac447/ep7/ para testar o EP. As imagens podem ser vistas abaixo, e os resultados obtidos podem ser vistos clicando nos links correspondentes.

Imagem Escala variando de 1 a 20, 101 iterações Escala variando de 1 a 50, 101 iterações
Quadrado Curvograma Curvograma
Complex Curvograma Curvograma
Complex 2 Curvograma Curvograma

Conclusão

Os curvogramas obtidos estão de acordo com o esperado para as imagens testadas. Quanto menor for a escala, mais detalhes aparecem no curvograma. Os pontos de alta curvatura aparecem no curvograma como pixels claros. No caso do quadrado, pode-se ver claramente os quatro pontos de alta curvatura.

O algoritmo de extração de contornos mostrou-se eficiente para a sua tarefa, porém possui algumas limitações: apenas o contorno do primeiro objeto da imagem é extraído e se o objeto apresenta buracos apenas o contorno mais externo é extraído. Existem formas de eliminar essas limitações, discutidas no livro. Porém, para o propósito deste exercício é suficiente a implementação da versão mais simples do algoritmo, que não prevê esses casos especiais.

Bibliografia

R. M. Cesar Jr e L. F. Costa. Shape analysis and classification: Theory and Practice. CRC Press, 2001.


Valid HTML 4.01!
Daniel André Vaquero
daniel at linux.ime.usp.br
Wed, 10 Dec 2003 01:48:26 -0200