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

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达21fe1d55710398ab02105b0297b5f594.png

本文者:白裳

https://zhuanlan.zhihu.com/p/74597564

本文已由原作者授权,不得擅自二次转载

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

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

目录
一 图像变换与平面坐标系的关系
二 平面坐标系与齐次坐标系
三 单应性变换
四 深度学习在单应性方向的进展
0c8b2cac7bf8b3765a130edeb163b880.png
单应性估计在图像拼接中的应用

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

  • 旋转:

将图形围绕原点 e8c5ec00-b915-eb11-8da9-e4434bdf6706.svg 逆时针方向旋转 eac5ec00-b915-eb11-8da9-e4434bdf6706.svg 角,用解析式表示为:

9fd8fba725988b3e82e79dcec1dc1cee.png
1546dfad3da5432a7138ff64d4412e3f.png
旋转

写成矩阵乘法形式:

9d2cef8c6ada7787bfb4d92ca0eae949.png

  • 平移:

1ac257bbdfaa41eddd1e13f3c7f3bd3d.png
11aa436558006965565e063f59c96984.png
平移
472abb730d57a1856ce75d3f7ff2bd24.png

但是现在遇到困难了,平移无法写成和上面旋转一样的矩阵乘法形式。所以引入齐次坐标 fbc5ec00-b915-eb11-8da9-e4434bdf6706.svg ,再写成矩阵形式:

cbd14778e3b446e5ce198d1640297f3b.png

其中 ffc5ec00-b915-eb11-8da9-e4434bdf6706.svg 表示单位矩阵,而 01c6ec00-b915-eb11-8da9-e4434bdf6706.svg 表示平移向量。

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

343accd1a875a93cdaa1ca1330256c5e.png

而旋转矩阵 04c6ec00-b915-eb11-8da9-e4434bdf6706.svg 是正交矩阵( 05c6ec00-b915-eb11-8da9-e4434bdf6706.svg )。

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

fa24ef68424ccf9d1fc34719c57b1f50.png

其中 0dc6ec00-b915-eb11-8da9-e4434bdf6706.svg 可以是任意2x2矩阵(与 10c6ec00-b915-eb11-8da9-e4434bdf6706.svg 一定是正交矩阵不同)。

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

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

不同 14c6ec00-b915-eb11-8da9-e4434bdf6706.svg 和 16c6ec00-b915-eb11-8da9-e4434bdf6706.svg 矩阵对应的各种基本仿射变换:

4336e34c6da0b61cb195b8b0530ecf48.png
  • 投影变换(单应性变换)

9d963dad5bdaf21e934313cb3162f22f.png
d87368e1e94ea1afe1db056e5ca05470.png
投影变换(正方形-任意四边形)

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

总结一下:

  1. 刚体变换:平移+旋转,只改变物体位置,不改变物体形状

  2. 仿射变换:改变物体位置和形状,但是保持“平直性”

  3. 投影变换:彻底改变物体位置和形状

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

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

7f5798c0f35aa5268f5c9e6fdd545085.png

其中 21c6ec00-b915-eb11-8da9-e4434bdf6706.svg 代表仿射变换参数, 22c6ec00-b915-eb11-8da9-e4434bdf6706.svg 代表平移变换参数。

而 25c6ec00-b915-eb11-8da9-e4434bdf6706.svg 表示一种“变换后边缘交点“关系,如:

3d02dfe0c8271d0b62238b3f110e048f.png

至于 2ec6ec00-b915-eb11-8da9-e4434bdf6706.svg 则是一个与 25c6ec00-b915-eb11-8da9-e4434bdf6706.svg 相关的缩放因子。

5d6848d27b3f9821ca7c4d2a136f4a45.png

一般情况下都会通过归一化使得 33c6ec00-b915-eb11-8da9-e4434bdf6706.svg (原因见下文)。

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

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

齐次坐标系 36c6ec00-b915-eb11-8da9-e4434bdf6706.svg 与常见的三维空间坐标系 39c6ec00-b915-eb11-8da9-e4434bdf6706.svg 不同,只有两个自由度:

645c96ce0e76c8daf6d698422d6027cd.png

而 3cc6ec00-b915-eb11-8da9-e4434bdf6706.svg (其中 3fc6ec00-b915-eb11-8da9-e4434bdf6706.svg )对应坐标 41c6ec00-b915-eb11-8da9-e4434bdf6706.svg 和 43c6ec00-b915-eb11-8da9-e4434bdf6706.svg 的缩放尺度。当 45c6ec00-b915-eb11-8da9-e4434bdf6706.svg 时:

5a106d6bb7da3e5d7c6f0bf4bba56ada.png

特别的当 48c6ec00-b915-eb11-8da9-e4434bdf6706.svg 时,对应无穷远:

f0f774fdf55f8b499425a990260c0c79.png

三 单应性变换

  • 单应性是什么?

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

注意:单应性成立是有条件的!
94438941ea646299fcc8495566a30f66.png

简单说就是:

95ed0db1d42c11cb7b7d19e19232afa1.png

其中 52c6ec00-b915-eb11-8da9-e4434bdf6706.svg 是Left view图片上的点, 54c6ec00-b915-eb11-8da9-e4434bdf6706.svg 是Right view图片上对应的点。

  • 那么这个 59c6ec00-b915-eb11-8da9-e4434bdf6706.svg 单应性矩阵如何求解呢?

更一般的,每一组匹配点 5cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 有

222bd4201d2e9555b6c3727a08e331e2.png

由平面坐标与齐次坐标对应关系 5fc6ec00-b915-eb11-8da9-e4434bdf6706.svg ,上式可以表示为:

62806e83e56c4f54e4d64a6e4cd52257.png

进一步变换为:

eaf655b077ece526f025729f7494b392.png

写成矩阵 67c6ec00-b915-eb11-8da9-e4434bdf6706.svg 形式:

5d7f0fe76bd741bf46b13cf4ddaadc4d.png

也就是说一组匹配点 5cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 可以获得2组方程。

  • 单应性矩阵8自由度

注意观察:单应性矩阵 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 与 73c6ec00-b915-eb11-8da9-e4434bdf6706.svg 其实完全一样(其中 74c6ec00-b915-eb11-8da9-e4434bdf6706.svg),例如:

370b0e93eea333b2f80e891a4a2ce502.png

即点 77c6ec00-b915-eb11-8da9-e4434bdf6706.svg 无论经过 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 还是 73c6ec00-b915-eb11-8da9-e4434bdf6706.svg 映射,变化后都是 7ec6ec00-b915-eb11-8da9-e4434bdf6706.svg 。

如果使 81c6ec00-b915-eb11-8da9-e4434bdf6706.svg ,那么有:

8ae4448448d80aaf74a9fa423093f4fe.png

所以单应性矩阵 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 虽然有9个未知数,但只有8个自由度。

在求 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 时一般添加约束 88c6ec00-b915-eb11-8da9-e4434bdf6706.svg (也有用 89c6ec00-b915-eb11-8da9-e4434bdf6706.svg 约束),所以还有 8cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 共8个未知数。由于一组匹配点 5cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 对应2组方程,那么只需要 92c6ec00-b915-eb11-8da9-e4434bdf6706.svg 组不共线的匹配点即可求解 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 的唯一解。

338ff887984d81f131f6bf9de8549dd0.png
XIAOMI9拍摄,有镜头畸变

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

import im2_warp = cv2.warpPerspective(im2, H, (w, h))

3b174ba5556a0cdc95f945ff94d7dd40.gif

可以看到:

  1. 红框所在平面上内容基本对齐,但受到镜头畸变影响无法完全对齐;

  2. 平面外背景物体不符合单应性原理,偏离很大,完全无法对齐。

  • 传统方法估计单应性矩阵

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

  1. 提取每张图SIFT/SURF/FAST/ORB等特征点

  2. 提取每个特征点对应的描述子

  3. 通过匹配特征点描述子,找到两张图中匹配的特征点对(这里可能存在错误匹配)

  4. 使用RANSAC算法剔除错误匹配

  5. 求解方程组,计算Homograph单应性变换矩阵

示例代码如下:

#coding:utf-8
451ebf3147972168e520d24c6b0d3703.png

相关内容网上资料较多,这里不再重复造轮子。需要说明,一般情况计算出的匹配的特征点对 5cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 数量都有 9dc6ec00-b915-eb11-8da9-e4434bdf6706.svg ,此时需要解超定方程组(类似于求解线性回归)。

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

  • HomographyNet(深度学习end2end估计单应性变换矩阵)

HomographyNet是发表在CVPR 2016的一种用深度学习计算单应性变换的网络,即输入两张图,直接输出单应性矩阵 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg 。

210cc6fe013af827f6d1ecee33c3c65b.png

在之前的分析中提到,只要有4组 5cc6ec00-b915-eb11-8da9-e4434bdf6706.svg 匹配点即可计算 59c6ec00-b915-eb11-8da9-e4434bdf6706.svg 的唯一解。

