sift算法_单应性Homograph估计:从传统算法到深度学习

c0d6c78b5520a364e35dd8ddd8378c1d.png

单应性原理被广泛应用于图像配准,全景拼接,机器人定位SLAM,AR增强现实等领域。这篇文章从基础图像坐标知识系为起点,讲解图像变换与坐标系的关系,介绍单应性矩阵计算方法,并分析深度学习在单应性方向的进展。

本文为入门级文章,希望能够帮助读者快速了解相关内容。

目录
一 图像变换与平面坐标系的关系
二 平面坐标系与齐次坐标系
三 单应性变换
四 深度学习在单应性方向的进展

c30ef5b09ffdcac1ba29de576cd7f186.png
单应性估计在图像拼接中的应用

一 图像变换与平面坐标系的关系

  • 旋转:

将图形围绕原点

逆时针方向旋转
角,用解析式表示为:

d6a87749e144f1848b3f51188d14c36b.png

f36804223be800fde033b557ab6ae275.png
旋转

写成矩阵乘法形式:

f1643bafd360edfd9f679e22d5f312db.png
  • 平移:

49a9a166f148b3a4d581d0b22ab25a6d.png

cd53530c3a612b8df90695510b380282.png
平移

a68ccefd4c1293aa321335b70fcd3082.png

但是现在遇到困难了,平移无法写成和上面旋转一样的矩阵乘法形式。所以引入齐次坐标

,再写成矩阵形式:

736bddd6b5e4c494a9bf681825da3145.png

其中

表示单位矩阵,而
表示平移向量。

那么就可以把把旋转平移统一写在一个矩阵乘法公式中,即刚体变换

4f2250336b2071c47b41f6c6d9aac92a.png

而旋转矩阵

是正交矩阵(
)。

34e98ce32dd3de7f986c1c29321357de.png
刚体变换:旋转+平移(正方形-正方形)
  • 仿射变换

3d1c36a0183a8344a3f1f847fb49914b.png

其中

可以是任意2x2矩阵(与
一定是正交矩阵不同)。

96c84901cab9da4afb2bfa57cfae1c17.png
仿射变换(正方形-平行四边形)

可以看到,相比刚体变换(旋转和平移),仿射变换除了改变目标位置,还改变目标的形状,但是会保持物体的“平直性”。

不同

矩阵对应的各种基本仿射变换:

9f20d91f429c6e53a7469f7d83e4ee78.png
  • 投影变换(单应性变换)

583d42dee6d77a15aaab7a1e7e7abf7e.png

86e89b7f6c576fa554126bb4fffc3c7a.png
投影变换(正方形-任意四边形)

简单说,投影变换彻底改变目标的形状。

总结一下:

  1. 刚体变换:平移+旋转,只改变物体位置,不改变物体形状
  2. 仿射变换:改变物体位置和形状,但是保持“平直性”
  3. 投影变换:彻底改变物体位置和形状

fde1186effb5930acfdd7d13f68c463c.png
注:上图“投影变换”应该是“任意四边形”

我们来看看完整投影变换矩阵各个参数的物理含义:

7195a13e60219ebfff411af2632198f1.png

其中

代表
仿射变换参数,
代表
平移变换参数。

表示一种“变换后边缘交点“关系,如:

7fe666b401206e8f8d81ca5185136217.png

至于

则是一个与
相关的缩放因子。

83334a1f1f643c93eb6dab6cd344e062.png

一般情况下都会通过归一化使得

(原因见下文)。

二 平面坐标系与齐次坐标系

问题来了,齐次坐标到底是什么?

齐次坐标系

与常见的三维空间坐标系
不同,只有两个自由度:

ae9fd0a1c7b3723c5e3917cad3afdb25.png

(其中
)对应坐标
的缩放尺度。当
时:

75e79005ccec2581bc9d3c3b0b14f8ba.png

特别的当

时,对应无穷远:

4699f88c4cd0c9b1b1fa2649a051bf0f.png

三 单应性变换

  • 单应性是什么?

此处不经证明的给出:同一个 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性,可以用 [投影变换] 表示 。

注意:单应性成立是有条件的!

b36861ee1d893846899d9445c125c53c.png

简单说就是:

09d8724fc19c8dbc2deb353176ebc499.png

其中

是Left view图片上的点,
是Right view图片上对应的点。
  • 那么这个
    单应性矩阵如何求解呢?

更一般的,每一组匹配点

6b6102354fd6313c25ec528d50261394.png

由平面坐标与齐次坐标对应关系

,上式可以表示为:

737db063f5abe590d9d8ee86c75210fb.png

进一步变换为:

09d1501ff2317d0a0f4cd49623ab5e8e.png

写成矩阵

形式:

370d8127886068da1e5f70595f9d0dad.png

也就是说一组匹配点

可以获得2组方程。
  • 单应性矩阵8自由度

注意观察:单应性矩阵

其实完全一样(其中
),例如:

328208c47329b3b230251fc676707638.png

即点

无论经过
还是
映射,变化后都是

