Phase Correlation(相位相关) 是一种利用 傅里叶变换相位信息 来计算 两幅图像平移位移 的方法。
它在很多领域非常重要:
-
图像配准
-
运动估计
-
晶圆 Overlay 检测
-
视频稳定
-
工业视觉定位
它的一个很强的特点是:
对光照变化不敏感
可以做到 亚像素精度
计算速度快(FFT)
一、Phase Correlation 解决什么问题
假设两幅图像:f(x,y) 和 g(x,y)
其中第二张是第一张的平移:

目标是求:
也就是图像移动了多少像素
二、核心思想
关键理论来自 傅里叶平移定理(Fourier Shift Theorem):
如果
则其傅里叶变换满足:

可以看到:
-
幅度不变
-
相位变化
所以:
图像平移只影响 相位
这就是 Phase Correlation 的核心思想
三、数学推导
1 两幅图像傅里叶变换

由于平移关系:

2 计算互功率谱
定义:

其中:

是复共轭。
3 代入公式

4 归一化

傅里叶相位 是啥,如何位移
四、反傅里叶变换
对 R(u,v)、做反傅里叶变换:

五、直观理解
Phase Correlation 的流程:
cpp
图像1
↓ FFT
F(u,v)
图像2
↓ FFT
G(u,v)
F × G*
↓
互功率谱
归一化
↓
只剩相位
IFFT
↓
一个峰值
峰值位置 = 位移
cpp
clc
clear
% 读取图像
img = im2double(imread('cameraman.tif'));
% 平移图像
dx = 20;
dy = 15;
img2 = circshift(img,[dy dx]);
% FFT
F = fft2(img);
G = fft2(img2);
% 互功率谱
R = F .* conj(G);
R = R ./ abs(R);
% 反傅里叶
r = ifft2(R);
% 找峰值
[maxv,idx] = max(r(:));
[peakY,peakX] = ind2sub(size(r),idx);
% 位移
shiftX = peakX - size(img,2);
shiftY = peakY - size(img,1);
disp([shiftX shiftY])
六、OpenCV 和Halcon 实现
OpenCV
cpp
cv::phaseCorrelate(img1,img2);
Point2d(dx,dy)已经是 亚像素精度
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img1 = imread("image1.png", IMREAD_GRAYSCALE);
Mat img2 = imread("image2.png", IMREAD_GRAYSCALE);
img1.convertTo(img1, CV_32F);
img2.convertTo(img2, CV_32F);
// Hanning window
Mat hann;
createHanningWindow(hann, img1.size(), CV_32F);
Point2d shift = phaseCorrelate(img1, img2, hann);
std::cout << "dx = " << shift.x << std::endl;
std::cout << "dy = " << shift.y << std::endl;
}
内部算法实现
cpp
1 FFT
2 互功率谱
3 相位归一化
4 IFFT
5 峰值搜索
6 二次曲线拟合

OpenCV工业优化
工业项目通常加几个步骤:
1 ROI匹配
减少FFT尺寸:
Mat roi1 = img1(Rect(100,100,256,256));
Mat roi2 = img2(Rect(100,100,256,256));
2 高通滤波
去除低频光照影响:
Mat highpass = img - GaussianBlur(img, Size(21,21), 5);
3 金字塔
大位移情况:
pyramid level3
pyramid level2
pyramid level1
逐级计算。
HALCON工业实现
cpp
read_image (Image1, 'img1.png')
read_image (Image2, 'img2.png')
phase_correlation_fft (Image1, Image2, RowShift, ColumnShift, Peak)
HALCON内部流程:
cpp
FFT(Image1)
FFT(Image2)
↓
共轭乘积
↓
互功率谱
↓
归一化
↓
IFFT
↓
寻找最大峰
↓
亚像素拟合
HALCON优化(工业视觉常用)
1 金字塔匹配
HALCON:
pyramid
先粗匹配:
level3
再精匹配:
level0
2 ROI
工业检测只对 pattern:
reduce_domain
减少计算。
3 亚像素拟合
HALCON默认:
parabolic fitting
或:
gaussian fitting
七、Phase Correlation 优缺点
优点
-
对光照不敏感
-
抗噪声
-
FFT速度快
-
亚像素精度
缺点
-
只能处理 平移
-
旋转需要 log-polar 方法
-
对大遮挡敏感
八、面试常问问题
为什么 Phase Correlation 抗光照变化?

为什么能做到亚像素?
因为:
IFFT峰值是连续函数
可以:
二次曲线拟合
工业视觉里 Phase Correlation 最强的一版:
Log-Polar Phase Correlation
它不仅可以求:
平移
还能求:
旋转
缩放