[Volta à página principal]

Exercício 04

Transformação de formas usando thin-plate splines


Introdução

O objetivo deste exercício é implementar e testar as thin-plate splines para campos vetoriais (seção 4.9.6.2 do livro), como técnica de representação de transformações entre formas.

Método Utilizado

O programa foi desenvolvido usando o MATLAB versão 6.0.0.88 Release 12. Foram criadas as seguintes funções: Para utilizar o programa, deve-se executar a função thinplate passando como argumentos um conjunto de marcos S representando uma forma e um conjunto de pontos de controle Q (representando a transformação da forma S). Será gerada uma matriz contendo os parâmetros de um par de thin-plate splines que representam essa transformação.
Para aplicar a transformação gerada a outras formas quaisquer, deve-se executar a função evaltsp passando como argumentos a forma sobre a qual será aplicada a transformação, a matriz contendo os parâmetros das thin-plate splines e o conjunto de marcos S usado para determinar os parâmetros das thin-plate splines. Os detalhes do formato de entrada e saída das funções pode ser visto nos comentários do código, ou através do comando help do MATLAB, como em help evaltsp.

O código do EP como um todo pode ser obtido aqui.

Resultados

O script tests foi executado com a finalidade de testar o EP. Os testes foram baseados nos exemplos do livro.

O primeiro teste teve como base o exemplo da figura 4.43 do livro. Primeiro foi calculado o par de thin-plate splines que representa a transformação entre duas figuras semelhantes às do livro, e em seguida a transformação obtida foi aplicada novamente à mesma imagem de entrada e a uma imagem de entrada diferente. No primeiro caso, o resultado obtido foi idêntico à imagem de saída usada como conjunto de pontos de controle, como era previsto. No segundo caso, verificamos que a forma obtida como resultado da transformação está de acordo com o esperado. Abaixo seguem algumas figuras ilustrando o primeiro teste:

Figura 1: Entrada do exemplo da figura 4.43

Entrada fig. 4.43

Figura 2: Pontos de controle do exemplo da figura 4.43

Pontos de controle fig. 4.43

Figura 3: Conjunto de marcos de uma forma sobre a qual será aplicada a transformação obtida a partir das formas das figuras acima

Entrada do outro teste

Figura 4: Resultado da transformação

Saída do outro teste
No segundo teste utilizei o programa para executar o exemplo para thin-plate splines 1D da página 322 do livro, utilizando a função para duas dimensões com os mesmos valores de pontos de controle em cada dimensão. Os resultados obtidos foram iguais aos do livro, com exceção da energia de dobramento obtida, que foi o dobro da obtida no livro (como esperado, já que a energia de dobramento no caso 2D é igual à soma das energias de dobramento em cada dimensão). Abaixo segue a saída do MATLAB referente a este teste.

Energia de dobramento (dividida por 2): 3.84719
Parâmetros da thin-plate spline:

ans =

0.4809
0.4809
0.4809
0.4809
-1.9236
2.0000
-0.0000
-1.0000

Conclusão

Os resultados obtidos mostram que a implementação está de acordo com o esperado. No exemplo 1D do livro os resultados foram idênticos; no exemplo da figura 4.43, embora o livro não forneça dados numéricos (para os testes, foram escolhidos marcos de modo que a forma utilizada seja semelhante, mesmo sem ter a certeza de que os números são iguais), as formas obtidas foram semelhantes e condizentes com os resultados esperados.

Foi possível verificar que a utilização de thin-plate splines como forma de representação de transformações entre formas é uma técnica bastante útil para obter uma transformação a partir de duas imagens de exemplo, e em seguida aplicar essa dada transformação sobre outras formas diferentes.

Bibliografia

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


Valid HTML 4.01!
Daniel André Vaquero
daniel at linux.ime.usp.br
Tue, 21 Oct 2003 08:01:22 -0200