我正在尝试实现一种用于对齐已被x,y像素偏移的两个图像的技术;该技术使用傅立叶相位相关和SVD(奇异值分解)来计算偏移量,并且为described in this paper。本文将这种方法描述为“霍格方法”,据我所知,其步骤大致如下:
g(u,v)
和h(u,v)
开始,它们是同一张图片,但相距a,b像素G(u,v)
和H(u,v)
Q(u,v)
作为相位相关性,代表“ G和H之间的归一化交叉功率谱” Q
,以获得左和右域奇异矢量我遇到的问题是,一旦进入第3步,我的图像看起来就不太正确了。当我期望它在-pi,pi之间时,数组的范围在0-1之间;而且它似乎是波浪而不是可以解开的台阶。这是我的Python实现:
import numpy as np
from scipy.linalg import svd
# g = 2D array (500x500)
# h = 2D array (500x500) but offset from g by 10x10
G = np.fft.fft2(g)
H = np.fft.fft2(h)
GH = G * H.conjugate()
Q = GH / abs(GH)
U, s, Vh = svd(Q)
U_unwrapped = np.unwrap(U.real)
Vh_unwrapped = np.unwrap(Vh.real)
# Following this only the LSF is required on the unwrapped arrays
我假设我错过了一些重要的事情,而我只是没有正确地理解方法论,所以任何帮助都是非常有用的。