Executando uma correlação de fase com fft em R

Eu estou tentando implementar um algoritmo de correlação de fase 2d em R usando uma receita da Wikipedia (http://en.wikipedia.org/wiki/Phase_correlation) para rastrear o movimento entre 2 imagens. Essas imagens (quadros) foram capturadas com uma câmera balançando ao vento e o objetivo final é remover a trepidação nesses e nos quadros subsequentes. As duas imagens de exemplo e o código R estão abaixo:

## we will need the tiff library 
library(tiff)

## read in the tiff files 
f1=as.matrix(readTIFF('f1.tiff',native=TRUE))
f2=as.matrix(readTIFF('f2.tiff',native=TRUE))

## take the fft of the first  frame
F1 <- fft(f1)
## take the Conjugate fft of the second frame
F2.c <- Conj(fft(f2))

## calculate the cross power spectrum according to the wiki article
R <- (F1*F2.c)/abs(F1*F2.c)
## take the inverse fft of R
r <- fft(R,inv=TRUE)/length(R)
## because the zero valued imaginary numbers are not needed
r <- Re(r)

## show the normalized cross-correlation
image(r)

## find the max in the cross correlation matrix, or the phase shift -
## between the two images
shift <- which(r==max(r),arr.ind=TRUE)

O vetormudança, no meu entender, deve conter informações sobre o deslocamento transitivo (dx e dy) que melhor corrige essas duas imagens. No entanto, a variável shift fornece dx = 1 e dy = 1, o que eu assumo indica que não há mudança na direção x ou y. Isso ocorre para os quadros subsequentes em que há trocas visíveis ou vários pixels nas direções x e y.

Algum de vocês vê algum erro no meu código / fórmulas? Ou preciso tentar algo mais sofisticado, como filtrar as imagens primeiro, antes de fazer uma correlação de fase?

Cheers galões e rapazes!

questionAnswers(2)

yourAnswerToTheQuestion