当前位置: 首页 > news >正文

【图像配准】方法总结

 图像配准(Image registration)就是将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已经被广泛地应用于遥感数据分析、计算机视觉、图像处理等领域。

图像之间的空间关系可以表示为刚性(rigid,如平移和旋转),仿射(affine,如剪切),单应性(homographies)或复杂的大变形模型(complex large deformations models)。

一.基于特征的方法

基于特征的图像配准的步骤如下:

1. 特征检测

检测参考图像和感知图像中独特的对象(封闭边界区域、边缘、轮廓、线交叉点、角等)。每个关键点由描述符表示,关键点基本特征的特征向量。描述符应该对图像变换(定位,缩放,亮度等)具有鲁棒性。常用的检测算法如下:

•SIFT:Scale-invariant feature transform不能免费用于商业用途。SIFT特征描述符对于均匀缩放,方向,亮度变化和对仿射失真不变的部分不会发生变化。

•SURF:Speeded Up Robust Features,受SIFT启发的探测器和描述符。非常快。同样是有专利的。

•ORB:Oriented FAST and Rotated BRIEF)是1种快速的二进制描述符,基于 FAST(Features from Accelerated Segment Test)关键点检测和 BRIEF(Binary robust independent elementary features)描述符的组合。它具有旋转不变性和对噪声的鲁棒性。

2. 特征匹配

建立参考图像和感知图像中的特征之间的相关性。匹配方法是基于图片的内容或控制点集的符号描述。

3. 估计变换模型

计算映射函数的参数和种类,将检测到的图片与参考图像对齐。映射函数如单应性变换(Homographies)。

4. 图像变换

使用映射函数(如Homographies矩阵)改变检测到的图像。

5.算法代码实例(Python)

import random
import math
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from PIL import Image
import numpy as np# 设置1个至少20个匹配的条件
MinMatchNum = 20
# 读取照片
L = cv2.imread('1537-2024-08-05_15-26-37.png')  # queryImage
R = cv2.imread('1537-2024-08-05_15-26-37.png')  # trainImage
# 高斯滤波
L = cv2.GaussianBlur(L, (3, 3), 0)
R = cv2.GaussianBlur(R, (3, 3), 0)
# 创建sift检测器
sift = cv2.SIFT_create()
# 计算所有特征点的特征值kp和特征向量des
left_kp, left_des = sift.detectAndCompute(R, None)
righ_kp, righ_des = sift.detectAndCompute(L, None)
bf = cv2.BFMatcher()
matches = bf.knnMatch(left_des, righ_des, k=2)
# 进行特征点匹配筛选
BetterChoose1 = []
for m, n in matches:# 认为第1近的点小于第2近的点1倍以上是好的匹配BetterChoose1if m.distance < 0.5 * n.distance:BetterChoose1.append(m)
BetterChoose2 = np.expand_dims(BetterChoose1, 1)
match = cv2.drawMatchesKnn(L, left_kp, R, righ_kp, BetterChoose2[:30], None, flags=2)
print(len(BetterChoose1),MinMatchNum)
if len(BetterChoose1) > MinMatchNum:# 获取关键点的坐标src_pts = np.float32([left_kp[m.queryIdx].pt for m in BetterChoose1]).reshape(-1, 1, 2)dst_pts = np.float32([righ_kp[m.trainIdx].pt for m in BetterChoose1]).reshape(-1, 1, 2)print('src_pts:',src_pts,src_pts.shape)print('dst_pts:',dst_pts,dst_pts.shape)# 调用RANSAC方法得到解HH, modle = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)wrap = cv2.warpPerspective(R, H, (R.shape[1] + R.shape[1], R.shape[0] + R.shape[0]))wrap[0:R.shape[0], 0:R.shape[1]] = L# 得到新的位置rows, cols = np.where(wrap[:, :, 0] != 0)min_row, max_row = min(rows), max(rows) + 1min_col, max_col = min(cols), max(cols) + 1# 去除黑色无用部分LeftAndRight = wrap[min_row:max_row, min_col:max_col, :]
# 将图片结果进行显示
scal = 0.7
cv2.imshow('connect', cv2.resize(match, (0, 0), fx=scal, fy=scal, interpolation=cv2.INTER_NEAREST))
cv2.imshow('LeftAndRight', cv2.resize(LeftAndRight, (0, 0), fx=scal, fy=scal, interpolation=cv2.INTER_NEAREST))
cv2.waitKey(0)
cv2.destroyAllWindows()

