Kaggle 2023 IMC图像匹配 (69/494)---特征提取、图像匹配、三维重建

数据集:

比赛方提供三种类型的数据集,包括“遗迹”,“物体”,“建筑”,分为训练集和测试集。每种类型的数据集包含一系列用相机拍摄的不同角度方位的对于同一个目标的多视图照片。

任务:

比赛要求参赛者根据多视图照片重建三维场景,参赛者需提供每张照片在该场景下的旋转矩阵和平移向量.

世界坐标下每个物体都有固定的坐标,相机内参数主要是相机焦距,比赛的任务是根据图像的点坐标计算出图像的相机位姿R和t。首先对图像进行特征点提取,对特征点进行匹配,得到匹配的特征点进行捆绑调整,稀疏重建。

最终解决方案:

图像对筛选:

由于图像比较多,使用全局性的图像匹配会耗费很多时间,因此在比赛中对预匹配采用了两种方法。

  1. 利用已经预训练的图像分类模型Efficientnet对每张图像进行特征提取,选择倒数第二层的特征向量作为输出,计算两张图像之间的特征向量的余弦相关性作为筛选指标,指定一个阈值作为筛选
  2. 使用SIFT对所有图像对进行特征提取和特征匹配(adalam),从中筛选出特征点比较多的图像对作为最终图像对(最终选择)

特征点提取:

采用多模型串联并联方式提取匹配点,对三种图像尺度640,800,1200分别利用LoFTR和Superglue提取特征点,再对提取到的特征点进行聚类,从中裁剪出包含80%的特征点所在区域,再对该区域进行LoFTR和DKM特征提取。最后将两次提取到的特征点进行concat。

三维重建:

pycolmap

相关知识:

Efficientnet

  1. 使用用NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率r,网络的深度depth以及channel的宽度width三个参数的合理化配置。
  2. 同时增加网络的width、网络的深度以及输入网络的分辨率来提升网络的性能。

余弦相关性

余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越接近;越趋近于-1,他们的方向越相反;接近于0,表示两个向量近乎于正交。

SIFT

  • 高斯差分金字塔
    SIFT算法中的S指的是"scale"即尺度的概念,这一概念有别于传统的图像尺寸,而是一种连续变化的参数,在高斯金字塔里的σ就是这样一个尺度空间的参数,更特殊的,高斯核是唯一可以产生连续多尺度变化的线性核


高斯差分金字塔的Intuition有两个:
1. 人看物体时近大远小,可以对图片下采样实现(金字塔->组);
2. 人看物体时近处清晰,远处模糊,可以对图像高斯平滑实现(高斯->层)
在SIFT里,高斯金字塔的层数和组数有着如下设定组数: �=���2���(�,�)−3 ,层数:S = n + 3,组数的设定是来自于提出SIFT算法的原始论文给出的经验值,,层数的设定则是有着理论依据的,这里的n是我们想要提取特征点的图片层数,由于提取出高斯金字塔后需要计算层间差分以获得高斯差分金字塔(DOG, Difference of Gausssian),高斯金字塔层数需要比DOG层数多1,而计算特征值时要求在尺度层面,即上下相邻层间计算,则DOG层数要比特征层数多2,则要求S = n + 3

  • 特征点处理

得到DOG后,我们理论上来说就已经获得了特征值,但我们需要对特征值进行一些处理,去掉没那么特征的特征值。简单的阈值化去除掉变换没有那么剧烈的点,这些点就有可能是噪声引起的,算是在高斯拉普拉斯之外又加了一层去噪措施。这里的T为经验值0.04,n为之前提过的提取特征点数目

  • 关键点定位

关键点定位即DOG空间极值检测定位。在上一步得到DoG高斯差分金字塔后,怎么找到差分后的极值点。为了寻找尺度空间的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的3×3邻域8个像素点,以及其相邻的上下两层的3×3领域18个像素点,共26个像素点进行比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。

  • 关键点精确定位

