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

相关推荐
runafterhit1 小时前
AI基础学习-基础概念汇总
人工智能·学习
huluang1 小时前
面向 AI 时代的结构化语义文档引擎
人工智能
ggabb1 小时前
AI大模型训练成本:衡量语言优劣的“试金石”
人工智能
fl1768312 小时前
医院病人救护车担架轮椅检测数据集VOC+YOLO格式8187张9类别
人工智能·yolo·机器学习
码农杂谈00072 小时前
全栈可视化开发新选择 网易 CodeWave 开发效率拉满
人工智能·ai
rgb2gray2 小时前
论文详解 | TWScan:基于收紧窗口的增强扫描统计,实现不规则形状空间热点精准检测
网络·人工智能·python·pandas·交通安全·出租车
zzb15802 小时前
RAG from Scratch-优化-routing
java·前端·网络·人工智能·后端·python·mybatis
程序员的那些事_2 小时前
美团王兴:别叫我兴哥,减少登味。网友:好的,兴哥
人工智能