相位相关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

相关推荐
eBest数字化转型方案6 分钟前
快消渠道 AI 落地路线:拍照、数据、决策三阶段的工程逻辑
大数据·人工智能
七牛云行业应用7 分钟前
DeepSeek Harness 插件 dsh-zen-remote 教程:手机访问、桌面配对与通知配置
人工智能·ai·智能手机·ai编程
张星河zen7 分钟前
英伟达Groq 3 LPX全面量产,AI工厂进入Token拼价时代,重构智能体AI底座
人工智能·大模型·英伟达·groq·推理芯片
ZEB11068 分钟前
AI 转型服务商怎么选?五类机构的能力与适用边界
人工智能
数聚天成DeepSData9 分钟前
夜间灯光可以代表经济活动吗?先处理年际一致性
人工智能·深度学习·机器学习·数据集·deepsdata
AllData公司负责人16 分钟前
AllData搭建AI中台,集成开源项目LabelStudio/CubeStudio,建设数据标注平台/机器学习平台
数据库·人工智能·机器学习·labelstudio·cubestudio
百胜软件@百胜软件17 分钟前
百胜软件黄飞:让AI真正走进零售,把不确定性变成“胜券在握”
大数据·人工智能·零售
高洁0119 分钟前
数字孪生、具身智能、世界模型三者交叉
人工智能·python·深度学习·机器学习
广州智造22 分钟前
Radioss二次开发需要准备什么?
人工智能·算法·机器学习·cad·cae
青春不败 177-3266-052024 分钟前
从通量数据到SCI论文——AI-R语言生态系统碳水热通量及其机制分析与论文
人工智能·r语言·生态学·生物多样性·生态系统服务·碳水通量