二.深度学习方法

深度学习在图像配准方面的应用表现为特征提取和Homography学习2个方面。

1.特征提取

将深度网络应用于特征提取的步骤,而不是使用SIFT或类似算法。

使用预训练的VGG网络层来生成1个特征描述符,同时保留卷积信息和局部特征。描述符的性能优于类似SIFT的探测器,特别是在SIFT包含许多异常值或无法匹配足够数量特征点的情况下。

论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8404075

代码链接:https://github.com/yzhq97/cnn-registration

2.Homography学习

利用神经网络直接学习几何变换对齐2幅图像,而不仅仅局限于特征提取。

2016 年的CVPR上,Daniel DeTone等人提出了1种叫作HomographyNet的基于深度学习的无监督单应性变换网络。

网络产生8个数值作为输出。以监督的方式进行训练,并计算输出和真实单应性之间的欧几里德损失。

论文链接:https://arxiv.org/pdf/1606.03798

代码链接:https://github.com/breadcake/Deep-homography-estimation-pytorch

相关文章:

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器&#xff08;成像设备&#xff09;或不同条件下&#xff08;天候、照度、摄像位置和角度等&#xff09;获取的两幅或多幅图像进行匹配、叠加的过程&#xff0c;就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…...

LabVIEW汽车综合参数测量

系统基于LabVIEW虚拟仪器技术&#xff0c;专为汽车带轮生产中的质量控制而设计&#xff0c;自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合&#xff0c;能够对带轮的直径、厚度等多个参数进行高精度测量&#xff0c;并通过比较测量法判定产品合…...

三相异步电动机没有气压怎么办?

三相异步电动机作为工业和商业应用中最常见的电动机类型之一&#xff0c;广泛应用于各类机械设备及自动化系统中。其运行依赖于电能的转换&#xff0c;然而在某些情况下&#xff0c;可能会出现电动机驱动设备无法获得气压的情况。 一、三相异步电动机工作原理 三相异步电动机…...

软件工程书籍推荐

软件工程推荐这几本书&#xff1a; 1、软件设计的哲学&#xff08;第2版&#xff09; 本书深入探讨了软件设计中的核心问题&#xff1a;如何将复杂的软件系统分 解为可以相对独立实现的模块&#xff08;例如类和方法&#xff09;&#xff0c;从而降低其复杂性并 提高开发效率。…...

验证集和测试集的区别

验证集&#xff08;Validation Set&#xff09;和测试集&#xff08;Test Set&#xff09;在机器学习模型训练过程中扮演着不同的角色&#xff0c;以下是它们之间的主要区别&#xff1a; 目的&#xff1a; 验证集&#xff1a;用于在模型训练过程中调整模型的超参数和做出训练…...

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…...

Next.js流量教程:核心 Web Vitals的改善

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 引言 1. 什么是 Core Web Vitals&#xff1f; 1.1 Largest Contentful Paint (LCP) 1.2 First Input Delay (FID) 1.3 Cumulative Layout Shift (CLS) 2. 如何优化 …...

百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!

百度智能云千帆 AppBuilder 发版升级&#xff01; 进一步降低开发门槛&#xff0c;落地大模型到应用的最后一公里。在千帆 AppBuilder 最新升级的 V1.1版本中&#xff0c;企业级 RAG 和 Agent 能力再度提升&#xff0c;同时组件生态与应用集成分发更加优化。 • 企业级 RAG&am…...

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

12.11数据结构-图

