相位相关Phase Correlation

Phase Correlation(相位相关) 是一种利用 傅里叶变换相位信息 来计算 两幅图像平移位移 的方法。

它在很多领域非常重要:

  • 图像配准

  • 运动估计

  • 晶圆 Overlay 检测

  • 视频稳定

  • 工业视觉定位

它的一个很强的特点是:

对光照变化不敏感

可以做到 亚像素精度

计算速度快(FFT)

一、Phase Correlation 解决什么问题

假设两幅图像:f(x,y) 和 g(x,y)

其中第二张是第一张的平移:

目标是求:

也就是图像移动了多少像素

二、核心思想

关键理论来自 傅里叶平移定理(Fourier Shift Theorem):

如果

则其傅里叶变换满足:

可以看到:

  • 幅度不变

  • 相位变化

所以:

图像平移只影响 相位

这就是 Phase Correlation 的核心思想

三、数学推导

1 两幅图像傅里叶变换

由于平移关系:

2 计算互功率谱

定义:

其中:

是复共轭。

3 代入公式

4 归一化

傅里叶相位 是啥,如何位移

https://blog.csdn.net/weixin_39354845/article/details/159078714?sharetype=blogdetail&sharerId=159078714&sharerefer=PC&sharesource=weixin_39354845&spm=1011.2480.3001.8118

四、反傅里叶变换

对 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

它不仅可以求:

平移

还能求:

旋转

缩放

https://blog.csdn.net/weixin_39354845/article/details/159055238?sharetype=blogdetail&sharerId=159055238&sharerefer=PC&sharesource=weixin_39354845&spm=1011.2480.3001.8118

相关推荐
回眸&啤酒鸭4 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅4 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein4 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu4 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb4 天前
智能网联汽车安全能力框架
人工智能
龙亘川4 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化
飞猫的边缘AI4 天前
边缘AI应用:家用AI摄像头怎么做数据训练?
人工智能·边缘计算·ai算法·边缘ai