它解决的问题是:
普通 Phase Correlation 只能求

但在工业视觉里经常遇到:
平移 + 旋转 + 缩放
例如:
-
晶圆对准
-
图像拼接
-
遥感配准
-
机器人视觉定位
Log-Polar 方法可以求:
一、核心思想
关键技巧:
把旋转和缩放转换成平移问题
步骤:
原图
↓
FFT
↓
幅度谱
↓
Log-Polar变换
↓
Phase Correlation
↓
得到旋转 + 缩放
然后再求:
平移
二、数学原理
假设两幅图像
三、傅里叶变换性质
有一个重要性质:
旋转
如果图像旋转:
缩放
如果

四、极坐标变换
五、Log-Polar变换
为了处理 缩放:

六、完整算法流程
工业系统流程:
图像1 图像2
↓ ↓
FFT FFT
↓ ↓
取幅度谱
↓
Log-Polar变换
↓
Phase Correlation
↓
得到
旋转θ
缩放s
↓
逆旋转 + 逆缩放
↓
再做一次 Phase Correlation
↓
得到平移(dx,dy)
七、实现
HALCON实现思路
HALCON没有直接函数,但可以组合:
fft_image
complex_to_real
polar_trans_image
phase_correlation_fft
流程:
FFT(Image1)
FFT(Image2)
complex_to_real
polar_trans_image (log)
phase_correlation_fft
OpenCV工业实现
OpenCV已经提供:
warpPolar()
流程:
C++代码
Mat img1,img2; Mat f1,f2; dft(img1,f1); dft(img2,f2); magnitude(f1,f1); magnitude(f2,f2); Mat lp1,lp2; warpPolar(f1,lp1,Size(256,256), center,maxRadius, WARP_POLAR_LOG); warpPolar(f2,lp2,Size(256,256), center,maxRadius, WARP_POLAR_LOG); Point2d shift = phaseCorrelate(lp1,lp2);
得到:
rotation
scale
Matlab
cpp
1 生成测试图像
clc
clear
img = im2double(imread('cameraman.tif'));
theta = 20; % 旋转角
scale = 1.2; % 缩放
img2 = imrotate(img,theta,'bilinear','crop');
img2 = imresize(img2,scale);
img2 = img2(1:256,1:256);
2 FFT
F1 = fftshift(fft2(img));
F2 = fftshift(fft2(img2));
M1 = abs(F1);
M2 = abs(F2);
3 Log-Polar变换
lp1 = logpolar(M1);
lp2 = logpolar(M2);
4 Phase Correlation
R = fft2(lp1).*conj(fft2(lp2));
R = R ./ abs(R);
r = ifft2(R);
[maxv,idx] = max(r(:));
[y,x] = ind2sub(size(r),idx);
disp([x y])
为什么 Phase Correlation 可以做到亚像素?

| 参数 | 精度 |
|---|---|
| 旋转 | 0.01° |
| 缩放 | 0.001 |
| 平移 | 0.01 pixel |
八、为什么 Phase Correlation 的峰值一定出现在真实位移位置?
Phase Correlation 为什么一定在真实位移处出现峰值 做一个完整数学推导 + 直观理解 + 离散FFT解释 。
这个推导在 图像配准 / 半导体视觉 / 算法岗位面试里非常经典。
问题定义
傅里叶平移定理
二维傅里叶变换:

互功率谱
定义 互功率谱 :
代入平移公式

归一化

反傅里叶变换

δ函数含义
δ函数:
只有一个位置是最大值
图像形式:
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0 ← peak
0 0 0 0 0
0 0 0 0 0
峰值位置:

因此:
峰值位置 = 图像平移
这就是 Phase Correlation 的数学证明。
几何直观理解
可以这样理解:
图像2只是图像1平移:
pattern → shift
频域:
F(u,v)
G(u,v)
两者相位差:
Δφ = 2π(uΔx + vΔy)
所有频率都会产生同样的 相位斜坡。
当我们做:
IFFT
这些相位叠加:
constructive interference
在真实位移位置产生:
一个尖峰
离散FFT解释