无向完全图&#xff1a;在无向图中&#xff0c;如果任意两个顶点之间都存在边&#xff0c;则称该图为无向完全图。 有向完全图&#xff1a;在有向图中&#xff0c;如果任意两个顶点之间都存在方向相反的两条弧&#xff0c;则称该图为有向完全图。 含有n个顶点的无向完全图有…...

BERT模型入门(2)BERT的工作原理

文章目录 如名称所示&#xff0c;BERT&#xff08;来自Transformer的双向编码器表示&#xff09;是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。 在上一个主题《Transformer入门》中&#xff0c;我们了解到将句子作为输入喂给Transformer的编码器&a…...

python3 中的成员运算符

一. 简介 在Python 3中&#xff0c;成员运算符用于测试序列&#xff08;如字符串、列表、元组、集合或字典&#xff09;中是否包含某个值。身份运算符用于比较两个对象的身份&#xff0c;即它们是否引用内存中的同一个对象。 本文简单学习一下 python3 中的成员运算符与身份运…...

【测试面试篇1】测试开发与开发|selenium实现自动化测试|设计测试用例|常见的测试方法|开发不认可提测试的bug该怎么办

目录 1.选择走测试为什么还要学这么多的开发知识&#xff1f; 2.为什么选择软件测试开发岗位而不是软件开发岗位&#xff1f; 3.个人的职业规划是什么&#xff1f; 4.测试中遇到的问题如何进行解决&#xff1f; 5.对自己的项目做过哪些测试工作&#xff1f; 6.描述selenium…...

人大金仓数据linux安装注意事项

人大金仓数据linux安装注意事项 本次是个人搭建虚拟机安装centos7的环境下进行安装。 1、安装流程参照https://help.kingbase.com.cn/v9/install-updata/install-linux/preface.html。 2、mount安装文件报错 操作手册提供mount的命令如下&#xff1a; mount KingbaseES_V009R0…...

【Maven】多模块项目的构建

项目构建 什么是构建&#xff1f; 项目构建指的是将源代码和资源文件转换为可执行或可分发的软件制品&#xff08;如 JAR、WAR 文件&#xff09;的过程。这个过程不仅包括编译代码&#xff0c;还包括运行测试、打包、部署等步骤。Maven 提供了一套标准化的方法来处理这些任务…...

大模型学习笔记------SAM模型详解与思考

大模型学习笔记------SAM模型详解与思考 1、SAM框架概述2、Segment Anything Task3、Segment Anything Model SAM模型是Meta 提出的分割一切模型&#xff08;Segment Anything Model&#xff0c;SAM&#xff09;突破了分割界限&#xff0c;极大地促进了计算机视觉基础模型的发展…...

crictl和ctr与docker的命令的对比

crictl是遵循CRI接口规范的一个命令行工具&#xff0c;通常用它来检查和管理kubelet节点上的容器运行时和镜像 ctr是containerd的一个客户端工具&#xff0c; 接下来就是crictl的的常见命令&#xff0c;其中能完全替代docker命令的参照下列表格 操作crictldocker查看运行容器…...

SQLite建表语句示例(含所有数据类型、索引、自增主键、唯一索引)

下面是一个示例&#xff0c;展示如何创建一个用户信息表。 包含 SQLite 支持的所有数据类型&#xff0c;同时设置主键为自增、一个字段为唯一索引&#xff0c;以及另一个字段为普通索引&#xff1a; -- 创建用户信息表 CREATE TABLE user_info (id INTEGER PRIMARY KEY AUTOI…...

探秘Redis哨兵模式:原理、运行与风险全解析

一、引言 Redis 概述 在当今的数据存储领域&#xff0c;Redis 占据着十分重要的地位。它是一个内存中的数据存储&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;被数百万开发人员广泛应用于诸多场景之中&#xff0c;已然成为构建高性能、可扩展应用程序的得力工具。 从…...

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一&#xff0c;它不仅确保了数据的正确表示&#xff0c;还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义&#xff0c;减少误解&#xff0c;并且对于自动化报告生成、财…...

零基础学安全--wireshark简介

