之前在计算基础矩阵的时候,简单的利用八点算法来实现。这样虽然很简单、直观,但是这一切是建立在完美的匹配点数据上。然而在实际情况中,由于噪声数据,计算出的F可能是满秩的,这当然就不符合要求了。正如所知,基础矩阵F应该是一个秩为2的3×3矩阵,det(F)=0。我的程序之前忽略了这一误差,所以导致后续的计算外极点坐标,内部参数的时候产生了更多的误差,以至于一直无法很好的估计出合理的摄像机参数。 最初考虑的改进是选取七个点,根据u’Fu=0,建立七个线性方程,然后再由det(F)=0,建立一个方程。由此8个未知数8个方程,就可以求得基础矩阵。但是这样的话在不易编程实现,毕竟det(F)=0引入的不是线性方程。本来想用matlab中的fsolve来计算,但是结合vc的环境也不方便运用,所以在这里困扰了很久。后来看到某paper上介绍了一种颇为简单的实现办法,于是茅舍顿开。大概步骤如下: (1)还是用利用8点计算出一个F,自然,由于噪声数据,F计算出来时满秩的,det(F)!=0。 (2)将F做SVD分解,F=U*D*V’,其中D=diag(r,s,t),r>s>t。 (3)令D2 = diag(r,s,0),则F2 = U*D2*V’。可以证明,F2-F的Frobenius范式为最小,则可用F2作为基础矩阵。 OK,准备按照此思路修改下程序了,嘿嘿。
分享本文!
Tag Archive '参数估计'
经过几天的鏖战,摄像机参数估计的程序基本完工,hoho,连注释一共还不到千行。 内参估计的结果是没有什么问题的,和3dmax的虚拟摄像机焦距的误差在允许范围之内。外参估计的结果还有些不足,旋转矩阵计算出来居然不是单位正交阵..初步估计是算法还有些小bug,应该不难解决。准备今明两天完善下参数估计的后续工作,再用opengl做一个简单的重建程序,验证一下效果。 总结下这两天写程序遇到的一些问题:
1. 根据F*e=0计算外极点坐标时,由于数值误差,前一步计算出的基础矩阵很可能是满秩的,也就是说其行列式det(F) != 0。这样的话该线性齐次方程组就无解,在matlab中也就不能用null命令来求解,因此只能求e的一个近似解。 最先想到的解决方案是归一化F的元素,也就是说让 F = F / maxElement(F),然后将F中小于某个阈值的元素设定为0,以此拼凑出一个不满秩的近似的F。然而这样的问题在于此阈值很难确定。刚开始设定的是0.000001,针对一组数据的计算误差尚可接受,但是换一组数据就不行了。
分享本文!
前天晚上正式进入了毕业设计的编码实现阶段,计划是一个星期内完成整个程序。 首先经过一晚上的耕耘,实现了一个异常简单的手动获取两幅图像的特征点的小程序,给我后续的参数估计提供所需要的数据。原本自动提取特征点有很多优秀的算法,也不难实现,只是这一块不是我份内之事,因此便偷懒用手工选取代替了,嘿嘿。。 然后昨天花了半天时间,学习了一下matlab与VC的混合编程。之所以不单纯的用c++实现,是因为程序中涉及到许多矩阵的运算,包括解线性方程,SVD分解,QR分解等等,这恰恰是matlab完善而又强大之处。通过简单的在vc中调用matlab引擎,可以将程序中的数据传给matlab进行计算,然后再从中读取计算结果。嘿嘿,确实简化了我大量的工作。
分享本文!
简谈毕业设计实现思路—-1
Posted in 学习&技术 on Apr 13th, 2008
我毕设的题目是关于摄像机参数的估计,也就是摄像机标定,属于计算机视觉中三维重建这一块的一个步骤。之前对此完全是一无所知,且略感神秘莫测,心想2维图像岂能重建出三维信息?!诡异~~ 开学以来,断断续续的看了点资料,也开了几次毕设的会,于是乎有了些似是而非的理解,也有了些初步的想法。话说今天早上再得LZ老师一番悉心指点,可谓是醍醐灌顶,豁然开朗~~对于利用绝对2次曲线来计算内参中的焦距的晦涩原理也终于理解的比较清楚了,加上之前已经知道了外参的计算方法,于是乎我的论文的思路也基本上清晰起来了。这里简单的记录一下,以便以后查阅。
OK,Let’s begin
在此之前,先解释一下三维重建的流程。我就两视的三维重建系统来简单说明一下。
首先引入一个两视三维重建系统的实物图和原理图,如下所示。
该系统中,两个摄像机同时拍摄实际场景中的物体,因此得到了左边的像平面和右边的像平面(实际上摄像机的成像平面位于光心之后,这里为了便于讨论,将其对称的搬到光心之前),左像平面和右像平面上都存在物体的像。
分享本文!
晚上温习了一下上周六毕设讲课的内容,思维游离于欧氏几何、同射几何、仿射几何、射影几何之间,清晰地混沌着。。
整个一套射影几何以及外极几何理论是我毕设所需要的背景知识,主要用于在求解以及拆分基础矩阵上。后期的参数估计还会用到绝对二次曲线方面的理论,我还没有研究。目前只能说是对于三维重建系统的框架大致有所理解,明白我所做的参数估计在系统中的实际意义。其实就是利用采集完的匹配特征点求解摄像机参数,然后再利用估计出的参数对2维数据进行3维重建。在理论上证明后,还需要咋matlab中实现。
分享本文!




