单应性原理被广泛应用于图像配准,全景拼接,机器人定位SLAM,AR增强现实等领域。这篇文章从基础图像坐标知识系为起点,讲解图像变换与坐标系的关系,介绍单应性矩阵计算方法,并分析深度学习在单应性方向的进展。
本文为入门级文章,希望能够帮助读者快速了解相关内容。
目录
一 图像变换与平面坐标系的关系
二 平面坐标系与齐次坐标系
三 单应性变换
四 深度学习在单应性方向的进展
一 图像变换与平面坐标系的关系
- 旋转:
将图形围绕原点
写成矩阵乘法形式:
- 平移:
但是现在遇到困难了,平移无法写成和上面旋转一样的矩阵乘法形式。所以引入齐次坐标
其中
那么就可以把把旋转和平移统一写在一个矩阵乘法公式中,即刚体变换:
而旋转矩阵
- 仿射变换
其中
可以看到,相比刚体变换(旋转和平移),仿射变换除了改变目标位置,还改变目标的形状,但是会保持物体的“平直性”。
不同
- 投影变换(单应性变换)
简单说,投影变换彻底改变目标的形状。
总结一下:
- 刚体变换:平移+旋转,只改变物体位置,不改变物体形状
- 仿射变换:改变物体位置和形状,但是保持“平直性”
- 投影变换:彻底改变物体位置和形状
我们来看看完整投影变换矩阵各个参数的物理含义:
其中
而
至于
一般情况下都会通过归一化使得
二 平面坐标系与齐次坐标系
问题来了,齐次坐标到底是什么?
齐次坐标系
而
特别的当
三 单应性变换
- 单应性是什么?
此处不经证明的给出:同一个 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性,可以用 [投影变换] 表示 。
注意:单应性成立是有条件的!
简单说就是:
其中
- 那么这个
单应性矩阵如何求解呢?
更一般的,每一组匹配点
由平面坐标与齐次坐标对应关系
进一步变换为:
写成矩阵
也就是说一组匹配点
- 单应性矩阵8自由度
注意观察:单应性矩阵
即点
如果使
所以单应性矩阵
在求
OpenCV已经提供了相关API,代码和变换结果如下。
import
可以看到:
- 红框所在平面上内容基本对齐,但受到镜头畸变影响无法完全对齐;
- 平面外背景物体不符合单应性原理,偏离很大,完全无法对齐。
- 传统方法估计单应性矩阵
一般传统方法估计单应性变换矩阵,需要经过以下4个步骤:
- 提取每张图SIFT/SURF/FAST/ORB等特征点
- 提取每个特征点对应的描述子
- 通过匹配特征点描述子,找到两张图中匹配的特征点对(这里可能存在错误匹配)
- 使用RANSAC算法剔除错误匹配
- 求解方程组,计算Homograph单应性变换矩阵
示例代码如下:
#coding:utf-8
相关内容网上资料较多,这里不再重复造轮子。需要说明,一般情况计算出的匹配的特征点对
四 深度学习在单应性方向的进展
- HomographyNet(深度学习end2end估计单应性变换矩阵)
HomographyNet是发表在CVPR 2016的一种用深度学习计算单应性变换的网络,即输入两张图,直接输出单应性矩阵
在之前的分析中提到,只要有4组
相似的,只要有4组
其中
分析到这里,如果要计算
- Regression:网络直接输出
共8个数值
这样设置网络非常直观,使用L2损失训练,测试时直接输出8个float values,但是没有置信度confidence。即在使用网络时,无法知道当前输出单应性可靠程度。
2. Classification:网络输出
这时将网络输出每个
另外HomographyNet训练时数据生成方式也非常有特色。
- 首先在随机
位置获取正方形图像块Patch A
- 然后对正方形4个点进行随机扰动,同时获得4组
- 再通过4组
计算
- 最后将图像通过
变换,在变换后图像
位置获取正方形图像块Patch B
那么图像块A和图像块B作为输入,4组
可以看到,在无法提取足够特征点的弱纹理区域,HomographyNet相比传统方法确实有一定的优势:
- Spatial Transformer Networks(直接对CNN中的卷积特征进行变换)
其实早在2015年,就已经有对CNN中的特征进行变换的STN结构。
假设有特征层
其中
- DELF: DEep Local Features(深度学习提取特征点与描述子)
之前提到传统方法使用SIFT和Surf等特征点估计单应性。显然单应性最终估计准确度严重依赖于特征点和描述子性能。Google在ICCV 2017提出使用使用深度学习提取特征点。
tensorflow/models/delfgithub.com
考虑到篇幅,这里不再展开DELF,请有兴趣的读者自行了解相关内容。
相机数学模型点这里:
相机模型与视觉测距不完全指南zhuanlan.zhihu.com
对极几何点这里:
从对极几何恢复相机运动zhuanlan.zhihu.com
1606

被折叠的 条评论
为什么被折叠?