目录 主要功能 捕获网络数据包 协议解析 数据包分析 数据包重组 过滤功能 统计与图表功能 官网 Wireshark是一个开源的网络协议分析工具 主要功能 捕获网络数据包 能够实时捕获网络中传输的数据包&#xff0c;用户选择要监听的网络接口&#xff08;如以太网、WiFi等…...

[Flutter] : Clipboard

import package:flutter/material.dart; import package:flutter/services.dart; setData Clipboard.setData(ClipboardData(text: "传入的文字内容")); getData Clipboard.getData(Clipboard.kTextPlain) 记录 &#xff5c; Flutter剪切板-刨根问底做一个可以在后台…...

ArcGIS MultiPatch数据转换Obj数据

文章目录 ArcGIS MultiPatch数据转换Obj数据1 效果2 技术路线2.1 Multipatch To Collada2.2 Collada To Obj3 代码实现4 附录4.1 环境4.2 一些坑ArcGIS MultiPatch数据转换Obj数据 1 效果 2 技术路线 MultiPatch --MultipatchToCollada–> Collada --Assimp–> Obj 2.…...

《开源数据:开启信息共享与创新的宝藏之门》

《开源数据&#xff1a;开启信息共享与创新的宝藏之门》 一、开源数据概述&#xff08;一&#xff09;开源数据的定义&#xff08;二&#xff09;开源数据的发展历程 二、开源数据的优势&#xff08;一&#xff09;成本效益优势&#xff08;二&#xff09;灵活性与可定制性&…...

如何评估基于TRIZ理论生成的方案的可行性和有效性?

在科技创新与问题解决的过程中&#xff0c;TRIZ理论&#xff08;发明问题解决理论&#xff09;以其系统性和高效性著称&#xff0c;为工程师和创新者提供了一套强大的工具和方法。然而&#xff0c;仅仅依靠TRIZ理论生成创新方案并不足以确保项目的成功&#xff0c;关键在于如何…...

sh-寡肽-78——头发护理多肽原料,改善头发外观

主要特征 人的头发纤维结构由角质层、皮质和髓质组成。角质层约占头发重量的 15%&#xff0c;由重叠的细胞层组成&#xff0c;类似于鳞片系统&#xff0c;半胱氨酸含量很高。它为头发纤维提供保护作用。皮质是头发的中间区域&#xff0c;负责头发的强度、弹性和颜色。它由多种细…...

metagpt 多智能体系统

metagpt 多智能体系统 代码1. 动作及角色定义2. 主函数 代码解释1. 导入模块&#xff1a;2. 环境设置&#xff1a;3. 定义行动&#xff08;Action&#xff09;&#xff1a;4. 定义角色&#xff08;Role&#xff09;&#xff1a;5. 学生和老师的行为&#xff1a;6. 主函数&#…...

下采样在点云处理中的关键作用——以PointNet++为例【初学者无门槛理解版!】

一、前言 随着3D传感器技术的快速发展&#xff0c;点云数据在计算机视觉、机器人导航、自动驾驶等领域中的应用日益广泛。点云作为一种高效的3D数据表示方式&#xff0c;能够精确地描述物体的几何形状和空间分布。然而&#xff0c;点云数据通常具有高维度和稀疏性的特点&#…...

pytorch ---- torch.linalg.norm()函数

torch.linalg.norm 是 PyTorch 中用于计算张量范数&#xff08;Norm&#xff09;的函数。范数是线性代数中的一个重要概念&#xff0c;用于量化向量或矩阵的大小或长度。这个函数可以处理任意形状的张量&#xff0c;支持多种类型的范数计算。 1.函数签名 torch.linalg.norm(…...

系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)

每日禅语 “木末芙蓉花&#xff0c;山中发红萼&#xff0c;涧户寂无人&#xff0c;纷纷开自落。​”这是王维的一首诗&#xff0c;名叫《辛夷坞》​。这首诗写的是在辛夷坞这个幽深的山谷里&#xff0c;辛夷花自开自落&#xff0c;平淡得很&#xff0c;既没有生的喜悦&#xff…...