当前位置: 首页 > 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.mrgr.cn/news/80426.html

相关文章:

  • Visual Studio 玩转 IntelliCode AI辅助开发
  • 二、HTML5
  • MATLAB中Simulink的信号线
  • 【go语言】regexp包,正则表达式
  • 2.python变量
  • 【2024】Camunda常用功能基本详细介绍和使用(业务决策和定时事件)-下(2)
  • hive—炸裂函数explode/posexplode
  • 【漫话机器学习系列】010.Bagging算法(Bootstrap Aggregating)
  • 循环神经网络RNN笔记
  • LeetCode1.两数之和(超简单讲解)
  • 医疗领域的网络安全预防:保障患者隐私与医疗数据安全
  • LeetCode 283.移动零(超简单讲解)
  • docker离线安装、linux 安装docker
  • 概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节
  • 通过一个例子学习回溯算法:从方法论到实际应用
  • 课设项目十:智能手电筒(使用金沙滩51单片机)
  • Qt WORD/PDF(三)使用 QAxObject 对 Word 替换(QML)
  • 【系统分析师】-收官整理-已考过
  • Day13洛谷 2043+2042+2040+2035+2034+2033+2030+2027+2031+2029
  • selenium工作原理
  • Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署
  • 规则引擎drools(一)-技术要点
  • 【软件工程】简答题系列(一)(山东大学·软院考试专属)
  • 【爬虫一】python爬虫基础合集一
  • ubuntu下anconda装pytorch
  • 业务观测:从定义到场景化分析