博客园排版系统真的比较挫,可以访问我的github.io阅读

关于Unit的概念

在pmvs的源代码中,有一个函数是getUnit ,其函数如下(在PMVS2的windows版本代码,optim.cc文件,1184行):

  1. float Coptim::getUnit(const int index, const Vec4f& coord) const {
  2. const float fz = norm(coord - m_fm.m_pss.m_photos[index].m_center);
  3. const float ftmp = m_ipscales[index];
  4. if (ftmp == 0.0)
  5. return 1.0;
  6. return 2.0 * fz * (0x0001 << m_fm.m_level) / ftmp;
  7. }

其中index是图像编号,coord是三维射影空间下的坐标。

这个函数在pmvs代码中几乎所有的和空间几何计算相关的函数中均被调用,最开始看代码时我并没有特别注意,但是随着代码阅读的深入,发现如果不将该函数读懂,就完全无法理解pmvs中所有的几何计算函数究竟是在做什么,于是今天花时间特意钻研了下,把该函数的含义表达清楚。

先说结论:该函数是计算将图片上的一个像素反投影到空间的一个指定的面片(patch)上得到的正方形的大小(以世界坐标系中的距离为量度),这个面片满足如下条件——面片的中心位于coord, 面片的法线与相片的法线平行但方向相反(也就是论文中初始化patch时的法线计算方法)。

这个结论看起来非常复杂,简单说就是如果我在空间的某个坐标处想要画一个正方形,使得该正方形投影到对应的与该正方形平行的相片上的大小恰好是1×1像素大小,那么这个正方形的边长在世界坐标系中的表达究竟是多少。这个函数就是来求解这个边长的。

这样的话这个函数作用其实就相当大了,他直接沟通了像素坐标和空间坐标的比例关系,可以粗略的比较相片对于场景的缩放,简化很多投影和反投影计算。而这个函数用到的计算方法其实也非常简单。就是简单的相似三角形关系,具体解释如下

小孔成像相机的几何关系如下图所示(摘自《 Multiple View Geometry in Computer Vision 》)

从该成像原理上我们可以看出,空间中一个长度为\(D\) 的物体投影到图像上长度\(l\)满足如下关系:

\[\frac{D}{l} = \frac{Z_0}{f}
\]

其中\(f\) 为焦距,\(Z_0\) 为物体到摄影中心的距离。

由上式可以得到:

\[D = \frac{l}{f}Z_0
\]

这样我们已知\(l\) 为1个像素长度,\(Z_0\) 可以直接由coord到相片的摄影中心直接计算得到。那么只要我们知道以像素为单位的\(f\)的数值,就可以直接得到\(D\)。幸运的是,根据一般CCD相机内参数矩阵中各变量的定义:

\[K=\begin{bmatrix}
a_x & s & x_0 \\
0 & a_y & y_0 \\
0 & 0 & 1
\end{bmatrix}
\]

其中\(a_x\)和 \(a_y\)分别是相机在x和y方向上的焦距,且以像素为量纲。另外一般情况下,CCD相机在x和y方向上的比例因此近似相等,即\(a_x \approx a_y\),这样我们可以用下式来近似计算\(f\)

\[f = \frac{a_x + a_y}{2}
\]

综上可得:

\[D=\frac{2}{a_x + a_y} Z_0
\]

这就是pmvs中getUnit的计算方法, 特别解释下,代码中m_ipscales[index]就是提前计算好的\(a_x+a_y\)的数值,而(0x0001 << m_fm.m_level)则是一个比例因子,可以让程序将图像缩放到一半或者四分之一大小进行计算。

