相机针孔模型----从世界坐标系,到相机坐标系,再到图像物理坐标系,最后到图像像素坐标系的转换过程解析

本文详细阐述了针孔相机模型中从世界坐标系到图像像素坐标系的转换过程,包括外参矩阵、内参矩阵的作用,以及径向和切向畸变的校正。通过旋转和平移将世界坐标转换为相机坐标,接着考虑焦距和畸变系数转至图像物理坐标,最后通过像素转换矩阵得到图像像素坐标。
部署运行你感兴趣的模型镜像

       看了很多讲解针孔相机模型中从世界坐标系--->到相机坐标系——>图像坐标系的文章,心里的疑惑也逐渐展开,现在总结一下自己的理解:

       世界坐标系、相机坐标系、图像物理坐标系、图像像素坐标系在我的另一篇博文里已经详细叙述。http://blog.youkuaiyun.com/wangxiaokun671903/article/details/37935113。他们之间的关系如下图所示:




从世界坐标系到图像坐标系的转换过程如下:

 

1、世界坐标系通过外参矩阵转换到相机坐标系

       空间中一点的世界坐标系为:[Xw,Yw,Zw]T,当把它转换到相机坐标系的时候,先把它加一维用齐次坐标来表示它(这样就方便对它本身进行平移操作)。左乘一个3x4的外参矩阵,从世界纵坐标系转换到相机坐标系。


       [Xc,Yc,Zc]T表示相机坐标。[Xw,Yw,Zw,1]T表示归物体所在的世界坐标。R表示旋转矩阵,T表示平移矩阵。

 

2、相机坐标系通过内参矩阵转换到图像像素坐标系:这一步是通过两步完成的。


     

    (1),径向畸变和切向畸变:

    

     其中,k1,k2,k3径向畸变系数,p1,p2是切向畸变系数。畸变发生在相机坐标系转图像物理坐标系的过程中。操作的对象时相机坐标系。

        这一步是加入畸变的过程,如果忽略这一步,可以直接跳到下一步。


   (2),相机坐标系通过焦距对角矩阵和畸变系数转换到图像物理坐标系;

由图相似三角形可得:

       f表示焦距。[Xc,Yc,Zc]T表示相机坐标。[x,y,1]T表示归一化后的图像物理坐标。

 

    (3),图像物理坐标系通过像素转换矩阵转换到像素坐标系中。这一步是在同一个平面上做的,只不过先换了表示单位,又换了坐标原点的位置。


     dx和dy表示:x方向和y方向的一个像素分别占多少个(可是小数)长度单位。u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数

 

3、转换过程总公式如下





您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

像素坐标系世界坐标系转换通常需要借助相机标定来实现,其中涉及多个坐标系转换,主要包括像素坐标系图像坐标系图像坐标系相机坐标系,以及相机坐标系世界坐标系转换。 ### 像素坐标系图像坐标系 像素坐标系是以图像左上角为原点,单位是像素图像坐标系图像中心为原点,单位通常是长度单位(如毫米)。从像素坐标系 $(u, v)$ 到图像坐标系 $(x, y)$ 的转换,需要考虑像素物理尺寸和图像原点的偏移。假设像素物理尺寸为 $(dx, dy)$,图像中心在像素坐标系下的坐标为 $(u_0, v_0)$,则转换公式为: ```python import numpy as np # 像素坐标 u, v = 100, 200 # 像素物理尺寸 dx, dy = 0.1, 0.1 # 图像中心像素坐标 u0, v0 = 320, 240 # 转换图像坐标 x = (u - u0) * dx y = (v - v0) * dy ``` ### 图像坐标系相机坐标系 图像坐标系相机坐标系转换需要考虑相机的焦距 $f$。在针孔相机模型下,假设图像平面位于 $z = f$ 处,图像坐标 $(x, y)$ 转换相机坐标 $(X_c, Y_c, Z_c)$ 的公式为: ```python # 焦距 f = 500 # 相机坐标 X_c = (x * Z_c) / f Y_c = (y * Z_c) / f Z_c = 1000 # 假设相机到物体的距离 ``` ### 相机坐标系世界坐标系 相机坐标系世界坐标系转换相机的外参决定,外参包括旋转矩阵 $R$ 和平移向量 $t$。相机坐标 $(X_c, Y_c, Z_c)$ 转换世界坐标 $(X_w, Y_w, Z_w)$ 的公式为: ```python # 旋转矩阵 R = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) # 平移向量 t = np.array([100, 200, 300]) # 相机坐标向量 X_c_vector = np.array([X_c, Y_c, Z_c]) # 转换世界坐标 X_w_vector = np.dot(R, X_c_vector) + t X_w, Y_w, Z_w = X_w_vector ``` 综合上述步骤,从像素坐标系世界坐标系转换可以通过依次执行上述转换步骤来完成。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值