相似的,只要有4组 a6c6ec00-b915-eb11-8da9-e4434bdf6706.svg 也可以计算出 59c6ec00-b915-eb11-8da9-e4434bdf6706.svg 的唯一解:

e4106a8bfdbaf1f573b81ff73cb4594e.png

其中 acc6ec00-b915-eb11-8da9-e4434bdf6706.svg 且 b0c6ec00-b915-eb11-8da9-e4434bdf6706.svg 。

b48a8851f4cf7e24808f05c0c0187171.png

分析到这里,如果要计算 72c6ec00-b915-eb11-8da9-e4434bdf6706.svg ,网络输出可以有以下2种情况:

  1. Regression:网络直接输出 bac6ec00-b915-eb11-8da9-e4434bdf6706.svg 共8个数值

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

2. Classification:网络输出 bac6ec00-b915-eb11-8da9-e4434bdf6706.svg 共8个值的量化值+confidence

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

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

  1. 首先在随机 c0c6ec00-b915-eb11-8da9-e4434bdf6706.svg 位置获取正方形图像块Patch A

  2. 然后对正方形4个点进行随机扰动,同时获得4组 a6c6ec00-b915-eb11-8da9-e4434bdf6706.svg

  3. 再通过4组 a6c6ec00-b915-eb11-8da9-e4434bdf6706.svg 计算 c3c6ec00-b915-eb11-8da9-e4434bdf6706.svg

  4. 最后将图像通过 c4c6ec00-b915-eb11-8da9-e4434bdf6706.svg 变换,在变换后图像 c0c6ec00-b915-eb11-8da9-e4434bdf6706.svg 位置获取正方形图像块Patch B

那么图像块A和图像块B作为输入,4组 a6c6ec00-b915-eb11-8da9-e4434bdf6706.svg 作为监督Label,进行训练

2bc744c90da15a95bca214d4dc387753.png

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

62b7f031b0395ea0a7d92a3009030429.png
  • Spatial Transformer Networks(直接对CNN中的卷积特征进行变换)

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

0b85ede39a40107f34133188218751fd.png

假设有特征层 cec6ec00-b915-eb11-8da9-e4434bdf6706.svg ,经过卷积变为 d0c6ec00-b915-eb11-8da9-e4434bdf6706.svg ,可以在他们之间插入STN结构。这样就可以直接学习到从特征 cec6ec00-b915-eb11-8da9-e4434bdf6706.svg 上的点 d6c6ec00-b915-eb11-8da9-e4434bdf6706.svg 映射到特征 d0c6ec00-b915-eb11-8da9-e4434bdf6706.svg 对应点 dac6ec00-b915-eb11-8da9-e4434bdf6706.svg 的仿射变换。

e148567ed56c5cbc8e5eb6184b03d27b.png

其中 ddc6ec00-b915-eb11-8da9-e4434bdf6706.svg 对应STN中的仿射变换参数。STN直接在特征维度进行变换,且可以插入轻松任意两层卷积中。

  • DELF: DEep Local Features(深度学习提取特征点与描述子)

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

tensorflow/models/delfgithub.com4fc828afd22ea386c170f1a7c3c45ee7.png

139a8dd0437313fcdf2dabae0aa19853.png

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

下载1:动手学深度学习

在CVer公众号后台回复:动手学深度学习,即可下载547页《动手学深度学习》电子书和源码。该书是面向中文读者的能运行、可讨论的深度学习教科书,它将文字、公式、图像、代码和运行结果结合在一起。本书将全面介绍深度学习从模型构造到模型训练,以及它们在计算机视觉和自然语言处理中的应用。

e0d95c8ab3be15d61a79a61a388efaa9.png

下载2:CVPR /  ECCV 2020开源代码

在CVer公众号后台回复:CVPR2020,即可下载CVPR 2020代码开源的论文合集

在CVer公众号后台回复:ECCV2020,即可下载ECCV 2020代码开源的论文合集

重磅!CVer-论文写作与投稿交流群成立

扫码添加CVer助手,可申请加入CVer-论文写作与投稿 微信交流群,目前已满2400+人,旨在交流顶会(CVPR/ICCV/ECCV/NIPS/ICML/ICLR/AAAI等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI、中文核心等写作与投稿事宜。

同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如论文写作+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

eb2a3ff7194fa314a8d67c2dabf596d4.png

▲长按加微信群

935cab6fe54e8e658e071aed439c5097.png

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看16cbdb4d77f5140938f2cd11bad99864.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值