相机标定之4个坐标系之间的变换关系

最近在进行相机标定和相机成像范围计算时,需要用到相机坐标转换关系中的图像坐标到世界坐标的转换,检索到这篇博文【四个坐标系之间的变换关系】,觉得讲解简练清晰易懂,故进行转载分享如下,供更多人学习。

转自:https://blog.csdn.net/lyl771857509/article/details/79633412

 

世界坐标系,相机坐标系,图像物理坐标系,像素坐标系之间的关系:

1:世界坐标系:根据情况而定,可以表示任何物体,此时是由于相机而引入的。单位m。
2:相机坐标系:以摄像机光心为原点(在针孔模型中也就是针孔为关心),z轴与光轴重合也就是z轴指向相机的前方(也就是与成像平面垂直),x轴与y轴的正方向与物体坐标系平行,其中上图中的f为摄像机的焦距。单位m
3:图像物理坐标系(也叫平面坐标系):用物理单位表示像素的位置,坐标原点为摄像机光轴与图像物理坐标系的交点位置。坐标系为图上o-xy。单位是mm。单位毫米的原因是此时由于相机内部的CCD传感器是很小的,比如8mm x 6mm。但是最后图像照片是也像素为单位比如640x480.这就涉及到了图像物理坐标系与像素坐标系的变换了。下面的像素坐标系将会讲到。
4:像素坐标系:以像素为单位,坐标原点在左上角。这也是一些opencv,OpenGL等库的坐标原点选在左上角的原因。当然明显看出CCD传感器以mm单位到像素中间有转换的。举个例子,CCD传感上上面的8mm x 6mm,转换到像素大小是640x480. 假如dx表示像素坐标系中每个像素的物理大小就是1/80. 也就是说毫米与像素点的之间关系是piexl/mm.
好了四个坐标系都解释完了,接下来就说下各个坐标系中间的变换关系吧。


一、世界坐标到相机坐标系

物体之间的坐标系变换都可以表示坐标系的旋转变换加上平移变换,则世界坐标系到相机坐标系的转换关系也是如此。绕着不同的轴旋转不同的角度得到不同的旋转矩阵。如下:

那么世界坐标系到相机坐标系的变换如下:

二、相机坐标系到图像物理坐标系

从相机坐标系到图像坐标系,属于透视投影关系,从3D转换到2D。 也可以看成是针孔模型的改变模型。满足三角形的相似定理。

三、图像物理坐标系到像素坐标系

此时与前面的坐标系变换不同,此时没有旋转变换,但是坐标原点位置不一致,大小不一致,则设计伸缩变换及平移变换。

综上所述,大家可以看出四个坐标系之间存在着下述关系 ( 矩阵依次左乘 ):

其中相机的内参和外参可以通过张正友标定获取。

通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点。

但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的Zc的值。

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
相机标定后,将世界坐标系坐标转换为像素坐标系坐标的步骤如下: 1. 确定相机内参矩阵K和畸变参数D。 2. 确定要转换的世界坐标系中的点P。 3. 将P从世界坐标系转换到相机坐标系中,得到相机坐标系中的点P_c = R*P_w + t,其中R是旋矩阵,t是平移向量。 4. 将P_c乘以相机内参矩阵K,得到归一化平面上的坐标P_n = K*P_c。 5. 根据相机的畸变参数,对P_n进行畸变校正,得到畸变校正后的归一化平面上的坐标P_u。 6. 将P_u转换为像素坐标系中的坐标,得到像素坐标P_p = (u,v),其中u和v分别是P_u的水平和垂直坐标。 下面是一个Python的示例代码: ```python import numpy as np import cv2 # 确定相机内参矩阵K和畸变参数D K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) D = np.array([k1, k2, p1, p2, k3]) # 确定要转换的世界坐标系中的点P P_w = np.array([x, y, z]) # 将P从世界坐标系转换到相机坐标系中 P_c = R.dot(P_w) + t # 将P_c乘以相机内参矩阵K,得到归一化平面上的坐标P_n P_n = K.dot(P_c) # 根据相机的畸变参数,对P_n进行畸变校正 P_u = cv2.undistortPoints(np.array([P_n]), K, D) # 将P_u转换为像素坐标系中的坐标 u, v = P_u[0][0] ``` 其中,fx、fy、cx和cy分别是相机内参矩阵K的元素,k1、k2、p1、p2和k3分别是相机的畸变参数,R是旋矩阵,t是平移向量,x、y和z是要转换的世界坐标系中的点的坐标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值