[Python图像处理] 频域相位相关模板匹配
创始人
2025-05-28 17:31:00

频域相位相关模板匹配

    • 相位相关基本概念
    • 频域相位相关模板匹配
    • 相关链接

相位相关基本概念

相位相关 (Phase Correlation) 是一种可用于估计两个相似图像之间的相对平移偏移的方法。它通常用于图像匹配,并依赖于图像的频域表示,通常通过快速傅里叶变换计算。以下公式说明了使用相位相关在目标图像内匹配模板图像的步骤,本节中,我们使用频域相位解决相关模板匹配:

FB=F{fB},FT=F{fT}R=FB∘FT∗∣FB∘FT∗∣r=F−1{R}(Δx,Δy)=argmaxx,y{r}F_B=\mathcal F\{f_B\},F_T=\mathcal F\{f_T\} \\ R=\frac {F_B\circ F_T^*} {|F_B\circ F_T^*|} \\ r=\mathcal F^{-1}\{R\} \\ (\Delta x,\Delta y)=arg\underset{x,y}{max}\{r\} FB​=F{fB​},FT​=F{fT​}R=∣FB​∘FT∗​∣FB​∘FT∗​​r=F−1{R}(Δx,Δy)=argx,ymax​{r}

其中,fBf_BfB​ 是目标图像,fTf_TfT​ 是模板图像,F\mathcal FF 是傅里叶变换函数,∘\circ∘ 是逐元素操作,RRR 是交叉功率谱,rrr 是归一化相位相关。

频域相位相关模板匹配

接下来,我们使用 Python 执行频域相位相关模板匹配。

(1) 首先,导入所需库,并读取目标和模板图像:

import scipy.fftpack as fp
from skimage.io import imread
from skimage.color import rgb2gray, gray2rgb
from skimage.draw import rectangle_perimeter
import numpy as np
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.ticker import LinearLocator, FormatStrFormatterdef plot_3d(X, Y, Z, cmap=plt.cm.seismic):fig = plt.figure(figsize=(20,20))ax = fig.gca(projection='3d')# Plot the surface.surf = ax.plot_surface(X, Y, Z, cmap=cmap, linewidth=5, antialiased=False)#ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)#ax.set_zscale("log", nonposx='clip')#ax.zaxis.set_scale('log')ax.zaxis.set_major_locator(LinearLocator(10))ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))ax.set_xlabel('F1', size=20)ax.set_ylabel('F2', size=20)ax.set_zlabel('Freq Response', size=20)#ax.set_zlim((-40,10))# Add a color bar which maps values to colors.fig.colorbar(surf) #, shrink=0.15, aspect=10)#plt.title('Frequency Response of the Gaussian Kernel')plt.show()    im = 255*rgb2gray(imread('1.png'))
im_tm = 255*rgb2gray(imread('1.png'))[100:250,200:350]

(2) 计算两个图像的离散 2D 傅立叶变换:

F = fp.fftn(im)
F_tm = fp.fftn(im_tm, shape=im.shape)

(3) 通过获取第二个结果的复共轭,按元素将傅里叶变换相乘,并按元素归一化乘积结果,计算交叉功率谱;通过应用逆傅立叶变换来获得归一化的互相关值;计算最佳的匹配位置,并使用 np.argmax() 函数计算确定归一化互相关矩阵中峰值的位置:

F_cc = F * np.conj(F_tm)
c = (fp.ifftn(F_cc/np.abs(F_cc))).real
i, j = np.unravel_index(c.argmax(), c.shape)
print(i, j)

(4) 围绕最佳匹配位置绘制矩形:

im2 = (gray2rgb(im)).astype(np.uint8)
rr, cc = rectangle_perimeter((i,j), end=(i + im_tm.shape[0], j + im_tm.shape[1]), shape=im.shape)
for x in range(-2,2):for y in range(-2,2):im2[rr + x, cc + y] = (255,0,0)

(5) 绘制模板和目标图像以及最佳匹配的位置。另外,绘制交叉功率谱以可视化峰值:

plt.figure(figsize=(2,3))
plt.gray()
plt.imshow(im_tm), plt.title('template', size=10), plt.axis('off')
plt.show()
fig, ax = plt.subplots(1, 2, sharey=True, figsize=(12,7))
ax[0].imshow(im), ax[0].set_title('target', size=10)
ax[1].imshow(im2), ax[1].set_title('matched template', size=10)
for a in ax.ravel():a.set_axis_off()
plt.tight_layout()
plt.show()
Y = np.arange(F_cc.shape[0])
X = np.arange(F_cc.shape[1])
X, Y = np.meshgrid(X, Y)
Z = c
plot_3d(X,Y,Z, cmap='YlOrRd')

