对数极坐标相位相关 Log-Polar Phase Correlation

它解决的问题是:

普通 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解释

相关推荐
老金带你玩AI8 小时前
ChatGPT dots,到底能替你操多少心?
人工智能
AliCloudROS8 小时前
计算巢 X DeepSeek Harness — 云端智能体工作台
人工智能·阿里云
深蓝AI8 小时前
GitHub的Push一年涨4.9倍:AI Agent为什么逼它重做Git存储?
人工智能·github
stereohomology9 小时前
大模型的观点谨:StoryTold 「Crafting Apps」四件套 · 深度总览
人工智能·llm
运维行者_9 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
Su米苏9 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
美狐美颜sdk9 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
问商十三载10 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能
冬奇Lab10 小时前
LLM 驱动的自动化测试系列(08):移动端自动化(四)——AppAgent:解析树与视觉特征的结合
人工智能·测试