如何在Python中求解矩阵中包含变量的方程?

如何在Python中求解矩阵中包含变量的方程?,python,numpy,matrix,Python,Numpy,Matrix,我在用Pyhon编码,我在研究立体相关。我想解这个方程:m=K.T.m m、 K,m都知道 其中: M是笛卡尔坐标系“世界”中一点的齐次坐标 K是我的左摄像头的固有矩阵 K=np.matrix([ [fx, 0, cx, 0], [ 0, fy, cy, 0], [ 0, 0, 1, 0]]) m=np.array([x,y,1]) m它是左摄像机的m个点视图 K=np.matrix([ [fx, 0, cx, 0],

我在用Pyhon编码,我在研究立体相关。我想解这个方程:m=K.T.m

m、 K,m都知道

其中:

M是笛卡尔坐标系“世界”中一点的齐次坐标

K是我的左摄像头的固有矩阵

K=np.matrix([ [fx,  0, cx, 0],
              [ 0, fy, cy, 0], 
              [ 0,  0,  1, 0]])
m=np.array([x,y,1])
m它是左摄像机的m个点视图

K=np.matrix([ [fx,  0, cx, 0],
              [ 0, fy, cy, 0], 
              [ 0,  0,  1, 0]])
m=np.array([x,y,1])
T是传递到“世界”坐标系到左侧摄影机坐标系的变换

T= np.matrix([[x00, x01, x02, Tx],
              [x10, x11, x12, Ty], 
              [x20, x21, x22, Tz], 
              [0  , 0  , 0  , 1 ]])
所以我想解这个方程,找到T,但是如果不给变量赋值,就不可能创建一个矩阵

有人有办法吗

谢谢
最好的问候

如果您想要一个通用的解决方案,您可以使用,它允许您使用符号表达式。在以下代码中,表达式
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)
正如@Sven-Marnach已经指出的,没有足够的方程可以得到唯一的解。由于向量
KTM
m
的最后一行是1,因此十二个变量只有两个方程


如果要计算多个像素,即多对
(m,m)
,则可以使用来找到解决方案。

公式中的
K.T.m
是什么??点积?你只有三个方程和十二个未知数,所以没有唯一的解。我怀疑变换矩阵中的
x_ij
项应该是一个旋转,这会使你减少到六个未知量,仍然太多。是的,我知道我只有3个方程,包含12个变量,但如果我取模式的其他点,那么其他M,比如M(1,1,0),我会得到3个新方程。我的问题是在矩阵中引入没有值的变量。但我认为@Dietrich已经解决了我的问题,我将对此进行测试。@Monkpit K.T.M只是矩阵和vector@SvenMarnach,是的,变换由旋转xij和平移Ti组成,但我没有简单的绕单轴旋转。这个旋转可以由围绕不同轴的连续旋转组成是的,我的模式由45个点组成,所以我有很多对(m,m),所以方程比变量多@迪特里希非常感谢你的回答和帮助。我会试试看,然后再回来找你。