![c0d6c78b5520a364e35dd8ddd8378c1d.png](https://i-blog.csdnimg.cn/blog_migrate/e77d98976f1925c7d3f277ce8c6450c8.png)
单应性原理被广泛应用于图像配准,全景拼接,机器人定位SLAM,AR增强现实等领域。这篇文章从基础图像坐标知识系为起点,讲解图像变换与坐标系的关系,介绍单应性矩阵计算方法,并分析深度学习在单应性方向的进展。
本文为入门级文章,希望能够帮助读者快速了解相关内容。
目录
一 图像变换与平面坐标系的关系
二 平面坐标系与齐次坐标系
三 单应性变换
四 深度学习在单应性方向的进展
![c30ef5b09ffdcac1ba29de576cd7f186.png](https://i-blog.csdnimg.cn/blog_migrate/0cf6bba93ddbe85a45ec4c2bfac86254.jpeg)
一 图像变换与平面坐标系的关系
- 旋转:
将图形围绕原点
![d6a87749e144f1848b3f51188d14c36b.png](https://i-blog.csdnimg.cn/blog_migrate/0801e96a4397a0b185c4ac01fe88a7c8.png)
![f36804223be800fde033b557ab6ae275.png](https://i-blog.csdnimg.cn/blog_migrate/f0b9a978c974c7feb11f3a6a52ab19fa.jpeg)
写成矩阵乘法形式:
![f1643bafd360edfd9f679e22d5f312db.png](https://i-blog.csdnimg.cn/blog_migrate/e6a41ad01fd2ddee978d5c73aa8ad053.png)
- 平移:
![49a9a166f148b3a4d581d0b22ab25a6d.png](https://i-blog.csdnimg.cn/blog_migrate/d4a3e8fa995011fd57927b5bdfb82d37.png)
![cd53530c3a612b8df90695510b380282.png](https://i-blog.csdnimg.cn/blog_migrate/26d85ca312d01537ebfa6fbae8789ca1.jpeg)
![a68ccefd4c1293aa321335b70fcd3082.png](https://i-blog.csdnimg.cn/blog_migrate/1cab9a6785122e519610efeef396ef86.png)
但是现在遇到困难了,平移无法写成和上面旋转一样的矩阵乘法形式。所以引入齐次坐标
![736bddd6b5e4c494a9bf681825da3145.png](https://i-blog.csdnimg.cn/blog_migrate/b126271e0425c2bd0e132b45eee4ac91.png)
其中
那么就可以把把旋转和平移统一写在一个矩阵乘法公式中,即刚体变换:
![4f2250336b2071c47b41f6c6d9aac92a.png](https://i-blog.csdnimg.cn/blog_migrate/ec9fa6d39c876e46575cd7982553a513.png)
而旋转矩阵
![34e98ce32dd3de7f986c1c29321357de.png](https://i-blog.csdnimg.cn/blog_migrate/f7dd26826e6cb7a7616505ebdede5352.jpeg)
- 仿射变换
![3d1c36a0183a8344a3f1f847fb49914b.png](https://i-blog.csdnimg.cn/blog_migrate/f34c05740ced75d964e925dcbdfb5b53.png)
其中
![96c84901cab9da4afb2bfa57cfae1c17.png](https://i-blog.csdnimg.cn/blog_migrate/8261c4a61586c11d381b06ea61898adf.jpeg)
可以看到,相比刚体变换(旋转和平移),仿射变换除了改变目标位置,还改变目标的形状,但是会保持物体的“平直性”。
不同
![9f20d91f429c6e53a7469f7d83e4ee78.png](https://i-blog.csdnimg.cn/blog_migrate/d8076aa38859f61f372b4dc942aab8c8.jpeg)
- 投影变换(单应性变换)
![583d42dee6d77a15aaab7a1e7e7abf7e.png](https://i-blog.csdnimg.cn/blog_migrate/0d02b177d3c235e34b498bbeb39b9c0c.png)
![86e89b7f6c576fa554126bb4fffc3c7a.png](https://i-blog.csdnimg.cn/blog_migrate/5bf71ee7607f17afda269227b533644c.jpeg)
简单说,投影变换彻底改变目标的形状。
总结一下:
- 刚体变换:平移+旋转,只改变物体位置,不改变物体形状
- 仿射变换:改变物体位置和形状,但是保持“平直性”
- 投影变换:彻底改变物体位置和形状
![fde1186effb5930acfdd7d13f68c463c.png](https://i-blog.csdnimg.cn/blog_migrate/f1712ff9a812832d9ab36ea567fb5020.jpeg)
我们来看看完整投影变换矩阵各个参数的物理含义:
![7195a13e60219ebfff411af2632198f1.png](https://i-blog.csdnimg.cn/blog_migrate/a204ee373f870f66669d5ee33b89912a.png)
其中
而
![7fe666b401206e8f8d81ca5185136217.png](https://i-blog.csdnimg.cn/blog_migrate/7afbdea34f827180443aae547b7f5976.png)
至于
![83334a1f1f643c93eb6dab6cd344e062.png](https://i-blog.csdnimg.cn/blog_migrate/252fbfe541fb0babc5675eca18ee4549.png)
一般情况下都会通过归一化使得
二 平面坐标系与齐次坐标系
问题来了,齐次坐标到底是什么?
齐次坐标系
![ae9fd0a1c7b3723c5e3917cad3afdb25.png](https://i-blog.csdnimg.cn/blog_migrate/587145e42c4aa5a3811398f50575289b.png)
而
![75e79005ccec2581bc9d3c3b0b14f8ba.png](https://i-blog.csdnimg.cn/blog_migrate/7aaf7f2fca94d13bbea64cb728d9152e.png)
特别的当
![4699f88c4cd0c9b1b1fa2649a051bf0f.png](https://i-blog.csdnimg.cn/blog_migrate/b5907ae6576e54a28d963f9150f583c6.png)
三 单应性变换
- 单应性是什么?
此处不经证明的给出:同一个 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性,可以用 [投影变换] 表示 。
注意:单应性成立是有条件的!
![b36861ee1d893846899d9445c125c53c.png](https://i-blog.csdnimg.cn/blog_migrate/719bf63f032515d56d45c7a067b11275.jpeg)
简单说就是:
![09d8724fc19c8dbc2deb353176ebc499.png](https://i-blog.csdnimg.cn/blog_migrate/bfd9c51fc51f61d2056a415e835206e3.png)
其中
- 那么这个
单应性矩阵如何求解呢?
更一般的,每一组匹配点
![6b6102354fd6313c25ec528d50261394.png](https://i-blog.csdnimg.cn/blog_migrate/04c59f9a7abd06e8156996b7fd52bf46.png)
由平面坐标与齐次坐标对应关系
![737db063f5abe590d9d8ee86c75210fb.png](https://i-blog.csdnimg.cn/blog_migrate/0aa0074f4ec340e6f94a058ff66f00f8.png)
进一步变换为:
![09d1501ff2317d0a0f4cd49623ab5e8e.png](https://i-blog.csdnimg.cn/blog_migrate/37a25ad49e45d617c9d87524ac438f2f.png)
写成矩阵
![370d8127886068da1e5f70595f9d0dad.png](https://i-blog.csdnimg.cn/blog_migrate/052a6834651cd1af64ccb5530e3fa5b1.png)
也就是说一组匹配点
- 单应性矩阵8自由度
注意观察:单应性矩阵
![328208c47329b3b230251fc676707638.png](https://i-blog.csdnimg.cn/blog_migrate/da064b844d653b660a9c2b6c05f42a5c.png)
即点
如果使
![b748562e0a05253b107612f4efee7810.png](https://i-blog.csdnimg.cn/blog_migrate/d665f53084dd66027781f0f358f1b629.png)
所以单应性矩阵
在求
![dfdcd934dcfe24a6f98cf34962166b5c.png](https://i-blog.csdnimg.cn/blog_migrate/16ab681c7f89315fe5f31fd602a21477.jpeg)
OpenCV已经提供了相关API,代码和变换结果如下。
import
![855917c820d3e212007b4c40e6401c6c.gif](https://i-blog.csdnimg.cn/blog_migrate/ef5c87c410a815c91150df27f4ee5b15.gif)
可以看到:
- 红框所在平面上内容基本对齐,但受到镜头畸变影响无法完全对齐;
- 平面外背景物体不符合单应性原理,偏离很大,完全无法对齐。
- 传统方法估计单应性矩阵
一般传统方法估计单应性变换矩阵,需要经过以下4个步骤:
- 提取每张图SIFT/SURF/FAST/ORB等特征点
- 提取每个特征点对应的描述子
- 通过匹配特征点描述子,找到两张图中匹配的特征点对(这里可能存在错误匹配)
- 使用RANSAC算法剔除错误匹配
- 求解方程组,计算Homograph单应性变换矩阵
示例代码如下:
#coding:utf-8
![290ce8a5695ee05188c8f3d75f63cb0e.png](https://i-blog.csdnimg.cn/blog_migrate/7fd4717c4d7684e5d7fcb51a57ac2633.jpeg)
相关内容网上资料较多,这里不再重复造轮子。需要说明,一般情况计算出的匹配的特征点对
四 深度学习在单应性方向的进展
- HomographyNet(深度学习end2end估计单应性变换矩阵)
HomographyNet是发表在CVPR 2016的一种用深度学习计算单应性变换的网络,即输入两张图,直接输出单应性矩阵
![7c517e9ce3007d8378fedbbad346d3f3.png](https://i-blog.csdnimg.cn/blog_migrate/cfdd6da397543c4b8f3c96d54495e721.jpeg)
在之前的分析中提到,只要有4组
相似的,只要有4组
![403635295860384f71746793afd08793.png](https://i-blog.csdnimg.cn/blog_migrate/3bec431690e3050a50b42572669a1dd1.png)
其中
![dfa2019ea9e89b91b7974f806f5f267a.png](https://i-blog.csdnimg.cn/blog_migrate/006e596e493cca4e2ebb3c2e379ed902.jpeg)
分析到这里,如果要计算
- Regression:网络直接输出
共8个数值
这样设置网络非常直观,使用L2损失训练,测试时直接输出8个float values,但是没有置信度confidence。即在使用网络时,无法知道当前输出单应性可靠程度。
2. Classification:网络输出
这时将网络输出每个
另外HomographyNet训练时数据生成方式也非常有特色。
- 首先在随机
位置获取正方形图像块Patch A
- 然后对正方形4个点进行随机扰动,同时获得4组
- 再通过4组
计算
- 最后将图像通过
变换,在变换后图像
位置获取正方形图像块Patch B
那么图像块A和图像块B作为输入,4组
![5e5249e7dfe89a2d3db3841191cd2efb.png](https://i-blog.csdnimg.cn/blog_migrate/f4d9ed307cdf3e0981dad2c025299e2a.jpeg)
可以看到,在无法提取足够特征点的弱纹理区域,HomographyNet相比传统方法确实有一定的优势:
![2f81d3a26316b93bcf01bcb881b2300b.png](https://i-blog.csdnimg.cn/blog_migrate/1bb12b001b37c39b0ceb5486455e386f.png)
- Spatial Transformer Networks(直接对CNN中的卷积特征进行变换)
其实早在2015年,就已经有对CNN中的特征进行变换的STN结构。
![091d8861c0aed3a818b6efc3a741727e.png](https://i-blog.csdnimg.cn/blog_migrate/2f67ff1dc5cdeafea049ec480bfafffb.jpeg)
假设有特征层
![cb849faccccf0a4d1d9c49125655b740.png](https://i-blog.csdnimg.cn/blog_migrate/90ab1d32d51faabf392ddd9713ca32b1.png)
其中
- DELF: DEep Local Features(深度学习提取特征点与描述子)
之前提到传统方法使用SIFT和Surf等特征点估计单应性。显然单应性最终估计准确度严重依赖于特征点和描述子性能。Google在ICCV 2017提出使用使用深度学习提取特征点。
tensorflow/models/delfgithub.com![ae2848e3e23b3d59038fd39c2aade9e6.png](https://i-blog.csdnimg.cn/blog_migrate/783eaa1b3203d6d0896c17c198741404.jpeg)
![9e62ce8425652c4ca739b7a09f0ec0b3.png](https://i-blog.csdnimg.cn/blog_migrate/b9bb633d4f7346f148d48c7c424f1cb6.jpeg)
考虑到篇幅,这里不再展开DELF,请有兴趣的读者自行了解相关内容。
相机数学模型点这里:
相机模型与视觉测距不完全指南zhuanlan.zhihu.com![f2213b9014a2447d895689afe2852fbe.png](https://i-blog.csdnimg.cn/blog_migrate/748a0df8de734741817e9ef63fa25c40.jpeg)
对极几何点这里:
从对极几何恢复相机运动zhuanlan.zhihu.com![8fedbb7f2e16def8693b3291a361faea.png](https://i-blog.csdnimg.cn/blog_migrate/0762382d4ff0353f5e94658c44b36a11.png)