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.
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.