简谈毕业设计实现思路—-1

   我毕设的题目是关于摄像机参数的估计,也就是摄像机标定,属于计算机视觉中三维重建这一块的一个步骤。之前对此完全是一无所知,且略感神秘莫测,心想2维图像岂能重建出三维信息?!诡异~~
   开学以来,断断续续的看了点资料,也开了几次毕设的会,于是乎有了些似是而非的理解,也有了些初步的想法。话说今天早上再得LZ老师一番悉心指点,可谓是醍醐灌顶,豁然开朗~~对于利用绝对2次曲线来计算内参中的焦距的晦涩原理也终于理解的比较清楚了,加上之前已经知道了外参的计算方法,于是乎我的论文的思路也基本上清晰起来了。这里简单的记录一下,以便以后查阅。

   OK,Let’s begin

   在此之前,先解释一下三维重建的流程。我就两视的三维重建系统来简单说明一下。

   首先引入一个两视三维重建系统的实物图和原理图,如下所示。

3d-recon
   该系统中,两个摄像机同时拍摄实际场景中的物体,因此得到了左边的像平面和右边的像平面(实际上摄像机的成像平面位于光心之后,这里为了便于讨论,将其对称的搬到光心之前),左像平面和右像平面上都存在物体的像。

   首先根据特征点提取算法,把左像和右像中的特征点提取出来得到两个特征点集,这里讨论的特征点一般都是角点(角点是边缘的交点)。此两个特征点集U,U’ 中的点必然有某些同时对应物体上的某个点,特征点配准算法的作用就是在找到这样的点对(u1,u’1),它们对应于物体上的同一个点X。
   其次,根据找出的若干匹配点,由外极几何可知,他们满足关系式:
                                        clip_image002[5]
其中F被称为基础矩阵,是一个秩为2的3×3矩阵。此时通过所谓的八点算法,利用八个匹配点对就可以计算出F中的每个元素。此F中蕴含了摄像机的内部参数和外部参数,我的工作就是通过F得到他们。
   最后,根据计算出的外部参数和内部参数,很容易得到摄像机矩阵P,P’。根据PX=u,P’X=u’,则可以很容易的计算出物体的三维坐标X。至此,物体的3维坐标恢复完成,可以得到物体的网格形状。随后再进行纹理重建之类的运算。

   OK,三维重建系统大概就是这么回事,现在来考虑我做的摄像机内部参数和外部参数估计。由于上面已经提到基础矩阵F可以很容易的计算得到,那么现在的问题就是如何从基础矩阵推导出内部参数和外部参数。
   首先解释了什么是外部参数和内部参数。
   由于两台摄像机各自具备一个三维正交坐标系,如果将其中一个坐标系作为基准,则另一个坐标系与基准坐标系间的差异称为该摄像机的外部参数。可以通过一个旋转矩阵和一个平移向量来表示这种差异,如下所示:

                                       clip_image002[7]
   所谓内部参数包括如下几种因素:
      1.焦距:摄像机镜头(透镜)光心到成像平面的距离
      2.成像平面倾斜角:成像平面的竖直边界与水平边界间夹角有时并不是90度,如果此夹角不是90度,则物体所成的像在形状上会有改变。
      3.图像放缩因子:物体在成像平面上的像在水平、竖直方向上呈现放缩变换,放缩的比例即为放缩因子。
      4.成像平面中心点位置:透镜光心在成像平面上的投影点位置。
   可以通过如下内参矩阵来表示:
                                       clip_image002[9]
   那么,摄像机矩阵,就可以用内参阵和外参阵的乘积来表示:
                                       clip_image002[11]
   了解了外参和内参后,就来讨论如何得出他们,这正是我毕业论文的重点所在。考虑到详细的阐述需要花费大量的篇幅,所以这里先写一个思路,更为具体的东西写在毕业论文中,等完成后再来这里写一下。
   首先,说明一个前提。那就是根据匹配点的配准关系,只能估计出内参中的fx和fy,其他的无法抽取出来。所以我们可以合理的假设s,ty,tx都为零(也就是假设成像平面竖直和水平边界成90度,且成像平面中心点位于图像坐标原点),那么内参阵就可以写成对角矩阵diag(fx,fy,1)这样的形式。
   好了,下面说思路。
   简单的说,先通过引入绝对2次曲线(复空间中位于无穷远处的曲线,是绝对2次曲面与无穷远平面的交线)来去除平移和旋转对成像的影响,只保留下内参的影响。然后根据Richard I. Hartley的Extraction of focal lengths from fundamental Matrix这篇文章中提到的方法,计算出fx,fy,即简化后的内参阵K。然后由基础矩阵和本质矩阵间的关系:

                                      clip_image002[13]
可以计算出本质矩阵E,本质矩阵E中就只蕴含了外部参数的信息。然后又根据Richard I. Hartley的Estimation fo Relative Camera Postions for Uncalibrated Cameras这篇文章前半部分提到的方法,可以将E拆分为:

                                      clip_image002[15]
这样可以求出R和T了。注意,
                                      clip_image002[19]
是一个斜对称矩阵,它等价于和T作外积运算。
   至此,简化的摄像机内部参数fx,fy,外部参数R,T估计完毕!

 

   PS:刚接触三维重建这一块不久,属于入门级别,因此上文只是我的一个大致思路,还不是很完善。希望高手指正,嘿嘿~~~

Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-No Derivative Works 2.5 China Mainland License.
标签:, ,
此条目发表在 学无止境 分类目录,贴了 , , 标签。将固定链接加入收藏夹。

简谈毕业设计实现思路—-1》有 102 条评论

  1. uiu 说:

    虽然我是不知所云
    但是关注ing
    :grin:

    回复

    foelin reply on 四月 13th, 2008:

    :lol:
    对了,你的uloveit怎么评论个都要注册哦~~~

    回复

    uiu reply on 四月 14th, 2008:

    嗯~~~是啊~~ :wink:

    回复

    foelin reply on 四月 15th, 2008:

    貌似我注册不上,嘿嘿,javascript代码是不是有问题哦~~ :roll:

    回复

  2. 3Dman 说:

    有点不解,请教一下, Extraction of focal lengths from fundamental Matrix 里面说是要知道了光心的位置后才能假设内参为简化版的内参. 在不知道光心位置及是否有skew情况下,用你上面的简化版估计内参进而求外参的方法是否准确呢?

    回复

    foelin reply on 四月 11th, 2010:

    不准确~那篇文章只是提出了一种简化的计算方案,实际计算结果鲁棒性不高。
    可以用别的方法来算内参,例如基于对偶绝对二次曲面的方法等。

    回复

    3Dman reply on 四月 12th, 2010:

    终于解惑了 谢谢 请问你可否推荐一种现在比较成熟或稳定的由基本矩阵估计出内参的方法 Krappa跟你说的基于对偶绝对二次曲面的方法孰优孰劣呢
    刚开始读论文不久 对大局把握不好 恳请指教

    回复

    foelin reply on 四月 12th, 2010:

    纠正一下,由基本矩阵是无法估计出内参的。基本矩阵只能得到射影重建,如果知道了内参,就能欧氏重建了。
    Kruppa方程比基于对偶绝对二次曲面的方法的约束条件 要弱一点,没有约束曲面是在无穷远平面上,这都是自标定的方法,效果不如传统标定,例如张正友的平面标定。

    回复

    3Dman reply on 四月 12th, 2010:

    你好,我需要实现的是自标定,所以用不了张正友的算法.

    刚看了Hartley 的”Kruppa equations derived from the Fundamental Matrix”,里面不就是通过三个F求解绝对二次曲线的像进而求内参的么,怎么说不能由F估计出内参呢?
    刚看了MVGCV的前言,里面也说由三幅图计算出点的3D位置算法已经成熟啊了.

    有点混乱了,那请问如果要恢复点的3D坐标,,除了计算三幅图间的匹配点外,还需要做什么?

    回复

    foelin reply on 四月 14th, 2010:

    1.我没有表述清楚,我的意思是不能由基本矩阵直接得到内参数,必须要利用一些假设的约束,例如相机内参不变或者已知主点或者畸变为0等,才能求解出内参。
    你看那篇文章是利用F推导出了Kruppa方程,求解Kruppa方程的时候会用到上述约束~~
    2.三维重建确实比较成熟了,自标定没说成熟吧,或者是我不清楚最新的情况了~~这个翻翻文献吧~
    3.最基础的就是匹配、标定、重建。现在除了恢复3d坐标,一般还要恢复表面法向量这些~

    回复

    3Dman reply on 四月 16th, 2010:

    好的,谢了.刚看到MVGCV的第三章,理解了你为什么上面那么说了.
    自标定确实还需要研究研究

    回复

    foelin reply on 四月 17th, 2010:

    恩,此书是必读经典,好好看吧~

    回复

    3Dman reply on 四月 23rd, 2010:

    你好,读MVGCV时有两个困惑请教一下:
    1 里面讲projective reconstruction时说不失一般性假设P1=[I|0],这样怎么能叫不失一般性呢? 这样岂不是强制认为第一求出的摄像机内参为I么, 而根据Pw=PiH岂不是认为第一个camera的H等于第一个camera的内参K:
    2 如果有四个view 是不是只有一个空间点在四幅图中分别都找到了对应点,这个点才能算做correspondences,还是四图两两之间分别找对应点就行了.如果是前一种情况,会不会造成实际找到的对应点数太少了?

    多谢赐教

    回复

    foelin reply on 四月 25th, 2010:

    1.射影重建是不需要求内参的,欧式重建才需要。假设P1=[I|0]并没有强制认为第一个摄像机的内参数为I,因为这里P1假设是射影重建下的摄像机矩阵,与它相差一个射影变换的相机都是和它等价的。例如P1X=x,则(P1H)(H-1X)=x,P1H和P1射影等价。
    2.不一定,两种都可以,看你具体用什么算法。后面章节中关于N视的时候的因式分解法就要求所有的空间点在所有的视下可见;如果用bundle adjustment的方法就没这个要求。

    回复

    foelin reply on 四月 12th, 2010:

    PS:我现在已经没有做calibration了,目前在做stereo matching。。这篇博客是2年前的。。。

    回复

    3Dman reply on 四月 12th, 2010:

    呵呵,不好意思啊,我会尽可能自己看的,实在不懂再麻烦你

    回复

    foelin reply on 四月 14th, 2010:

    互相学习吧·~我自己也在探索中~~

    回复

  3. 3Dman 说:

    你好,再次求助一下.
    因为用normalized 8 points算法算出的基本矩阵波动总是很大,且F里面的值很小.(直接调用cvFindFundamentalMat中的CV_FM_RANSAC)

    我用的是camera不动,场景中一车在行驶,取不同帧时的图作匹配,用手手动点击选出两图中车上的匹配点(由于车动了,而我只选择关于车的匹配点,所以我觉得这样可等效为camera在动了)
    ,由于是手动点,点出的匹配点像素只能是整数. 我用同样两幅图点出的点算出的基本矩阵总是波动很大.
    请问有可能是什么原因呢?
    我选的点并非全是共面,而camera也应该等效成有translation才对啊,难道是因为我的点坐标只能是整数造成误差较大造成?

    查了几天资料了,也试了很多次,总是解决不了,期待指教

    回复

    foelin reply on 五月 10th, 2010:

    手动选点的误差是一个因素。你点了几个点出来算?如果比较少的话,RANSAC的意义不大,很可能就根据错的点来算了。。
    建议先用人工生成一些点来做模拟,验证你计算F的程序的正确性。然后再在实际图像上做实验。
    多视几何这本书提供了matlab的代码下载,貌似包含有计算F的程序,可以参考下~

    回复

    3Dman reply on 五月 18th, 2010:

    多谢答复 请问下如何人工生成点进行模拟?

    回复

    foelin reply on 五月 19th, 2010:

    意思就是先验证你的程序是否正确,再用真实图像去测试。
    例如算F的程序,你先在空间随机分布一些点,设定2个摄像机矩阵P1,P2,分别投影就得到了若干的图像点对,对其加高斯噪声,然后再根据这些投影点,估计F。在不同的噪声水平下估计F,验证你程序的正确性。F估计的好坏有多种评价方法,例如1.重投影误差。2..点到外极线的距离(即若x1Fx2′=0,则计算x2到Fx1的距离)

    回复

    3Dman reply on 五月 19th, 2010:

    Got it! 非常感谢 继续试验

    回复

    3Dman reply on 五月 18th, 2010:

    还有一个问题想不通的是 如果用SIFT自动匹配提取特征点虽然提取的点很多 但是自动匹配也存在着很大的误差 这样综合起来自动匹配的效果并不优于手动提取的少数点的效果 可以这样理解么?

    回复

    foelin reply on 五月 19th, 2010:

    sift得到的点很多,可以ransac。。
    手动选点精确度低,并且数量少,拟合计算F的时候误差更大

    回复

    3Dman reply on 五月 27th, 2010:

    你好,加了SIFT自动提取匹配点和RANSAC后效果确实好多了,现在两幅视图进行的projective reconstruction效果还不错.

    有一个问题还想请教一下,现在在用absolute dual quatric进行自标定,里面需要用到的图片数从三张到八张不等,而每张视图需要计算P. 请问可不可以以其中一图为基准,用计算基本矩阵的方法计算两两视图间的基本矩阵再从这个基本矩阵抽离出P.
    还是得用trifocal Tensor方法?但对于要计算四个或五个视图的P呢? 我在MVGCV里面似乎没找到计算这种多个视图时的P的方法.

    回复

    foelin reply on 五月 27th, 2010:

    第一个问题,肯定是不行的。
    原因在于根据第一个view和第二的view的基本矩阵F12算出了某个射影重建意义下的P1,P2,再根据第一个view和第三个view的基本矩阵F13算出了某个射影重建意义下的P1,P3,他们不一定是在同一个射影重建下的,即不一定compatible。
    从自由度上来考虑,欧式重建下得到3个P需要33个自由度,再射影重建下求3个P则要少去H的15个自由度,即18个自由度,2个F只提供了2*7=14个约束,显然是不够的。
    更为具体的内容可参考MVGCV的15.4

    第二个问题,基于张量的方法,一般用来做三view和四view的射影重建计算,因为约束方程有很好的几何意义。对于muti-view下的射影重建,没有人研究用张量的方法来解,但书中介绍了很多常用的方法,例如bundle adjustment,factorization algorithm,projective reconstruction using planes…

    回复

    3Dman reply on 五月 27th, 2010:

    谢谢你的回复 今天已经在开始看trifocal tensor的计算.
    请问下计算tensor之类的有没有什么开源库可以利用的
    还是得自己写代码?

    我看了几遍18.1里面的bundle adjustment. 但为什么里面最重要的inttial solution没有明确说如何给出. 比如对于一堆有六张视图的, 请问里面哪一节是讲到这种情况的initial solution的解法的.()

    回复

    foelin reply on 五月 28th, 2010:

    补充下,若计算了F12,F13后,再计算出F23,则恢复射影重建意义下的3个P是可以的,这样不用算三焦张量。
    tensor的自己写吧,hartley书中的algorithm很容易就转换成matlab代码了。。。

    至于initial solution,他不是说”several methods for initialization are described in the following sections”么?
    factorization, using planes这些的都可用于求初始解,ba只是一个优化的框架,用于所有非迭代算法的最后一步

    回复

    3Dman reply on 五月 28th, 2010:

    好的 谢了 早上正在看那一部分
    你第一点说的计算F12 F13后再计算出F23恢复出P1 P2 P3是不是就是用15.4里面的方法

    回复

    foelin reply on 五月 28th, 2010:

    恩,是的

    回复

  4. Jhong 说:

    问一下,MVGCV买不到啊!难道有电子版的?

    回复

    foelin reply on 十一月 26th, 2010:

    有电子版的,不过我是借的国科图的纸质版去复印的

    回复

    Jhong reply on 十一月 26th, 2010:

    哦,这样啊!呵呵,在看中文版的,英文版的很贵,而且买不到!

    回复

    foelin reply on 十一月 26th, 2010:

    安徽大学翻译的?翻译的很烂,建议打印英文电子版的来看。

    回复

    Jhong reply on 十一月 27th, 2010:

    嗯,是那本。其实国内翻译的东西大多都很烂!由于手头恰好有一本,就将就看了,呵呵!态度不严谨哈!
    好,听从建议,看原版的,谢谢啦! :smile:
    PS:你的博客真的很赞!已经关注好久了!

    回复

    foelin reply on 十一月 30th, 2010:

    thx~那本书我09年看了一遍,虽然现在不搞标定了,不过有什么问题还是可以讨论,呵呵~

    回复

    Jhong reply on 十二月 3rd, 2010:

    呵呵,你好像在研究特征点匹配啊!老师让做位姿估计和重建,最初只是看论文,但深感基础薄弱,打算静下心来,好好看书!

    回复

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>