对数极坐标相位相关 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解释

相关推荐
AAwangzong2 分钟前
AI时代RPA技术解析:如何构建兼顾流程执行与智能决策的自动化平台?
人工智能·经验分享·rpa·智能体
达达表哥9 分钟前
AI综合站商业分发系统v3.1纯净版发布 附完整安装教程(排版修正版)
人工智能
众壹新能源科技24 分钟前
逆变器直流开关柜温度监测与预防:红外巡检发现3个120度热点
运维·人工智能·自动化
NeoGressAI外贸数字化30 分钟前
外贸独立站robots.txt怎么写:6个AI爬虫放行规则
人工智能·爬虫
米软科技1 小时前
数字化转型:多元化集团如何构建高效的AI数字化中台?
大数据·人工智能
幼儿园蛋小黄1 小时前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习
Leo.yuan1 小时前
Dora企业级Data Agent应用指南:存量BI复用、私有化部署与权限管理
大数据·人工智能
火山引擎开发者社区1 小时前
从代码执行到任务持续运行:企业级 Agent Sandbox 的云原生实践
人工智能
Nablai1 小时前
LX系列多国语言能力技术解析:ESP32双栈架构下的语种策略设计
人工智能·架构
老牛日常随笔1 小时前
微软开源Flint Chart:AI画图表总是画不对?让编译器来画,AI只写数据就行
人工智能·microsoft