Gol*_*gii 5 python numpy matrix
我在 Pyhon 中编码,我正在研究立体相关。我想解决这个方程:m = KTM
m,K,M 都知道。
在哪里 :
M是笛卡尔坐标系“世界”中点的齐次坐标
M=np.array([X,Y,Z,1])
Run Code Online (Sandbox Code Playgroud)
K是我的左相机的内在矩阵
K=np.matrix([ [fx, 0, cx, 0],
[ 0, fy, cy, 0],
[ 0, 0, 1, 0]])
Run Code Online (Sandbox Code Playgroud)
m它是左相机的 M 点视图
m=np.array([x,y,1])
Run Code Online (Sandbox Code Playgroud)
和牛逼是通过对“世界”的转变坐标系左摄像机坐标系。
T= np.matrix([[x00, x01, x02, Tx],
[x10, x11, x12, Ty],
[x20, x21, x22, Tz],
[0 , 0 , 0 , 1 ]])
Run Code Online (Sandbox Code Playgroud)
所以我想解决这个方程来找到T但如果不给变量赋值就不可能创建矩阵。
有人有解决方案吗?
谢谢最好的问候
如果您想要通用解决方案,可以使用Sympy,它允许您使用符号表达式。在以下代码中,表达式K.T.M = m被重新表述为标准线性方程HH.xx = mm,其中xx是从 中提取未知数的向量T:
from IPython.display import display
import sympy as sy
sy.init_printing() # LaTeX like pretty printing for IPython
# declaring symbolic variables:
x, y, X, Y, Z, fx, fy, cx, cy = sy.symbols("x y X Y Z f_x f_y c_x c_y", real=True)
x00, x01, x02, x10, x11 = sy.symbols("x00, x01, x02, x10, x11", real=True)
x12, x20, x21, x22 = sy.symbols("x12, x20, x21, x22", real=True)
Tx, Ty, Tz = sy.symbols(" T_x T_y T_z", real=True)
# Building matrices and vectors:
M = sy.Matrix([X, Y, Z, 1])
m = sy.Matrix([x, y, 1])
K = sy.Matrix([[fx, 0, cx, 0],
[0, fy, cy, 0],
[0, 0, 0, 1]])
T = sy.Matrix([[x00, x01, x02, Tx],
[x10, x11, x12, Ty],
[x20, x21, x22, Tz],
[0, 0, 0, 1]])
print("KTM = K.T.M = ")
KTM = sy.simplify(K*T*M)
display(KTM)
print("Vector of Unkowns xx.T = ")
xx = sy.Matrix(list(T.atoms(sy.Symbol)))
display(xx.T)
print("For equation HH.xx = mm, HH = ")
HH = KTM[:2, :].jacobian(xx) # calculate the derivative for each unknown
display(HH)
Run Code Online (Sandbox Code Playgroud)
正如 @Sven-Marnach 已经指出的那样,没有足够的方程来实现唯一的解决方案。由于向量KTM和 的最后一行m是 1,因此十二个变量只有两个方程。
如果您有多个像素要评估,即多对(m, M),您可以使用Numpy 的最小二乘求解器来找到解决方案。
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |