【多视图几何】TUM 课程 第4章 同名点匹配
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 。视频评论区可以找到课程所使用课件与练习题的下载地址。
课程第4章介绍了如何在两幅影像上匹配同名点,匹配同名点是计算影像相对姿态的第一步。用光流、特征点提取方法进行同名点匹配。
1. 从影像到几何
影像呈现的是色彩与亮度,但 MVG 使用匹配点或线进行三维重建,所以从影像的色彩信息中提取点或线是传统 MVG 的第一步。
为什么说是“传统 MVG ”呢?因为在以前计算资源匮乏的时代,只能通过稀疏的点与线进行三维重建。当今计算资源丰富,内存能够存储大量的信息,可以将影像的每一个像素存入内存参与计算,这种方式属于“直接法”,在课程的后半部分会讨论到。
从影像中提取同名点有存在两大挑战:1. 非刚体变化,影像中出现的非刚体在两张影像对应的两个时间点上一些特征点完全消失,无法匹配;2. 非朗博面,存在镜面反射,在不同角度观察空间位置上的同一个点存在着亮度相差特别大的问题。
在同名点匹配可以分为两种情形:
- 微小移动,意味着基线短,两张影像中同名特征点之间的距离短,容易通过小窗口找到,同名点的寻找方向也基本一致;
- 长基线,相机移动很大,左影像的特征点有可能在右影像的任何位置上。
对于短基线的情形,使用光流法(Optical Flow)进行特征点匹配,该方法是 Lucas 与 Kanade 于1981年提出的。
在两张影像上寻找同名点是在二维的影像平面上进行寻找,不涉及将特征点投影到三维空间进行寻找,因为这一步只是在一张影像上找到特征点,另一张影像上对应的点还没有找到,怎么投影嘛。。。
2. 微小移动建模
首先,对特征点的运动进行建模。
假设右影像相对左影像的位姿为 \(R, T\),于是对于左影像上一特征点(坐标为 \(x_1\))和右影像上该特征点对应的坐标 $ x_2 $ 之间的关系为
\[ \mathbf{x_2} = h(\mathbf{x_1}) = {1 \over \lambda_2(\mathbf{X})}( R \lambda_1 (\mathbf{X})\mathbf{x_1} + T ) \]
$ \mathbf{X} $ 是特征点的三维坐标,$ \lambda_1(\mathbf{X}) $ 是特征点在左影像上的景深,$ \lambda_2(\mathbf{X}) $ 是特征点在右影像上的景深。
对这个公式进行简化,用较为简单的形式对 \(x_1, x_2\) 的这种关系建模。
位移模型:
\[ h(\mathbf{x}) = \mathbf{x} + b \]
仿射变换模型:
\[ h(\mathbf{x}) = A\mathbf{x} + b \]
仿射变换模型也可以写成如下的形式
\[ h(\mathbf{x}) = \mathbf{x} + u(\mathbf{x}) \]
其中
\[ u(\mathbf{x}) = S(\mathbf{x})p = \begin{bmatrix} x & y & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & x & y & 1\end{bmatrix} {\begin{bmatrix} p_1 & p_2 & p_3 & p_4 & p_5 & p_6 \end{bmatrix}}^T \]
3. Lucas-Kanade 方法
Lucas-Kanade 方法建立在一个假设(assumption)之上,这个假设是“同一特征点在不同影像上保持亮度不变”。(当然在当下的语境下,应该是“色彩保持不变”,当时主要使用灰度影像嘛。)
该假设希望特征点对应的物体表示是朗博面,漫反射的成分远远大于镜面反射的成分,这样更容易达到在不同角度下拍摄亮度不变的条件。
在该假设的基础上建立数学模型。亮度保持假设的数学表达为:
\[ I(\mathbf{x}(t), t) = const. \quad \forall t \]
式子中 $ \mathbf{x}(t) $ 表示一在各影像上移动的点在 \(t\) 时刻对应的那张影像上的坐标,整个式子表示 \(I(\mathbf{x}(t), t)\) 取 \(t\) 时刻影像在 \(\mathbf{x}(t)\) 位置上的亮度值。在任意时刻 \(t\) 这个亮度值都应该是相同的。
既然是一个对时间 $ t $ 的常数函数,那么对时间 $ t $ 求导得到的导函数就应该恒为0了。
\[ {d \over dt}I(\mathbf{x}(t), t) = \nabla I^T ({d\mathbf{x} \over dt}) + {\partial I \over \partial t} = 0 \]
这个式子就是光流法的约束条件。但是这个式子没有办法解出 $ v = {d\mathbf{x} \over dt} $ ($ v $ 就可以被称作是“点 \(\mathbf{x}\) 的光流”),因为一个点的亮度值、梯度值并不足以确定一个点在图像中的位置。于是将一个点扩展到一个窗口,做出假设“距离较近的点在两张影像上的移动方向与大小一致”。于是在以 \(\mathbf{x}\) 为中心一个窗口 \(W(\mathbf{x})\) 中的任意一点 $ \mathbf{x'} $ 都满足上面的约束条件。
\[ \nabla I(\mathbf{x'}, t)^Tv + {\partial I \over \partial t}(\mathbf{x'}, t) = 0 \quad \forall \mathbf{x'} \in W(\mathbf{x}) \]
当然由于物体非朗博特性、相机移动、影像噪声等的存在上面这个式子不可能完全成立,所以尽可能让式子左边等于右边,将一个能量项优化到最小,目的就达到了。
Lucas 和 Kanade 在1981年提出了优化下面这个能量项,以找到最优的光流:
\[ E(v) = \int_{W(\mathbf{x})} {| \nabla I(\mathbf{x'}, t)^Tv + I_t(\mathbf{x'}, t) |}^2 d\mathbf{x'} \]
求导等于0,得到下面的式子
\[ { dE \over dv } = 2Mv + 2q = 0 \]
其中
\[ M = \int_{W(\mathbf{x})} \nabla I \nabla I^T d\mathbf{x'}, \quad q = \int_{W(\mathbf{x})} I_t \nabla I d\mathbf{x'}, \quad I_t = {\partial I \over \partial t} \]
\[ \Rightarrow v = -M^{-1}q, \quad det(M) \ne 0 \]
使用位移模型时能量项为
\[ E(v) = \int_{W(\mathbf{x})} {| \nabla I^T(\mathbf{x'})b + I_t(\mathbf{x'}) |}^2 d\mathbf{x'} \]
使用仿射模型时能量项为
\[ E(v) = \int_{W(\mathbf{x})} {| \nabla I^T(\mathbf{x'})S(\mathbf{x'})p + I_t(\mathbf{x'}) |}^2 d\mathbf{x'} \]
下面是 \(M\) 和 \(q\) 的详细公式:
\[ M(\mathbf{x}) = \int_{W(\mathbf{x})} \begin{bmatrix} I_x^2 & I_xI_y \\ I_xI_y & I_y^2 \end{bmatrix} d\mathbf{x'} \]
\[ q = \begin{bmatrix} \int_{W(\mathbf{x})} I_x I_t d\mathbf{x'} \\ \int_{W(\mathbf{x})} I_y I_t d\mathbf{x'} \end{bmatrix} \]
整个问题的求解需要 \(M\) 可逆,也就是说在这个窗口中梯度 \(I_x\) 不能为0,\(I_y\) 也不能为0。这是一个“与”的关系,两个都不能为0,若其中有一个为0, \(det(M) = 0\)。\(det(M)\) 为0对应着相机对着“白墙”或者“白墙边缘”的情况。
理想情况是理想情况,现实世界中充满了误差,所以 \(det(M)\) 不会完全为0,这个时候对 \(det(M)\) 的要求是不能小于一个比较小的值 \(\theta, \theta \gt 0\):
\[ det(M) \ge \theta \]
4. 特征点提取
上面计算光流的能量函数,还是有一点点简单。在实际问题中,真实情况是“两点之间像素距离越近光流越接近”,所以应该使用用权重对窗口中不同区域的点的代价进行赋值,实际实现是使用高斯核进行卷积。
\[ M(\mathbf{x}) \equiv G_{\sigma} \cdot \nabla I \nabla I = \int G_{\sigma}(\mathbf{x} - \mathbf{x'}) \begin{bmatrix} I_x^2 & I_xI_y \\ I_xI_y & I_y^2 \end{bmatrix}_{\mathbf{x'}} d\mathbf{x'} \]
这一节不是讨论光流问题,是讨论“特征点提取”。Harris 角点提取方法就是依据上面这个公式计算一个数值,如果该数值大于阈值表示该点很有可能是一角点。计算方式如下:
\[ C(\mathbf{x}) = det(M) - \kappa trace^2(M) \]
选择那些 $ C(\mathbf{x}) > \theta, \theta \gt 0 $ 的点作为角点提取出来。
6. 长基线匹配
长基线的匹配问题中,不同的特征点在在两张影像上的相对位置都不一样,不具有规律性,一般是直接在整个窗口中进行暴力搜索。长基线情况下也涉及到特征点观察角度、光照条件不同(户外随着时间推移,太阳高度角发生变化)给匹配带来难度。
使用归一化互相关系数(Normalized Cross Correlation)计算两张影像 patch 之间的相关系比较鲁棒,计算方法如下。
\[ NCC(h) = {\int_{W(\mathbf{x})} (I_1(\mathbf{x'}) - \bar I_1) (I_2(A\mathbf{x'} + d) - \bar I_2) d\mathbf{x'} \over \sqrt{\int_{W(\mathbf{x})}(I_1(\mathbf{x'}) - \bar I_1)^2d\mathbf{x'} \int_{W(\mathbf{x})} (I_2(A\mathbf{x'} + d) - \bar I_2)^2 d\mathbf{x'}}} \]
鲁棒性体现在:
- 在积分前减去了 patch 内分子的平均值,对光照的定值增强 $I \rightarrow I + \gamma $ 鲁棒;
- 除以了 patch 的标准差,对光照的比例增强 \(I \rightarrow \gamma I\) 鲁棒。
【多视图几何】TUM 课程 第4章 同名点匹配的更多相关文章
- 【多视图几何】TUM 课程 第6章 多视图重建
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第3章 透视投影
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第5章 双视图重建:线性方法
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第2章 刚体运动
课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...
- 【多视图几何】TUM 课程 第1章 数学基础:线性代数
在 YouTube 上找到了慕尼黑工业大学(Technische Universitaet München)计算机视觉组 Daniel Cremers 教授的 Multiple View Geomet ...
- javascript进阶课程--第三章--匿名函数和闭包
javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...
- C#入门到精通系列课程——第3章变量及运算符
◆本章内容 (1)变量是什么 (2)变量的声明及初始化 (3)常量 (4)运算符 (5)数据类型转换 (6)运算符优先级及结合性 (7)难点解答 ◆本章简述 很多人认为学习C#之前必须要学习C++,其 ...
- C#入门到精通系列课程——第2章编写C#程序
◆本章内容 (1)熟悉Visual Studio 2017开发环境 (2)编写第一个C#程序 (3)C#程序结构预览 (4)程序编写规范 (5)难点解答 ◆本章简述 要学习C#编程,必然要熟悉C#程序 ...
- C#入门到精通系列课程——第1章软件开发及C#简介
◆本章内容 (1)了解软件 (2)软件开发相关概念 (3)认识.NET Framework (4)C#语言 (5)Visual Studio 2017 ◆本章简述 软件在现代人们的日常生活中随处可见, ...
随机推荐
- [CF1110E]Magic Stones
题目大意:有一个长度为$n(n\leqslant10^5)$的数列$c$,问是否可以经过若干次变换变成数列$t$,一次变换为$c'_i=c_{i+1}+c_{i-1}-c_i$ 题解:思考一次变换的本 ...
- 菜鸡的考场emacs配置
(setq default-tab-width 4) (setq c-default-style "awk") (setq default-cursor-type 'bar) (e ...
- 一步步创建第一个Docker App —— 1. 背景介绍
原文:https://docs.docker.com/engine/getstarted-voting-app/#/docker-stacks-and-services 你将会学习什么 本文创建 ...
- 【转载】dfs序七个经典问题
作者:weeping 出处:www.cnblogs.com/weeping/ 原文链接 https://www.cnblogs.com/weeping/p/6847112.html 参考自:<数 ...
- UOJ #7 【NOI2014】 购票
题目链接:购票 这道题我调了好久啊……主要还是因为这种用\(CDQ\)分治来搞斜率优化的题已经很久没写过了……上一次要追溯到去年暑假去了…… 看下面这些东西之前你需要先自己推出斜率优化的式子…… 这道 ...
- 单点登录(十七)----cas4.2.x登录mongodb验证方式成功后返回更多信息更多属性到客户端
我们在之前已经完成了cas4.2.x登录使用mongodb验证方式登录成功了.也解决了登录名中使用中文乱码的问题. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方 ...
- MyBatis.4关联
关联.多对一关联查询 package org.mybatis.example.dao; import java.util.Date; //雇员类 public class Emp { private ...
- Docker 安装tensorflow
安装DOCKER 1. https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ nstall from a packag ...
- svn断开链接后,重新share提交代码报错
前言:svn怎样断开链接并清除干净请查看此地址-->android studio中断开SVN连接,并彻底清理项目中的.svn文件 1.每次把项目重新关联到新的svn地址上,我都抓狂一样的烦躁,因 ...
- Turn Off The Light HDU - 6307
题目大意 是有n个位置有灯,告诉你每个位置灯是开着的还是关着的,告诉你你的初始位置p,你可以往左或者右移动一步(在1到n的范围里移动), 并且在移动后必须按下开关(就是使当前打开的灯关上,当前未打开的 ...