3D点对应2D的麻烦
Troubles in 3D points correpondance to 2D
我制作了一个小 python 脚本来生成一些 3D 点坐标,从立体视觉(2 个红外摄像机)中导出它们。
3D坐标肯定是正确的。
现在我有了第三台 RGB 相机,我得到了校准矩阵(我无法验证它们):K 是内部矩阵,R,t 是外部参数的分量。 RGB图片是1280x800 但是我设置不对.
我认为使用投影公式会很容易,导出投影矩阵 "Pcolor" 为 Pcolor = K[R|t]
并重新投影 XYZ 3D 坐标(名为 "Pworld"),如下所示:
我希望得到 (u,v,w) 所以我将结果除以 w 归一化。
#import numpy as np
ExtrColor = np.concatenate((Rcolor,Tcolor), axis = 1)
#Rcolor is the 3x3 rotation matrix, Tcolor the column translation array
# after calculation of X,Y,Z
Pworld = np.matrix([[X], [Y], [Z], [1]])
Pcolor = np.dot((np.dot(Kcolor,ExtrColor)),Pworld)
u = round(Pcolor[0,0]/Pcolor[2,0])
v = round(Pcolor[1,0]/Pcolor[2,0])
然后我发现我得到的u和v值都大于12000而不是在图像范围内(x< 1280 和 y<800).
我不知道是什么问题。有没有人遇到过类似的问题?
我不考虑 XYZ 坐标中比例因子的问题,在这个问题的表述中应该是无效的。
我使用 np.dot 有问题吗?我很确定这是一个小错误,但我看不到它。
感谢您的回答(抱歉英语不好)!
我在stack-overflow上查了类似的问题,here问题好像很相似,但是方法不一样
PS这次不想用openCV或者其他函数库获取结果,如果可以的话
更新:问题似乎是这样的:
两个相机(IR 和 RGB)的校准不是使用相同的标准进行的,都被认为是真实的。
我制作了一个小 python 脚本来生成一些 3D 点坐标,从立体视觉(2 个红外摄像机)中导出它们。 3D坐标肯定是正确的。
现在我有了第三台 RGB 相机,我得到了校准矩阵(我无法验证它们):K 是内部矩阵,R,t 是外部参数的分量。 RGB图片是1280x800 但是我设置不对.
我认为使用投影公式会很容易,导出投影矩阵 "Pcolor" 为 Pcolor = K[R|t]
并重新投影 XYZ 3D 坐标(名为 "Pworld"),如下所示:
我希望得到 (u,v,w) 所以我将结果除以 w 归一化。
#import numpy as np
ExtrColor = np.concatenate((Rcolor,Tcolor), axis = 1)
#Rcolor is the 3x3 rotation matrix, Tcolor the column translation array
# after calculation of X,Y,Z
Pworld = np.matrix([[X], [Y], [Z], [1]])
Pcolor = np.dot((np.dot(Kcolor,ExtrColor)),Pworld)
u = round(Pcolor[0,0]/Pcolor[2,0])
v = round(Pcolor[1,0]/Pcolor[2,0])
然后我发现我得到的u和v值都大于12000而不是在图像范围内(x< 1280 和 y<800).
我不知道是什么问题。有没有人遇到过类似的问题? 我不考虑 XYZ 坐标中比例因子的问题,在这个问题的表述中应该是无效的。 我使用 np.dot 有问题吗?我很确定这是一个小错误,但我看不到它。
感谢您的回答(抱歉英语不好)!
我在stack-overflow上查了类似的问题,here问题好像很相似,但是方法不一样
PS这次不想用openCV或者其他函数库获取结果,如果可以的话
更新:问题似乎是这样的: 两个相机(IR 和 RGB)的校准不是使用相同的标准进行的,都被认为是真实的。