我正在尝试提取相机检测到的物体的真实世界坐标。我有相机矩阵和失真矩阵。由于我有x,y(图像中物体的坐标),我尝试求解(X,Y)以获得相对于相机的物体坐标。 (Z = 0,因为我知道放置物体的平面。)
然而,这种方法似乎有问题。我错过了什么吗?
答案 0 :(得分:0)
你说有问题的3D点的Z世界坐标已知为零。我假设您的世界坐标系与摄像机坐标系不同,否则您的点将位于传感器平面后面,我们就完成了。因此,您必须(可能是校准程序的结果)从世界帧到相机的坐标变换,表示为3x4矩阵Q = [R | t],以便该平面上的世界点投射到图像中:
[x, y, w]' = K * Q * [X, Y, Z, 1]'
其中"'"意思是换位。
用Qi表示从相机帧到世界帧的逆坐标变换:
Qi = inv(Q) = [R' | (-R' * t)]
使用这个矩阵,我们可以用世界坐标编写摄像机中心:
c_w = Qi * [0, 0, 0, 1]'
图像平面上的像素是世界点的图像:
i_w = Qi * Ki * [x, y, 1]'
其中Ki = inv(K)是相机矩阵的倒数。
从相机中心通过该像素的光线上的所有点都具有世界坐标:
r_w = c_w + lambda * (i_w - c_w)
其中lambda是正数。
您正在寻找这样一条光线上的特定点,即Z = 0平面上的光线。因此,如果在(X,Y,Z)分量中写出最后一个等式,并用0代替Z,则在未知数X,Y和λ中得到3个等式的线性系统。解决它,你得到你的答案。
答案 1 :(得分:-1)
问题是你得到的是按比例调整的坐标。远处的大物体与附近的小物体具有相同的图像。
您需要应用有关对象的一些外部信息才能缩放坐标。它可以是关于对象的一些信息(例如其大小),也可以是使用立体相机或其他RGBD相机。