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

相关推荐
龙文浩_3 分钟前
AI深度学习中的张量计算&函数&索引&形状的代码案例
人工智能·深度学习
YunQuality3 分钟前
当SPC焕发新生:云质信息重构制造质量管理新范式
人工智能·软件需求·工业软件
永霖光电_UVLED17 分钟前
英特尔斥资142亿美元回购爱尔兰Fab 34晶圆厂股权
人工智能
共绩算力1 小时前
算力租赁革命:租4090、租5090如何让AI开发成本降低90%?——共绩算力深度解析
人工智能·共绩算力
信创DevOps先锋1 小时前
模力方舟Moark:驶向AI开发新纪元的“能力方舟”
人工智能
码农小白AI1 小时前
AI报告编审解决方案赋能制造检测:IA-Lab AI检测报告生成助手协同IACheck,实现机械制造检测报告高效生成与严苛质量把控
人工智能·制造
NOCSAH1 小时前
统好AI SRM模块:智能采购管理实战解析
大数据·人工智能·统好ai·数智一体化平台
双星系统1 小时前
[特殊字符] 天工联智工业双臂机器人:重新定义智能制造的“双手“时代
人工智能·机器人·制造
liu****1 小时前
LangChain-AI应用开发框架(六)
人工智能·python·langchain·大模型应用·本地部署大模型
摸鱼仙人~1 小时前
AI检索——基础 RAG vs. 检索 Agent对比
人工智能