草庐IT

关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

我叫DP 2024-04-09 原文

关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解


前言

在项目中,研究标定时,像素坐标与轴位置的关系时,需要用到关于坐标系的转换。在此也就是找到世界坐标系与像素坐标系的转换关系。想理清楚故做如下记录。


一、各坐标系的含义

四坐标关系图如下:

图中:

  1. 世界坐标系(OW—XWYWZW):
    一个三维直角坐标系,以其为基准可以描述相机与待测物体的空间位置。世界坐标系可以根据实际情况自由确定,时常的会和机器运动坐标系重合。
  2. 相机坐标系(OC—XCYCZC):
    一个三维直角坐标系,原点位于镜头的光心处,x,y分别与像面的两边平行,Z轴为镜头光轴,与像面垂直。
  3. 图像坐标系(O—XY)
    一个二维直角坐标系,原点是光轴与像面的交点(又称主点),即图像的中心点,x,y分别与像面的两边平行。
  4. 像素坐标系(O1—uv)
    一个二维直角坐标系,反应了相机(CCD/CMOS)芯片中像素的排列情况。原点位于图像的左上角,下x,y分别平行与像面。像素坐标与图像坐标实际是平移的关系(下面会详细描述)。像素坐标中坐标轴单位为像素。

PS:为什么要有世界坐标?
自己的理解:确定唯一且不变的世界坐标系之后,后面所有的坐标系都可以通过与世界坐标的相对关系来进行转换。此时,当我移动或者旋转世界坐标系的时候,通过相对关系可以很快速的得到其他坐标系下的数据。

二、坐标系转换

1.世界坐标系与相机坐标系(旋转与平移)

如下图示:

两个坐标系都可以通过旋转加平移来互相转换。
即有:
[ X C Y C Z C 1 ] = [ R T 0 1 ] [ X w Y w Z w 1 ] \begin{bmatrix} X_C \cr Y_C\cr Z_C\cr 1 \end{bmatrix} = \begin{bmatrix} R&T \cr 0&1 \end{bmatrix} \begin{bmatrix} X_w \cr Y_w\cr Z_w\cr 1 \end{bmatrix} XCYCZC1 =[R0T1] XwYwZw1
或者:
[ X w Y w Z w 1 ] = [ R T 0 1 ] [ X C Y C Z C 1 ] \begin{bmatrix} X_w \cr Y_w\cr Z_w\cr 1 \end{bmatrix} = \begin{bmatrix} R&T \cr 0&1 \end{bmatrix} \begin{bmatrix} X_C \cr Y_C\cr Z_C\cr 1 \end{bmatrix} XwYwZw1 =[R0T1] XCYCZC1
其中R为3×3的旋转矩阵,T为3×1的平移矩阵。

旋转矩阵R:
而旋转我们可以把它拆分成以每个轴为旋转中心进行的三次旋转调整。
如下图所示:

重合z轴,并以Z轴为旋转中心旋转,旋转角度为θ。
点P(x,y,z)为在坐标系O—XYZ中的P点坐标
点P(x,y,z)为在坐标系O—XYZ中的P点坐标
所以可以有:

则有矩阵:

同理的,重合x轴并以x轴为旋转轴,旋转角φ。重合y轴并以y轴为旋转轴,旋转角ω。可以得到如下矩阵:

所以可以得到旋转矩阵R = Rθ RφRω

平移矩阵T
平移矩阵T是一个3×1的矩阵,数值分别为世界坐标系与相机坐标系的原点的差值。
故最终的转换关系为:

2.相机坐标系与图像坐标系(透视)

p与相机光心的连线op,与像面的交点就是空间点P在像平面上的投影。此时f为有效焦距则有:

3.图像坐标系与像素坐标系(缩放)

图像坐标系与像素坐标系转换是二维坐标系的转换,且两坐标系中并不存在夹角,则只存在平移与缩放操作。如下图:


其中,dx是X方向像素与距离的比例;dy是Y方向像素与距离的比例;u0是X方向的平移距离;v0是Y方向的平移距离。

4.世界坐标系与像素坐标系

综上所述可得到表达式:

外参数决定了相机的姿态。而内参数与相机的位置无关。内外参数可通过标定获取。

有关关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解的更多相关文章

  1. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  2. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  3. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  6. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  7. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  8. ruby - 找一些句子 - 2

    我想找到在某些文本中找到一些(让它是两个)句子的好方法。什么会更好-使用正则表达式或拆分方法?你的想法?应JeremyStein的要求-有一些例子示例:输入:ThefirstthingtodoistocreatetheCommentmodel.We’llcreatethisinthenormalway,butwithonesmalldifference.IfwewerejustcreatingcommentsforanArticlewe’dhaveanintegerfieldcalledarticle_idinthemodeltostoretheforeignkey,butinthis

  9. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  10. ruby-on-rails - 使用 Dragonfly 从 URL 分配图像 - 2

    我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ

随机推荐