当前位置: 首页 > 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

http://www.lryc.cn/news/504756.html

相关文章:

  • LabVIEW汽车综合参数测量
  • 三相异步电动机没有气压怎么办?
  • 软件工程书籍推荐
  • 验证集和测试集的区别
  • OpenIPC开源FPV之Adaptive-Link天空端代码解析
  • Next.js流量教程:核心 Web Vitals的改善
  • 百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!
  • 构建树莓派温湿度监测系统:从硬件到软件的完整指南
  • 12.11数据结构-图
  • BERT模型入门(2)BERT的工作原理
  • python3 中的成员运算符
  • 【测试面试篇1】测试开发与开发|selenium实现自动化测试|设计测试用例|常见的测试方法|开发不认可提测试的bug该怎么办
  • 人大金仓数据linux安装注意事项
  • 【Maven】多模块项目的构建
  • 大模型学习笔记------SAM模型详解与思考
  • crictl和ctr与docker的命令的对比
  • SQLite建表语句示例(含所有数据类型、索引、自增主键、唯一索引)
  • 探秘Redis哨兵模式:原理、运行与风险全解析
  • .NET平台使用C#设置Excel单元格数值格式
  • 零基础学安全--wireshark简介
  • [Flutter] : Clipboard
  • ArcGIS MultiPatch数据转换Obj数据
  • 《开源数据:开启信息共享与创新的宝藏之门》
  • 如何评估基于TRIZ理论生成的方案的可行性和有效性?
  • sh-寡肽-78——头发护理多肽原料,改善头发外观
  • metagpt 多智能体系统
  • 下采样在点云处理中的关键作用——以PointNet++为例【初学者无门槛理解版!】
  • pytorch ---- torch.linalg.norm()函数
  • 系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)
  • spring学习(spring-bean实例化(无参构造与有参构造方法实现)详解)