def _cross_corr(img1, img2=None):
''' Compute the cross correlation of one (or two) images.
Parameters
----------
img1 : np.ndarray
the image or curve to cross correlate
img2 : 1d or 2d np.ndarray, optional
If set, cross correlate img1 against img2. A shift of img2
to the right of img1 will lead to a shift of the point of
highest correlation to the right.
Default is set to None
'''
ndim = img1.ndim
if img2 is None:
img2 = img1
if img1.shape != img2.shape:
errorstr = "Image shapes don't match. "
errorstr += "(img1 : {},{}; img2 : {},{})"\
.format(*img1.shape, *img2.shape)
raise ValueError(errorstr)
# need to reverse indices for second image
# fftconvolve(A,B) = FFT^(-1)(FFT(A)*FFT(B))
# but need FFT^(-1)(FFT(A(x))*conj(FFT(B(x)))) = FFT^(-1)(A(x)*B(-x))
reverse_index = [slice(None, None, -1) for i in range(ndim)]
imgc = fftconvolve(img1, img2[reverse_index], mode='same')
return imgc
评论列表
文章目录