2009-10-28 35 views
0

我想用numpy的最小二乘算法从6个已知的3D - > 2D点对应中求解摄像头矩阵。摄像头矩阵的最小二乘解[numpy]

我一直在使用这个网站作为参考:

http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT9/node4.html

目前我的相机矩阵似乎有非常小的值:

[[ -1.01534118e-11 3.87508914e-11 -2.75515236e-11 5.57599976e+02] 
[ -1.84008233e-11 2.78083388e-11 -9.67788509e-11 9.77599976e+02] 
[ -2.59237076e-14 -8.57647287e-15 -9.09272657e-14 1.00000000e+00]] 

我想能够约束numpy求解器来防止它解决矩阵几乎为零的简单解决方案。
有谁知道如何约束numpy.linalg.lstsqr()

+0

如果numpy本身没有这样做(很可能它会像MatLab和其他库一样),也许你可以对矩阵进行归一化处理,使其大部分值落在一个更加数值化的范围内“友好“(如果当然,这样做不会使某些其他计算失效等) – mjv 2009-10-28 00:59:12

回答

1

我怀疑你可能需要在scipy.optimize中使用fmin_ *例程。 optimization tutorial涵盖基本使用,scipy.optimize.fmin_slsqp可以包含约束条件。

+0

你可能是对的,fmin_slsqp看起来做我想做的事。我需要正确安装scipy。 此外,如果任何人都可以指向我的示例代码解决相机矩阵使用线性优化,这将是有益的。 – freakTheMighty 2009-10-28 16:42:31

+0

从源头上构建Scipy有点邪恶。就我个人而言,我使用Enthought Python Distribution(http://www.enthought.com/products/epd.php),因为它只需要5分钟即可在大多数平台上安装,然后提供一致的环境。 Sage(http://www.sagemath.org/)也很出色,我在EPD之前使用过。 – 2009-10-29 15:13:36

2

我需要得到正确SciPy的

只是注意安装安装SciPy的,Ubuntu的发行版,因为8.04有一颗受伤的SciPy的构建。这已经在最新的9.10测试版中得到了关注。你可以从头开始构建scipy,但这通常不是一件容易的事情。只是一个小小的头脑,因为我们在这里花了一些努力才得以解决。也许它会为你节省一些挫折=)

0

least squares staying near a point x0 有什么用处,即是否有一个相机矩阵x0你想要接近?
“远离一些x0”是非凸的,令人讨厌的;保持在x0或x1 ...附近,即最小化
|Ax-b|^2 + w^2 (|x-x0|^2 + |x-x1|^2 + ...)很容易。