Python 将二维图像点转换为三维世界点,其中Z=0

Python 将二维图像点转换为三维世界点,其中Z=0,python,numpy,opencv,image-processing,projection-matrix,Python,Numpy,Opencv,Image Processing,Projection Matrix,下面的代码将检测到的二维图像点转换为其在三维世界中定义的平面栅格上的三维位置。 这意味着Z=0,并且考虑到外部和内部已知,我们可以计算检测到的2D图像点的相应3D_点: 通过对点进行规格化(除以第三个值),结果是 `X_World=0.45331611680765327 # 45.3 cm from defined world point cm which is correct Y_world=0.6250572251098481 # 62.5 cm which is also corre

下面的代码将检测到的二维图像点转换为其在三维世界中定义的平面栅格上的三维位置。 这意味着Z=0,并且考虑到外部和内部已知,我们可以计算检测到的2D图像点的相应3D_点:

通过对点进行规格化(除以第三个值),结果是

`X_World=0.45331611680765327 # 45.3 cm from defined world point cm which is correct
 Y_world=0.6250572251098481  # 62.5 cm which is also correct
  
通过评估结果,结果证明它们是正确的

我现在无法检索3D世界点的Z坐标,因为从3D到2d时,深度信息丢失。下面的等式还执行2D点到3D世界的反向投影,可以在所有文献中找到,结果是一个等式,表示3D_uuu世界点必须位于的线上

我将等式3.15放入代码中,但是没有设置Z=0,这意味着不删除投影矩阵的第三列,就像我在前面的方法中所做的那样(正如所写的),通过执行以下操作:

#inverting the rotation matrix
INV_R=np.linalg.inv(R_mtx)

#inverting the camera matrix
INV_k=np.linalg.inv(mtx)

#multiplying the tow matrices
kinv_Rinv=INV_k.dot(INV_R)

#calcuating the 3D_point X which expressed in eq.3.15
3D_point=kinv_Rinv.dot(img_point)+tvecs1

#print the results
print('3D_pt_method2\n',3D_point)
结果是

3D_pt_method2 #how should one understand these coordinates ?
[[-9.12505825] 
[-5.57152147]
[40.12264881]]
我的问题是,我应该如何理解或解释这个结果?因为与前面的方法相比,Z=0没有任何意义。3D 3x1结果向量似乎给出了一种直觉,即其值仅表示检测到的图像_点的3D X、Y和Z。但是,如果我们将X和Y与前面的方法进行比较,则这是不正确的

那么3D_pt_方法1和3D_pt_方法2之间的区别是什么呢

我希望我能表达我的想法,并且非常感谢帮助我理解这两种实现之间的差异

注意:表示我定义的世界平面的网格,可以在下图中看到,其中每两个黄点之间的距离为40厘米


提前感谢

如果缩放使Z为已知(正确)距离,那么X和Y坐标是否匹配?直观地说,你会得到一条点应该位于的“线”,其中X和Y将随着深度的某种关系线性缩放,Z。顺便说一句,在Python中,3D_点不是一个有效的标识符,因此你应该更改你问题中的代码,使其运行。我不确定我是否理解你所说的“缩放,使Z成为已知值”是什么意思(正确)距离,X和Y坐标是否匹配?”。我知道通过设置Z=0计算的X,Y应该位于第二种方法得出的直线上。但是我不明白。请您用一个数字示例或甚至是我的结果来表示这一点好吗?提前谢谢。关于您编写的代码示例,这只是一个示例。实际代码运行well@alkasm@丹。希望你能帮我一把也许你能给我一些解释:)@fmw42提前谢谢如果你缩放Z是一个已知(正确)的距离,那么X和Y坐标匹配吗?直观地说,你会得到一条点应该位于的“线”,其中X和Y将随着深度的某种关系线性缩放,Z。顺便说一句,在Python中,3D_点不是一个有效的标识符,因此你应该更改你问题中的代码,使其运行。我不确定我是否理解你所说的“缩放,使Z成为已知值”是什么意思(正确)距离,X和Y坐标是否匹配?”。我知道通过设置Z=0计算的X,Y应该位于第二种方法得出的直线上。但是我不明白。请您用一个数字示例或甚至是我的结果来表示这一点好吗?提前谢谢。关于您编写的代码示例,这只是一个示例。实际代码运行well@alkasm@丹。希望你能帮我一把也许你能给我一些解释:)@fmw42提前谢谢
3D_pt_method2 #how should one understand these coordinates ?
[[-9.12505825] 
[-5.57152147]
[40.12264881]]