关于计算基础矩阵

   之前在计算基础矩阵的时候,简单的利用八点算法来实现。这样虽然很简单、直观,但是这一切是建立在完美的匹配点数据上。然而在实际情况中,由于噪声数据,计算出的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,准备按照此思路修改下程序了,嘿嘿。

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

关于计算基础矩阵》有 12 条评论

  1. 三峡大学 说:

    老弟,很羡慕你啊,我想考川大的研究生,结果复试被刷了。现在想搞摄像机标定,根本没人跟我讲,只能自己看书。唉。

    回复

    foelin reply on 四月 4th, 2009:

    我现在读研也不是做这个方向了~

    回复

发表评论

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

*

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