LM算法计算单应矩阵

slam

单应矩阵

单应矩阵的定义

什么是单应矩阵呢?其实简单来说,就是两个图像之间的变换矩阵。什么意思呢,可以考虑这样一个情形:

你有一个相机,拍摄一个建筑物,首先在某一个视角拍了一张,然后又走到另一个角度再拍一张,这样你就得到了对同一个场景进行拍摄的两张不同的图像,容易理解的是,既然是刻画同一个场景,那么这两图之间必然存在着一定的联系(映射),这个联系如果用一个矩阵来刻画,那么得到的这个矩阵,我们就把它叫做单应矩阵了(hemography),如果用一个公式来刻画,那么自然而然可以吧公式写成:

其中是齐次坐标,即说,u,v为图像坐标,是新的图像坐标下,对原来图像坐标下同一点的观测结果。值得注意的是,对于其次坐标,我们可以任意乘以一个常数,这个坐标的意义并不改变,或者可以不那么严格的写这样一个算式, 因此,对于映射来说,H矩阵让x释放出一个尺度上的不确定度,因此H矩阵的自由度等于8,或者说,计算H矩阵,只用计算出8个数,然后令最后一个数等于1就行了,或者也可以给出一个其他的约束,确定这个矩阵

单应矩阵的作用

那么单应矩阵有什么用呢?

最直接的应用当然是图像拼接了,可以理解的是,当你对一个大场景进行观测时,或者说你拍了很多照片,每个照片有重叠部分又有新的不分,假如我们选择其中某一个图作为基准,所有的图像都像基准图进行坐标变换,然后再把重叠部分叠再一起,那么多出来的图像信息也就自然而然地加到基准图上了。

其他的应用,包括图像增稳,透视纠正,视图合成等,它在图像领域是一个很好很强大的工具,大多数应用的第一步而且是最核心的一步都是计算这个矩阵,之后再进行其他处理,这个矩阵的算法很多,接下来就介绍一个超级强大,应用超级广泛的算法,即基于LM的迭代优化算法

单应矩阵的计算

基本原理

首先想要通过优化得到这个矩阵,自然而然需要建立一个基于优化的数学模型,我们从它的定义开始

把那个叉积方程整理之后有:

其中,

由于坐标是其次坐标(第三个坐标可以理解为尺度,但是同一个点不同尺度表达同一个点),这三个方程实际上是相容的,用两个方程就足以刻画所有的约束,即

简单记为

正如先前讲的,这个方程看似9个未知数,但其中有一个是用来控制比例的,可以通过它随意缩放,矩阵,因此实际上只有8个未知数,一个点有两个方向的约束,可以提供两个方程,所以理论上只需要4个点就能够算出一个H矩阵来,这样的解叫做最小配置解,但实际上你的到的图像上对应点的数一般总是多于8个的,而且可能存在各种各样的噪声,最小配置解总是不那么鲁棒的,比较好的策略是尽量多使用正确的匹配点,得到一个使得全局误差最小的H矩阵,比如基本DLT算法,即计算的最小特征值所对应的特征向量和A的零空间等价...

在这里,我们介绍的是一个强大的迭代优化算法,它总是在实际应用中用得更加广泛

LM算法

Sampson近似的Newton迭代

定义点满足等式,我们认为这个点受到h的约束,使得它根据某种规则定义的矩阵A有的结果,这种关系我们将他记为

现在我们约定一些符号:

:表达,之间的几何距离

:表示最优估计

: 表示二范数

记:,且我们希望最优解正好满足约束

那么可以得到:

记:,可得: ,

最后我们的问题简化成了:求在满足条件下,使得最小的向量,由此可以算出

那么现在算法是比较显然的

对于某一次迭代得到,然后求出对应的雅可比矩阵,之后算出新的增量,由此

Levenberg-Marquardt迭代

在Newton迭代的基础上,我们对它进行改进,将用代替,其中

之后我们需要判断得到的是否使得误差减小,如果变小,那么接受它,并且将除以10,否则将乘以10,重新解方程,直到误差减小为止

这个算法其实就这么简单,比Newton迭代多了几步,但实际上会减少一些迭代次数,效率更高,但是,实际上这个算法就直接这样套用去计算单应矩阵,这会是一件无比坑爹的事情,因为假设有n个匹配点,那么就会出现2n+9个参数,然而核心计算的时间复杂度是可怕的(解线性方程),而且这个核心计算会运行无比多次,这会直接导致你算到个矩阵算到明年。

但是你大可不必担心,接下来,隆重推出稀疏算法,这样将会无比愉快地得到一个时间复杂度为n的超高效算法,这个算法的优越性在大量实际应用中得到体现

稀疏LM求解2D单应

现在让我们忘掉那些该死的抽象的数学吧,重新从方程入手(实际上你可以发现,由于这个方程是线性的,所以sampson近似的误差其实和代数误差等价的,所以我们有理由回到最初的方程),由于这个问题的特殊化,可以得到一个十分简洁快速的算法

基本问题描述

给定两幅图中的对应点集,我们使用代数误差来进行优化计算,定义测量向量,在当前情况下,参数向量,其中是第一幅图的估计值,h是单应矩阵H的元素组成的向量,函数把映射到,对于每一个

在这种情况下,每个仅仅由和确定,因此必然会有