这些候选关键点是DOG空间的局部极值点,而且这些极值点均为离散的点,离散空间的极值点并不是真正的极值点,精确定位极值点的一种方法是,对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像元插值

  • 消除边缘效应

为了得到稳定的特征点,只是删除DoG高斯差分函数响应值低的点是不够的。由于DoG对图像中的边缘有比较强的响应值,而一旦特征点落在图像的边缘上,这些点就是不稳定的点。一方面图像边缘上的点是很难定位的,具有定位歧义性;另一方面这样的点很容易受到噪声的干扰而变得不稳定。一个平坦的DoG响应峰值往往在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。而主曲率可以通过2X2的Hessian矩阵H求出

  • 特征点方向确定

每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度和方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但是方向不同的特征点。在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。计算得到梯度方向后,使用直方图统计特征点邻域内像素对应的梯度方向和幅值。梯度方向的直方图的横轴是梯度方向的角度(梯度方向的范围是0到360度,直方图每36度一个柱共10个柱,或者每45度一个柱共8个柱),纵轴是梯度方向对应梯度幅值的累加,在直方图的峰值就是特征点的主方向

在梯度直方图中,当存在一个相当于主峰值80%能量的柱值时,则可以将这个方向认为是该特征点辅助方向。所以,一个特征点可能检测到多个方向(也可以理解为,一个特征点可能产生多个坐标、尺度相同,但是方向不同的特征点)得到特征点的主方向后,对于每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度和方向。由此可以确定一个SIFT特征区域,一个SIFT特征区域由三个值表示,中心表示特征点位置,半径表示关键点的尺度,箭头表示主方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但是方向不同的特征点

  • 生成描述符

为了保证特征矢量的旋转不变性,要以特征点为中心,在附近邻域内将坐标轴旋转θ角度,即将坐标轴旋转为特征点的主方向

旋转后以主方向为中心取 8×8的窗口。下图所示,左图的中央为当前关键点的位置,每个小格代表为关键点邻域所在尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算。最后在每个4×4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由4个种子点组成,每个种子点有8个方向的向量信息(也就是在这个例子里,一个关键点的描述子为4*8=32维向量)。这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性

RANSAC

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

1.首先我们先随机假设一小组局内点为初始值。然后用此局内点拟合一个模型,此模型适应于假设的局内点,所有的未知参数都能从假设的局内点计算得出。

2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点,将局内点扩充。

3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。

4.然后,用所有假设的局内点去重新估计模型,因为此模型仅仅是在初始的假设的局内点估计的,后续有扩充后,需要更新。

5.最后,通过估计局内点与模型的错误率来评估模型。

整个这个过程为迭代一次,此过程被重复执行固定的次数,每次产生的模型有两个结局:

1、要么因为局内点太少,还不如上一次的模型,而被舍弃,

2、要么因为比现有的模型更好而被选用。

Adalam

AdaLAM的全称是Adaptive Locally-Affine Matching(自适应局部仿射匹配),是一种高效快速外点滤除算法。首先有两张图片I1和I2,在两张图片上提取SIFT特征点,存于K1、K2中,用最近邻匹配法从K1、K2中提取得到候选匹配集(putative matches)M。因为描述子自身的限制,M中会有大量的误匹配,我们的目标是得到一个尽可能接近正确的匹配集M’

1、输入候选匹配对(包含大量外点)

2、选择一定数量的种子点(seed points),这些种子点分布较好,且置信度较高。

选择方法: 首先给每个关键点分配一个置信度分数(confident score),对于置信度分数较低的点做半径为R圆内的局部非极大值抑制(local non-maximum suppression),如果该点的置信度为极大值,即圆内置信度最高的点,那么将该点升级为种子点(seed point)。其中置信度分数由ratio-test给出。