PMVS论文随笔(1)的更多相关文章

  1. 多目标跟踪(MOT)论文随笔-POI: Multiple Object Tracking with High Performance Detection and Appearance Feature

    网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是tracking by detection 方法进行多目标跟踪的文章,最大的特点是使用 ...

  2. 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC (Deep SORT)

    网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是tracking by detection 方法进行多目标跟踪的文章,在SORT的基础 ...

  3. 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)

    网上已有很多关于MOT的文章,此系列仅为个人阅读随笔,便于初学者的共同成长.若希望详细了解,建议阅读原文. 本文是使用 tracking by detection 方法进行多目标跟踪的文章,是后续de ...

  4. 基于ASP.NET的高校辅导员工作管理系统的设计与实现--论文随笔(四)

    一.基本信息 标题:基于ASP.NET的高校辅导员工作管理系统的设计与实现 时间:2017 出版源:南通理工学院 关键词:ASP.NET; SQL Server; 高校; 管理系统; 辅导员; 二.研 ...

  5. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)

    100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...

  6. 随笔之Android平台上的进程调度探讨

    http://blog.csdn.net/innost/article/details/6940136 随笔之Android平台上的进程调度探讨 一由来 最近在翻阅MediaProvider的时候,突 ...

  7. RDMA调研报告&一点随笔

    计算所科研实践随笔 被淹没在论文海里的两个星期. 早上7:10分起床,草草洗漱,7:30出发,开始漫长的1小时通勤.从地铁站的安检口起,队便排的极长,让人看得头皮发麻.下到了轨道旁稍好,但每趟呼啸而来 ...

  8. 思科恶意加密TLS流检测论文记录——由于样本不均衡,其实做得并不好,神马99.9的准确率都是浮云啊,之所以思科使用DNS和http一个重要假设是DGA和HTTP C&C(正常http会有图片等)。一开始思科使用的逻辑回归,后面17年文章是随机森林。

    论文记录:Identifying Encrypted Malware Traffic with Contextual Flow Data from:https://songcoming.github. ...

  9. Towards Accurate Multi-person Pose Estimation in the Wild 论文阅读

    论文概况 论文名:Towards Accurate Multi-person Pose Estimation in the Wild 作者(第一作者)及单位:George Papandreou, 谷歌 ...

随机推荐

  1. 记录CentOS7.X版本下安装MySQL5.7数据库

    记录CentOS7.X版本下安装MySQL5.7数据库  设置rpm下载目录在/opt目录下新建一个目录存放mysql cd /opt sudo mkdir mysql12  下载MySQL的源 wg ...

  2. 剑指offer中经典的算法题之从头到尾打印链表

    话不多说上代码: 我自己的算法是: /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int ...

  3. Robot Framework搭建

    需要安装的内容如下: 1. Python2.7.13(听说python3对RF支持的不是很好,所以我下的Python2) 2. wxPython 2.8.12.1(只能这个版本) 3. robotfr ...

  4. Trees on the level UVA - 122 (二叉树的层次遍历)

    题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...

  5. jade 入门

    推荐网站: jade官网 html在线转换为jade 参考文章1 参考文章2     node的模板常用的有两个,一个是ejs,另外一个就是jade,相对来说,ejs更容易理解,像原生的html,很多 ...

  6. Clouder Manager安装时出现please remove the following file: /etc/cloudera-scm-server/db.properties问题解决(图文详解)

    问题详情 bigdata@ubuntucmbigdata1:/opt/softwares/cm-$ sudo ./cloudera-manager-installer.bin This install ...

  7. go语言初始化内部结构体3中方式

    package main import ( "fmt" ) type User struct { Id int Name string Age int } type Manger ...

  8. 自定义Qt组件-通讯模块(P1)

    通讯模块Communicator 通讯模块是整个项目设计中位于最底层的模块,用于处理与串口或网络等设备的通讯,所有设备的通讯通过CommManager类完成,上层软件设计时需要根据comm模块(主要是 ...

  9. 云计算&大数据相关知识

    1.极客学院云计算&大数据总链接:http://wiki.jikexueyuan.com/list/cloud/ 一.NSQ相关参考资料: 1.极客学院NSQ指南:http://wiki.ji ...

  10. 第一次尝试用Open Live Writer写日志

    注册博客园很久了,一直没怎么用,今天登陆了一下,看到这个写日志工具,看着不错,试一下