Насколько я могу судить, это дает тот же результат, что и scipy.correlate2d()
, где img1
и img2
- это 2-мерные массивы, представляющие полутоновые (то есть одноканальные) изображения:
import numpy as np
pad = np.max(img1.shape) // 2
fft1 = np.fft.fft2(np.pad(img1, pad))
fft2 = np.fft.fft2(np.pad(img2, pad))
prod = fft1 * fft2.conj()
result_full = np.fft.fftshift(np.fft.ifft2(prod))
corr = result_full.real[1+pad:-pad+1, 1+pad:-pad+1]
Настройка однопиксельного кадрирования не очень элегантна, но для вас это БПФ: просто.
Я просто хочу сказать, что scipy
идеально подходит для использования, и я настоятельно рекомендую его. Сказав это, кажется, что этот подход намного быстрее для одного случая, который я пробовал.