ratio-test理解:取图像1中的某个关键点,并在图像2中找出与其距离最近的前两个关键点,在这两个关键点中,若最近的距离除以次近的距离小于某个阈值,则接受这一对匹配点。由于特征空间的高维性,相近的距离可能有大量的错误匹配,从而它的ratio值比较高。Lowe推荐ratio的取值为0.8,但作者对大量存在尺度、旋转和亮度变化的两幅图片进行匹配,实验结果表明ratio取值在0. 4~0. 6为最佳,小于0. 4会造成非常少的匹配点,大于0. 6会造成大量的错误匹配点。PS: 置信度和置信度分数是不一样的,置信度分数越低,置信度越高。计算匹配时其实是从1对多的点对匹配中找到描述子距离最小的作为最终匹配结果,而ratio-test给的分数指的是 score = 最小距离/次小距离,这个分数越小,说明这个点没有其他模棱两可的备胎,也就是置信度越高。

3、以种子点为中心,画圆,在圆内从候选匹配中选择与该种子点在同一个区域的匹配点。

4、对于每一个圆,用局部仿射变换验证一致性,最后输出一组内点。

对每个小邻域进行自适应仿射变换验证,按照RANSAC的思想从邻域内选取最小样本集(最少只需要两对匹配点)来估计仿射变换矩阵,然后筛除离群点,续再从剩余的匹配点中采样继续估计仿射变换矩阵,如此反复迭代一定的次数,剩下的匹配点就看作是正确的匹配点。本文采用的是PROSAC(RANSAC的一种改进版)的采样思想,不是随机的从候选匹配点中选择样本来估计仿射变换矩阵,而是引入比率测试(ratio-test)得分来偏置采样分布,使得置信度更高的匹配点更优先被选中

LoFTR

LoFTR是一种新颖的用于局部图像特征匹配的方法。代替了传统的顺序执行图像特征检测,描述和匹配的步骤,本文提出首先在粗粒度上建立逐像素的密集匹配,然后在精粒度上完善精修匹配的算法

1、假设我的输入是640*480,使用resnet+FPN提取分辨率为 1/8的粗略特征图以及 1/2的精细特征图,分别是80*60和320*240

2、Positional Encoding:使用的是sin/cos函数进行编码,然后将编码与特征图相加,用于后续输入至transformer

3、将粗略特征图输入至粗特征提取的transformer提取匹配特征:该transformer由多个交替的自注意力交叉注意力层构成,自注意力层使得每个点关注其周围所有点的关联,交叉注意力层使得点关注与另一幅图上的所有点的关联。

4、粗级别的匹配:使用softmax(A)*softmax(B)的方式先计算所有位置的匹配得分(概率值)矩阵 S,两张图有4800个点(80*60),就能得到一个4800*4800的得分矩阵。然后再通过互近邻MNN算法过滤掉一些离群匹配对。

5、细级别的匹配:上一步得到的4800个区域,假设筛选阈值得到142个区域,此时将精细特征图320*240中选择w*w的局部区域,论文中选择的是5*5,每个局部区域与粗匹配中的区域一一对应,也就是说即此时的特征向量是142*25*128,也就是是每张图有142个可选区域,每个区域里面有25个点,每个点有128维的向量表示。细级别的匹配需要再对这个142*25*128进行transformer提取特征,最后输出142*5*5的一个概率图,此时计算这个概率图的期望(平均),得到每个5*5区域内概率值最大的那个点的坐标,输出为142*2,但此时的坐标应该是1/2的特征图的坐标,还需要返回原图的坐标

DBSCAN

DBSCAN 算法对簇的定义很简单,由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个簇。DBSCAN 算法的簇里面可以有一个或者多个核心点。如果只有一个核心点,则簇里其他的非核心点样本都在这个核心点的 Eps 邻域里。如果有多个核心点,则簇里的任意一个核心点的 Eps 邻域中一定有一个其他的核心点,否则这两个核心点无法密度可达。这些核心点的 Eps 邻域里所有的样本的集合组成一个 DBSCAN 聚类簇

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值