用于图像共配准的相位相关和SVD的Python实现

时间:2020-06-07 13:39:06

标签: python image-processing computer-vision

我正在尝试实现一种用于对齐已被x,y像素偏移的两个图像的技术;该技术使用傅立叶相位相关和SVD(奇异值分解)来计算偏移量,并且为described in this paper。本文将这种方法描述为“霍格方法”,据我所知,其步骤大致如下:

  1. 从两张图片g(u,v)h(u,v)开始,它们是同一张图片,但相距a,b像素
  2. 将两个图像都转换为傅立叶空间,得到G(u,v)H(u,v)
  3. 计算Q(u,v)作为相位相关性,代表“ G和H之间的归一化交叉功率谱”
  4. 将SVD应用于Q,以获得左和右域奇异矢量
  5. 分别解开左右向量的相位(理论上应形成一条直线)。
  6. 使用最小二乘拟合将线拟合到展开相位,结果线的梯度将以亚像素精度告诉您图像的水平和垂直偏移。

我遇到的问题是,一旦进入第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

我假设我错过了一些重要的事情,而我只是没有正确地理解方法论,所以任何帮助都是非常有用的。

This image is Q, notice how the range is between 0, 1 and that the wave looks distinctly different from Fig. 1 of the article where the waves abruptly end between 3 and -3

0 个答案:

没有答案
相关问题