Zie bijvoorbeeld de publicaties:
http://www.mathworks.com/matlabcentral/fileexchange/18401-efficient-subpixel-image-registration-by-cross-correlation/content/html/efficient_subpixel_registration.html
Het einddoel: http://spin.ecn.purdue.edu/fmri/PDFLibrary/TongR_MRM_1999_41_253_256.pdf
De resultaten zijn daar steeds erg bevredigend, maar bij mij loopt er nog iets mis. Als ik bijvoorbeeld de afbeelding van mijn koe een halve pixel opschuif, krijg ik het volgende:
Origineel:
Het resultaat:
Ik plaats er nog even een minimal working code example in python bij:
Code: Selecteer alles
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
N = 2048
img=mpimg.imread('koe.png') #http://www.clipartbest.com/cliparts/RiA/yXL/RiAyXLriL.png
f = np.zeros((N,N))
f[:img.shape[0],:img.shape[1]] = img[:,:,3]
def fft(x):
return np.fft.fft2(x)
def ifft(x):
return np.fft.ifft2(x)
exp = np.exp
pi = np.pi
j = 1j
def s(r):
plt.figure()
#plt.imshow(np.real(r), vmin=0.0, vmax=1.0, interpolation='none')
plt.imshow(np.absolute(r), interpolation='none', vmin=0.0, vmax=1.0)
plt.colorbar()
x = np.tile(np.arange(N),(N,1)).T
y = x.T
result = ifft( fft(f)* np.exp(1j*2*np.pi*(-0.5*x/N-0.5*y/N)) )
s(result)
s(f)
plt.show()