【发布时间】:2015-11-03 12:02:38
【问题描述】:
我正在尝试使用 numpy 的 FFT 对两个图像进行互相关。
据我所知,我们有两个图像的互相关等于图像 A 的傅里叶变换的乘积的逆FFT,以及图像 B 的傅里叶变换的复共轭。
因此,我有以下代码:
img1 = cv2.imread("...jpg")
img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
fft1 = numpy.fft.fft2(img1)
# I'm cross correlating the same image with itself
fft2 = fft1.copy()
fft2 = numpy.conj(fft2)
#Element wise multiplication
result = fft1*fft2
result_img = numpy.fft.ifft2(result)
result_img = numpy.abs(result_img) #Remove complex values
#Following images are attached
image_shifted = normalize(numpy.fft.fftshift(result_img))
image_nonshifted = normalize(result_img)
但是,我的结果很奇怪。为了获得我认为是实际的相关结果,我必须对结果进行 fftshift。以下是一些示例图片:
Image, not shifted, you can see bright parts at each corner
我不确定我的代码或预期的数学是否有误,但我无法完全弄清楚发生了什么!
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
更适合dsp.stackexchange.com
-
@MarkBorgerding 无论如何我可以明确地将它移到那里吗?还是我应该删除这个帖子并在那里重新发布?
-
有没有可能你认为原点应该在中心,但图书馆认为原点应该在拐角处?例如您认为整数模 512 应该表示为 [-256, 255],但它表示它们为 [0,511]?
-
您可能在这里找到了一个好点。如果第一个像素 [0,0] 表示与完全对齐的图像的相关性,那么 [0,511] 和 [511,0] 和 [511,511] 也是峰值是有意义的 - 因为图像几乎会再次对齐。我假设相关结果会“出现”,就好像像素 [0,0] 表示与原点 [-255,-255] 的图像 A 和原点 [0,0] 的图像 B 相关的图像,但它可以表示在 [0,0] 处与两者相关的图像(这在某种程度上更有意义)
标签: python opencv numpy signal-processing fft