2009-10-28 74 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 + ...)很容易。