于是就能有一个很强大的形式摆在眼前

算法步骤

定义:

其中

那么方程可以化简为如下形式

之后,我们可以得到这样一系列的矩阵

其中代表协方差矩阵(如果给出了协方差矩阵,可以考虑马氏距离,这样得到的算法会更鲁棒,结果也会更好),代表需要估计的参数值,代表误差

最后,让我们来列一下算法详细流程:

已知   测量矢量 以及它的协方差矩阵 , 参数集合,测量集合 , 对任意的,

目标 求最小化的参数集合,其中

算法

1. 初始化常数(一般取0.001),参数集合

2. 计算微分矩阵以及 以及误差矢量

3. 计算中间值

,其中

,其中

, 其中

4. 下列方程计算

5. 由方程 计算每个

6. 通过向量更新,并计算新的误差

7. 判断误差是否减小,如果减小,那么接受更新的参数值,并把减小至之前的10分之1,继续迭代或终止;否则,拒绝参数更新,把扩大10倍,重新计算

linux vim编辑矩阵乘,LM算法计算单应矩阵相关推荐

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

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

  2. 透视变换矩阵(单应矩阵)计算:findHomography 与 getPerspectiveTransform

    两者联系:     都用于计算单应矩阵,即解一个线性方程组.由于单应矩阵有8个未知数(3*3,其中第9个数为1),所以至少需要4个点(每个点-x,y,提供2个约束方程). 两者区别:     1.计算 ...

  3. 单应矩阵(Homography)基本概念和代码测试

    简 介: 应用棋盘格图片或者相机图片中与标准棋盘格之间的单应矩阵.其中应用到opencv中的findChessboardCorners, findHomographys等函数. 这位利用单应矩阵进行下 ...

  4. 多视图几何总结——单应矩阵和基础矩阵的兼容关系

    多视图几何总结--单应矩阵和基础矩阵的兼容关系 多视图几何总结--单应矩阵和基础矩阵的兼容关系 (1)单应矩阵和基础矩阵的兼容性 (2)基础矩阵 -> 单应矩阵 (3)单应矩阵 -> 基础 ...

  5. 通过SVD求解单应矩阵

    我们现在知道原则上4对匹配点对就可以唯一确定单应矩阵,但是在实际应用中我们无法保证两个视图严格满足使用条件(只有旋转变换:远景:平面场景),所以要使用拟合的方法求一个最优解.现在就来以SIFT算法源码 ...

  6. Opencv学习(3)——基础矩阵F、本质矩阵E、单应矩阵H 函数解析

    官网:https://docs.opencv.org/3.4.0/d9/d0c/group__calib3d.html#ga4abc2ece9fab9398f2e560d53c8c9780 基础矩阵F ...

  7. 单目初始化 单应矩阵 本质矩阵 恢复R t 三角变换求 3D点

    单目初始化 单应矩阵 本质矩阵 恢复R t 三角变换求 3D点 博文末尾支持二维码赞赏哦 ^_^ /* * This file is part of ORB-SLAM2 * * 单目相机初始化 * 用 ...

  8. 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程

    多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 1. 说明--其实求解过程大同小异 2. 单应矩阵求解过程 2.1 基于代数误差的线 ...

  9. 什么是单应矩阵和本质矩阵

    知乎上面的大牛还是很多,直接搜Homography或者单应矩阵就能得到很多大神的回答,可能回答中的一句话或者一个链接就够自己学习很久. 其实在之前研究双目视觉的时候就接触了对极几何,通过视觉就可以得到 ...

最新文章

  1. 二极管ss14测量_各种常用二极管的检测方法
  2. 【Auto.js】为任何指定QQ好友点赞
  3. 中国航天将与人工智能技术携手 未来可期
  4. java lambda 多个参数_Java Lambda行为参数化
  5. C++ STL简介(转)
  6. 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
  7. C语言实现支持增删查改的通讯录
  8. LAMP的部署(一)
  9. CCNA红头发视频教程全集---91lab
  10. hadoop 完全分布式模式的安装和配置
  11. Spring 事务模型
  12. 小程序服务器mp4文件,如何添加小程序视频链接及获取MP4格式视频
  13. Latex 制作表格
  14. bootstrap框架中的分割线
  15. 记:疯狂的程序员 (连续n天写n个代码)
  16. Linux下7z文件解压
  17. Matlab程序——3d玫瑰
  18. 计算机缺少网络连接,电脑提示找不到宽带连接的原因及解决方法
  19. 遇到APP抓不到包或者提示网络存在风险
  20. jQuery选择器代码详解(一)——Sizzle方法

热门文章

  1. [Swift]下载保存视频
  2. 音乐版权之争,区块链能做些什么?
  3. 积分兑换商城系统运营手册
  4. 【JZOJ A组】昆特牌
  5. 2020-10-12:在做分布式集群时候一般会产生什么问题?
  6. SAP发出商品的系统配置
  7. html 在td中加入input,如何将输入标签插入到td标签中?
  8. 囚徒困境,经济心理学问题之“KMRW”声誉模型
  9. 在 Fedora Core 5 上体验 Aiglx 和 Xgl Compiz(转)
  10. 阿里云ecs云服务器安装wdcp控制面板教程(推荐CentOS6.5)