Fus*_*uck 15 opencv computer-vision
我知道在一般情况下,由于深度信息从3d变为2d,因此无法进行此转换.
但是,我有一个固定的相机,我知道它的相机矩阵.我还有一个已知尺寸的平面校准图案- 假设在世界坐标中它有角(0,0,0)(2,0,0)(2,1,0)(0,1,0).使用opencv我可以估计模式的姿势,给出将对象上的点投影到图像中的像素所需的平移和旋转矩阵.
现在:这个3D到图像投影很容易,但另一种方式怎么样?如果我在图像中选择我知道是校准图案的一部分的像素,我该如何获得相应的3d点?
我可以在校准模式上迭代地选择一些随机3d点,投影到2d,并根据误差细化3d点.但这看起来非常可怕.
鉴于这个未知点的世界坐标类似于(x,y,0) - 因为它必须位于z = 0平面上 - 似乎应该有一些我可以应用的变换,而不是做迭代的废话.我的数学不是很好 - 有人可以解决这个转变并解释你如何得出它吗?
Mil*_*ilo 13
这是一个封闭的形式解决方案,我希望可以帮助某人.使用上面注释中图像中的约定,您可以使用居中标准化像素坐标(通常在失真校正后)u和v,以及外部校准数据,如下所示:
|Tx| |r11 r21 r31| |-t1|
|Ty| = |r12 r22 r32|.|-t2|
|Tz| |r13 r23 r33| |-t3|
|dx| |r11 r21 r31| |u|
|dy| = |r12 r22 r32|.|v|
|dz| |r13 r23 r33| |1|
Run Code Online (Sandbox Code Playgroud)
使用这些中间值,您需要的坐标是:
X = (-Tz/dz)*dx + Tx
Y = (-Tz/dz)*dy + Ty
Run Code Online (Sandbox Code Playgroud)
说明:
矢量[t1,t2,t3] t是世界坐标系原点(校准图案的(0,0))相对于摄像机光学中心的位置; 通过反转符号并反转旋转变换,我们得到矢量T = [Tx,Ty,Tz] t,它是摄像机中心在世界参考系中的位置.
类似地,[u,v,1] t是其中位于相机参考系中的观察点(从相机中心开始)的矢量.通过反转旋转变换,我们获得向量d = [dx,dy,dz] t,其表示世界参考帧中的相同方向.
为了反转旋转变换,我们利用旋转矩阵的逆是其转置(链接)这一事实.
现在我们有一条方向矢量d从点T开始的线,该线与平面Z = 0的交点由第二组方程给出.注意,同样容易找到与X = 0或Y = 0平面或与它们平行的任何平面的交点.
是的你可以。如果您有一个将 3D 世界中的点映射到图像平面的变换矩阵,则只需使用该变换矩阵的逆矩阵即可将图像平面点映射到 3D 世界点。如果您已经知道 3d 世界点的 z = 0,这将导致该点有一个解。无需迭代地选择一些随机 3d 点。我遇到了类似的问题,我将摄像机安装在具有已知位置和摄像机校准矩阵的车辆上。我需要知道相机图像位置上捕获的车道标记的真实位置。
| 归档时间: |
|
| 查看次数: |
20391 次 |
| 最近记录: |