相机坐标系、像素坐标系转换

这篇具有很好参考价值的文章主要介绍了相机坐标系、像素坐标系转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系中的三维坐标投影到图像坐标系中的像素坐标。

相机内参矩阵通常表示为一个 3x3 的矩阵,具有以下形式:

fx  0   cx
0   fy  cy
0   0   1

其中 (cx, cy) 是图像的光学中心,表示图像平面中心对应于相机坐标系的投影坐标。fxfy 是相机在 xy 方向上的焦距,表示相机坐标系中的一个单位长度在图像坐标系中对应的像素数。如果图像的 xy 方向的焦距相等,则可以使用一个标量 f 来表示它们的平均值。

在计算机视觉和图形学中,像素坐标系和相机坐标系之间的转换是非常重要的,因为它允许我们将从相机中捕获的图像中的像素位置转换为三维场景中的物体位置。下面是一个简单的 C++ 代码示例,演示如何将像素坐标系中的坐标转换为相机坐标系中的坐标。

假设我们有一个相机,它在世界坐标系中的位置为 (cx, cy, cz),相机朝向的方向为 (fx, fy, fz)。假设我们有一个图像,它的分辨率为 (width, height),我们想要将像素坐标 (u, v) 转换为相机坐标系中的坐标 (x, y, z)

首先,我们需要计算像素坐标系中的坐标 (u, v) 对应的图像平面上的点 (px, py)。对于具有焦距 f 的相机,可以使用以下公式将像素坐标 (u, v) 转换为图像平面上的点 (px, py)

px = (u - width/2) / f
py = (v - height/2) / f

其中 widthheight 是图像的分辨率,f 是相机的焦距。

接下来,我们可以使用相机的内参矩阵将 (px, py) 转换为相机坐标系中的坐标 (x, y, z)

[x]   [fx  0   cx  0] [px]
[y] = [0   fy  cy  0] [py]
[z]   [0   0   1   0] [1 ]

其中 [fx fy cx cy] 是相机的内参矩阵,它包含相机的焦距和光学中心的位置。

下面是一个 C++ 函数,将像素坐标 (u, v) 转换为相机坐标系中的坐标 (x, y, z)

cv::Mat pixel2cam(const cv::Point2d& p, const cv::Mat& K) {
    cv::Mat pt_cam = cv::Mat::zeros(3, 1, CV_64F);

    pt_cam.at<double>(0, 0) = (p.x - K.at<double>(0, 2)) / K.at<double>(0, 0);
    pt_cam.at<double>(1, 0) = (p.y - K.at<double>(1, 2)) / K.at<double>(1, 1);
    pt_cam.at<double>(2, 0) = 1.0;

    return pt_cam;
}

其中 p 是像素坐标,K 是相机内参矩阵。这个函数返回一个 cv::Mat,它包含相机坐标系中的坐标 (x, y, z)。

 文章来源地址https://www.toymoban.com/news/detail-537535.html

到了这里,关于相机坐标系、像素坐标系转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(45)
  • 图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(32)
  • 相机基础(二)——坐标系转换

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

    2024年02月11日
    浏览(38)
  • 相机标定 >> 坐标系转换@内参、外参

    为了更好的理解标定,首先应熟悉各个坐标系。(坐标系图均取自百度百科) 该坐标系是以图像左上角为原点建立以像素为单位的二维坐标系u-v。(相对坐标系) 图像坐标系是以 O1 (是图像的主点,也即光轴与像平面的交点,一般就是像素坐标系的中点)为原点的二维坐标

    2024年02月12日
    浏览(35)
  • 相机的位姿在地固坐标系ECEF和ENU坐标系的转换

    在地球科学和导航领域,通常使用地心地固坐标系(ECEF,Earth-Centered, Earth-Fixed)和东北天坐标系(ENU,East-North-Up)来描述地球上的位置和姿态。如下图所示: ​地心地固坐标ecef和东北天ENU坐标系 在倾斜摄影测量过程中,通常涉及这两个坐标系的转换,将相机的位姿互转,

    2024年02月12日
    浏览(28)
  • C++ api调用realsense d435相机,将坐标转换到相机坐标系

            在使用Intel RealSense相机进行编程时,首先需要创建一个 rs2::pipeline 对象,并使用该对象启动相机的数据流。在启动数据流后,相机将根据配置的参数生成相应的数据流,例如深度、彩色或红外流,并将这些数据传输到计算机中。 RS2_STREAM_DEPTH :指定启用的流类型为

    2024年02月16日
    浏览(29)
  • 齐次坐标变换的理解以及在无人机相机定位坐标系转换中的应用

    4*4矩阵的右边三个数表示平移,如果原来的向量u的w=0,那么就是u+(ai+bj+ck) 对应xyz三个轴的循环变换,注意负号的位置 用描述空间一点的变换方法来描述物体在空间的位置和方向。 先变换的矩阵乘在右边。 A p = B p + A p B o {}^{A}p={}^{B}p+{}^{A}p_{B_{o}} A p = B p + A p B o ​ ​ 从

    2024年04月15日
    浏览(43)
  • 【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

      这个问题来自于我想要使用colmap的稀疏重建结果,然后发现由于相机坐标系的定义没弄清楚,导致我获取的结果存在问题。    1 问题引出   下面先从我们还不知道坐标系定义的视角开始理解,引出问题所在。使用的是一份无人机影像数据,共有59张影像:   下图

    2024年02月06日
    浏览(118)
  • Nuscenes——实现世界坐标3D点投影到像素坐标系中

    首先在 mmdetection3d/tools/data_converter/nuscenes_converter.py 中, get_2d_boxes() 可以直接从nuscenes原始sample数据中获取已标注的3D box信息,因此该函数就可以实现整体投影过程。 投影原理 投影过程分为以下几步: 世界坐标系 —— Ego坐标系(自身) 这里需要世界坐标系原点变换到自身的

    2024年02月11日
    浏览(28)
  • 6_相机坐标系_相机4个坐标系详述

            相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣,所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探

    2024年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包