模板图像
模板匹配
功率谱

相关链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测

相关内容

热门资讯

案例23-服务出现频繁掉线情况 目录 一、背景介绍 二、分析原因 1.nacos中data文件的作用 2. data路径下prot...
【文心一言】什么是文心一言,如... 文心一言什么是文心一言怎么获得内测资格接下来就给大家展示一下文学创作商业文案创作数理逻辑推算中文理解...
第31篇:Java流和文件操作... 目录 1、读取控制台输入流 1.1 从控制台读取多字符输入流 1.2 从控制台读取字符串流 2、读写...
Linux/Debian/Ub... 文章目录前言相关资源下载OpenCVCUDA下载CUDNN下载编译错误异常 前言 本文用来记录在l...
虚拟数字人和GPT-4的结合,... 最近,ChatGPT一直在互联网上狂飙,从 去年11月底推出到月活过亿&...
第三章 Liunx的常用命令 文章目录一、Liunx常用命令查看内存 free -m回到根目录 直接 cd 回车回到上一级目录 c...
素人做课会踩的3大坑,你中了几... 素人做课会踩的3大坑,你中了几个?大坑:盲目模仿别人做课的...
element输入框el-in... element输入框el-input之格式控制 (1)限制输入的长度&#...
oracle19c迁移手册 windows10- 查看当前用户所有的表:select table_name fro...
docker-compose搭... # 关闭防火墙 systemctl stop firewalld.service # 永久关闭防火墙...
【2023最新Activiti... 1.流程实例 1.1 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实...
基于ggdensity包的等高... 简介 科研过程中,需要绘制某个后验密度/其他的形状。在发表论文中常常使用等高线来满足该...
Leetcode 105. 从... 题目: 给定两个整数数组 preorder 和 inorder ,其中 ...
点亮LED 目录 一、LED 硬件控制方式 二、LED 应用程序 1、定义宏 2、main函数 ①、打开文件  ...
随想008:烂摊子 我看到过很多离谱的现象。比如: 程序 代码重复、命名随意、逻辑混乱、甚至对齐都不一致&...
2023长沙到广州的火车时刻表... 今天给各位分享2023长沙到广州的火车时刻表,从长沙到广州高铁最新...的知识,其中也会对长沙到广州...
车载DVD一体机导航升级教程(... 本篇文章极速百科给大家谈谈车载DVD一体机导航升级教程(凯立德)(超详细),以及汽车凯立德导航用u盘...
圈内sp是什么意思(sp圈里是... 今天给各位分享圈内sp是什么意思的知识,其中也会对sp圈里是什么样的进行解释,如果能碰巧解决你现在面...
鸡蛋撞地球(鸡蛋撞地球怎么制作... 本篇文章极速百科给大家谈谈鸡蛋撞地球,以及鸡蛋撞地球怎么制作对应的知识点,希望对各位有所帮助,不要忘...
Vue2基础语法速通2 目录计算属性计算属性的简写监视属性深层次监视watch 和 computed 区别绑定 class ...
2023年全国最新高校辅导员精... 百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等ÿ...
Web前端:Angular和R...   在编程领域,Angular 和 React 对于前端开发人员来说是目前最流行的两款...
【Git】SourceTree... 本系列文章前言   之前一直用的TeamFoundation,近期要代码迁移到Gite...
五官是指哪些(五官是指哪些器官... 今天给各位分享五官是指哪些的知识,其中也会对五官是指哪些器官进行解释,如果能碰巧解决你现在面临的问题...
北京汽车交易市场有哪些(北京车... 本篇文章极速百科给大家谈谈北京汽车交易市场有哪些,以及北京车市场在哪里对应的知识点,希望对各位有所帮...
微信吃喝玩乐在哪里搜(微信中吃... 本篇文章极速百科给大家谈谈微信吃喝玩乐在哪里搜,以及微信中吃喝玩乐在哪儿对应的知识点,希望对各位有所...
马勒滤清器怎么样(马勒滤清器产... 今天给各位分享马勒滤清器怎么样的知识,其中也会对马勒滤清器产品目录进行解释,如果能碰巧解决你现在面临...
Java服务器-NIO模型-J... Java服务器 NIO概览 NIO模型 每个客户端关联的套接字都注册到服务器的选择器(...
Vault配置中心产品调研实施... Vault配置中心产品调研实施方案 一、需求描述 nacos作为配置中文,数据都是明文...
镜头校正软件的新标杆DxO P... 镜头校正软件的新标杆DxO PhotoLab 6 的光学校正功能基于 DxO 专用实验室 20 年的...