如果使

,那么有:

b748562e0a05253b107612f4efee7810.png

所以单应性矩阵

虽然有9个未知数,但只有8个自由度。

在求

时一般添加约束
(也有用
约束),所以还有
共8个未知数。由于一组匹配点
对应2组方程,那么只需要
组不共线的匹配点即可求解
的唯一解。

dfdcd934dcfe24a6f98cf34962166b5c.png
XIAOMI9拍摄,有镜头畸变

OpenCV已经提供了相关API,代码和变换结果如下。

import 

855917c820d3e212007b4c40e6401c6c.gif

可以看到:

  1. 红框所在平面上内容基本对齐,但受到镜头畸变影响无法完全对齐;
  2. 平面外背景物体不符合单应性原理,偏离很大,完全无法对齐。
  • 传统方法估计单应性矩阵

一般传统方法估计单应性变换矩阵,需要经过以下4个步骤:

  1. 提取每张图SIFT/SURF/FAST/ORB等特征点
  2. 提取每个特征点对应的描述子
  3. 通过匹配特征点描述子,找到两张图中匹配的特征点对(这里可能存在错误匹配)
  4. 使用RANSAC算法剔除错误匹配
  5. 求解方程组,计算Homograph单应性变换矩阵

示例代码如下:

#coding:utf-8

290ce8a5695ee05188c8f3d75f63cb0e.png

相关内容网上资料较多,这里不再重复造轮子。需要说明,一般情况计算出的匹配的特征点对

数量都有
,此时需要解超定方程组(类似于求解线性回归)。

四 深度学习在单应性方向的进展

  • HomographyNet(深度学习end2end估计单应性变换矩阵)
Deep Image Homography Estimation​arxiv.org

HomographyNet是发表在CVPR 2016的一种用深度学习计算单应性变换的网络,即输入两张图,直接输出单应性矩阵

7c517e9ce3007d8378fedbbad346d3f3.png

在之前的分析中提到,只要有4组

匹配点即可计算
的唯一解。

相似的,只要有4组

也可以计算出
的唯一解:

403635295860384f71746793afd08793.png

其中

dfa2019ea9e89b91b7974f806f5f267a.png

分析到这里,如果要计算

,网络输出可以有以下2种情况:
  1. Regression:网络直接输出
    共8个数值

这样设置网络非常直观,使用L2损失训练,测试时直接输出8个float values,但是没有置信度confidence。即在使用网络时,无法知道当前输出单应性可靠程度。

2. Classification:网络输出

共8个值的量化值+confidence

这时将网络输出每个

量化成21个区间,用分类的方法判断落在哪一个区间。训练时使用Softmax损失。相比回归直接输出数值,量化必然会产生误差,但是能够输出分类置信度评判当前效果好坏,更便于实际应用。

另外HomographyNet训练时数据生成方式也非常有特色。

  1. 首先在随机
    位置获取正方形图像块Patch A
  2. 然后对正方形4个点进行随机扰动,同时获得4组
  3. 再通过4组
    计算
  4. 最后将图像通过
    变换,在变换后图像
    位置获取正方形图像块Patch B

那么图像块A和图像块B作为输入,4组

作为监督Label,进行训练

5e5249e7dfe89a2d3db3841191cd2efb.png

可以看到,在无法提取足够特征点的弱纹理区域,HomographyNet相比传统方法确实有一定的优势:

2f81d3a26316b93bcf01bcb881b2300b.png
  • Spatial Transformer Networks(直接对CNN中的卷积特征进行变换)
Spatial Transformer Networks​arxiv.org

其实早在2015年,就已经有对CNN中的特征进行变换的STN结构。

091d8861c0aed3a818b6efc3a741727e.png

假设有特征层

,经过卷积变为
,可以在他们之间插入STN结构。这样就可以直接学习到从特征
上的点
映射到特征
对应点
的仿射变换。

cb849faccccf0a4d1d9c49125655b740.png

其中

对应STN中的仿射变换参数。STN直接在特征维度进行变换,且可以插入轻松任意两层卷积中。
  • DELF: DEep Local Features(深度学习提取特征点与描述子)

之前提到传统方法使用SIFT和Surf等特征点估计单应性。显然单应性最终估计准确度严重依赖于特征点和描述子性能。Google在ICCV 2017提出使用使用深度学习提取特征点。

tensorflow/models/delf​github.com
ae2848e3e23b3d59038fd39c2aade9e6.png

9e62ce8425652c4ca739b7a09f0ec0b3.png

考虑到篇幅,这里不再展开DELF,请有兴趣的读者自行了解相关内容。

相机数学模型点这里:

相机模型与视觉测距不完全指南​zhuanlan.zhihu.com
f2213b9014a2447d895689afe2852fbe.png

对极几何点这里:

从对极几何恢复相机运动​zhuanlan.zhihu.com
8fedbb7f2e16def8693b3291a361faea.png

创作不易,不想被白嫖,求点赞、关注、收藏三连!

感谢点赞的小可爱!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值