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

重磅干货,第一时间送达

本文者:白裳

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

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

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

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

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

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

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

  • 旋转:

将图形围绕原点  逆时针方向旋转  角,用解析式表示为:


旋转

写成矩阵乘法形式:

  • 平移:


平移

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


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

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


而旋转矩阵  是正交矩阵(  )。

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


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

仿射变换(正方形-平行四边形)

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

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


  • 投影变换(单应性变换)


投影变换(正方形-任意四边形)

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

总结一下:

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

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

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

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

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


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

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


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


一般情况下都会通过归一化使得  (原因见下文)。

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

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

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


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


特别的当  时,对应无穷远:


三 单应性变换

  • 单应性是什么?

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

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

简单说就是:


其中  是Left view图片上的点,  是Right view图片上对应的点。

  • 那么这个  单应性矩阵如何求解呢?

更一般的,每一组匹配点  有


由平面坐标与齐次坐标对应关系  ,上式可以表示为:


进一步变换为:


写成矩阵  形式:


也就是说一组匹配点  可以获得2组方程。

  • 单应性矩阵8自由度

注意观察:单应性矩阵  与  其实完全一样(其中 ),例如:


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

如果使  ,那么有:


所以单应性矩阵  虽然有9个未知数,但只有8个自由度。

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

XIAOMI9拍摄,有镜头畸变

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

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

可以看到:

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

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

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

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

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

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

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

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

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

示例代码如下:

#coding:utf-8

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

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

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

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


在之前的分析中提到,只要有4组  匹配点即可计算  的唯一解。

相似的,只要有4组  也可以计算出  的唯一解:


其中  且  。


分析到这里,如果要计算  ,网络输出可以有以下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,进行训练


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


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

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


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


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

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

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

tensorflow/models/delfgithub.com


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

下载1:动手学深度学习

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

下载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等群。

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

▲长按加微信群

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

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

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

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文作者:白裳 https://zhuanlan.zhihu.com/p/74597564 本文已由原 ...

  2. 计算机视觉教程1-2:单应性矩阵估计

    目录 1 导论 2 基本直接线性变换(Basic DLT) 3 归一化直接线性变换(Normalized DLT) 4 鲁棒单应性估计(Robust Homography Estimation) 1 ...

  3. 两图像间的单应性矩阵估计

    两图像间的单应性矩阵估计 单应性矩阵的定义: 两图像间的单应性矩阵估计基于一个假设: 这两个图像拍摄的场景在一个平面上或者两图像是由相机发生纯旋转时采集的.当满足这个假设后,就可以根据两图像上提取的匹 ...

  4. Levenberg-Marquardt算法求解单应性矩阵

    A. Levenberg-Marquardt算法 待估计的模型参数 x=[x1,x2,⋯,xn]T\mathbf{x}=[x_1, x_2, \cdots,x_n]^Tx=[x1​,x2​,⋯,xn​ ...

  5. RANSAC算法的单应性矩阵讲解

    还可以参考:https://blog.csdn.net/lhanchao/article/details/52849446 我们已经得到了像素坐标系和世界坐标系下的坐标映射关系: 其中,u.v表示像素 ...

  6. akaze特征匹配怎么去掉不合适的点_单应性矩阵应用基于特征的图像拼接

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言 前面写了一篇关于单应性矩阵的相关文章,结尾说到基于特征的图像拼接跟对象检测中单应性矩阵应用场景.得到很多 ...

  7. 基于匹配点集对单应性矩阵进行估计

    基于匹配点集对单应性矩阵进行估计 2020/4/28 FesianXu 前言 在立体视觉中,对单应性矩阵进行估计是一个很重要的任务,我们在之前的博文[1,2,3]中的讨论中都或多或少地涉及到了单应性矩 ...

  8. 【RANSAC与单应性矩阵H求解】

    特征点匹配--使用基础矩阵.单应性矩阵的RANSAC算法去除误匹配点对 RANSAC算法的单应性矩阵讲解

  9. 《增强现实:原理、算法与应用》读书笔记(1)基础矩阵、本质矩阵与单应性矩阵

    <增强现实:原理.算法与应用>读书笔记(1) 入坑增强现实,学长让我先把这本书看懂,看了一小半,确实有很多对数学要求挺高的地方,所以打算写个读书笔记,分享一些体会. 第三章:实景的三维结构 ...

最新文章

  1. 直接操作游戏对象C#游戏开发
  2. nginx禁止未绑定域名访问返回444
  3. macOS 的头文件隐藏这么深
  4. 案例驱动python编程入门-python监听socket客户端连接(驱动串口屏幕)
  5. 简单了解SSL/TLS协议
  6. Linux下的第一个驱动程序
  7. mysql 基本配置_MySQL 基本配置
  8. 3G时代手机网站的特点和开发原则
  9. 交换机putty怎么调试_使用在300和500系列托管型交换机的一个控制台连接通过PuTTY访问CLI...
  10. 【通信仿真】基于matlab多域网络仿真【含Matlab源码 1794期】
  11. 操作系统原理,Windows线程调度,引发线程调度的事件,Windows线程优先级,Windows时间配额,Windows线程调度策略,Windows优先级提升事件
  12. vs2010 solidworks2015 c# add-in模板 二次开发
  13. 彻底解决Android 8.0启动服务问题
  14. 我们真的会去吃3D打印食品吗?
  15. 2023年云南中烟名单
  16. 29python腾讯位置大数据北京2019五一期间迁出数据
  17. Inline Hook 钩子编写技巧
  18. linux三剑客awk、sed、grep与cut的总结
  19. windows常用 API函数
  20. 华通-小天 IDC

热门文章

  1. 解开 Windows 下的临界区中的代码死锁
  2. 你真的适合做前端吗?自学入行的那些坑
  3. 上线当天程序员锁死服务器,致公司破产解散
  4. Science发布基因组比对革新技术:泛基因组学映射工具Giraffe
  5. 提高篇 第五部分 动态规划 第2章 树型动态规划
  6. P5726 【深基4.习9】打分(python3实现)
  7. 计算机控制作业及答案,《微机系统与维护》课程作业及答案(二)
  8. MATLAB中如何让分度值小点,实验6 干涉的matlab模拟.doc
  9. ideajdk升级_JDK升级为13
  10. 向前欧拉公式例题_干货丨阅读理解答题万能公式,语文考试高分秘籍!