tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]最近在做TOF相机相关的软件,近年来tof相机开始在手机,车载设备,VR等应用开始增多,产业也开始量化,是一个不错的3维相机的方向。简单介绍一下tof相机吧:TOF是Timeofflight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。具体原理介绍参考:http://w…

大家好,又见面了,我是你们的朋友全栈君。

最近在做TOF相机相关的软件,近年来tof相机开始在手机,车载设备,VR等应用开始增多,产业也开始量化,是一个不错的3维相机的方向。

简单介绍一下tof相机吧:TOF是Time of flight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。

具体原理介绍参考:http://www.eetrend.com/node/100074440

https://www.sohu.com/a/151732989_385809

http://www.cnblogs.com/Jessica-jie/p/6596450.html

tof相机又有单tof和RGB_D的分别,就是有只输出深度信息tof和输出三色图+深度数据的tof。反应到软件上深度信息其是一张二维的深度点云信息,也就是原始得到的信息是一张图像,每个点的值代表着相机和物体的距离的值,而不像二维相机是像素值。

tof相机原始深度数据到我们需要的3维点云数据的步骤:

1.对原始深度数据做初步校正和温度校准(tof相机的数据和相机的温度有关,这也是数据精度不高的一个原因)

2.图像的畸变校正。

3.深度图像坐标系(x0,y0,z0)转化成相机坐标系(x1,y1,z1),及把图像上的深度信息转化成以相机为原点的三维坐标系。

(没找到合适的参考资料,这个是介绍相机成像原理的,理论是一样的:https://blog.csdn.net/sunshine_zoe/article/details/73457686

4.相机坐标系(x1,y1,z1)转化成需要的世界坐标系(x2,y2,z2),及把相机的坐标系转化成项目需要的坐标系,也就是最终的点云的坐标系。

一般用到对坐标系进行旋转,缩放和平移,一般用矩阵的运算求,对于(x1,y1,z1)可以放入一个【4*1】的矩阵中,变换矩阵是一个【4*4】的方阵

(1)平移:原始矩阵左乘一个变换矩阵,其中x,y,z是原始矩阵,x’,y’,z’是结果

tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

(2)缩放:

tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

用上面的变换矩阵左乘原始矩阵(x1,y1,z1)的【4*1】矩阵即可。

(3)旋转

tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

参考这个博主的,写的很简明易懂:https://blog.csdn.net/swety_gxy/article/details/73087848

 

从图像坐标x0,y0,z0到相机坐标系x1,y1,z1,再转换到世界坐标系x2,y2,z2,第一个转换用标准的转换公式,第二个转换用旋转矩阵变化,包括相机的旋转和平移。

代码上可以写成如下的数学公式模型:

tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

这样就能得到最终需要的点云数据,可以用python的pylotly进行可视化。

python代码:

import plotly.plotly as py
import plotly.graph_objs as go

import numpy as np

x, y, z = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 200).transpose()
trace1 = go.Scatter3d(
    x=x,
    y=y,
    z=z,
    mode='markers',
    marker=dict(
        size=12,
        line=dict(
            color='rgba(217, 217, 217, 0.14)',
            width=0.5
        ),
        opacity=0.8
    )
)

x2, y2, z2 = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 200).transpose()
trace2 = go.Scatter3d(
    x=x2,
    y=y2,
    z=z2,
    mode='markers',
    marker=dict(
        color='rgb(127, 127, 127)',
        size=12,
        symbol='circle',
        line=dict(
            color='rgb(204, 204, 204)',
            width=1
        ),
        opacity=0.9
    )
)
data = [trace1, trace2]
layout = go.Layout(
    margin=dict(
        l=0,
        r=0,
        b=0,
        t=0
    )
)
fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='simple-3d-scatter')

使用plotly库的官网3d点云参考:https://plot.ly/python/3d-scatter-plots/

 

因本人水平有限,如果有哪里错误,希望大神指教。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141491.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入理解Java类加载器(ClassLoader)[通俗易懂]

    深入理解Java类加载器(ClassLoader)[通俗易懂]【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)http://blog.csdn.net/javazejian/article/details/73413292出自【zejian的博客】关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解

    2022年9月6日
    5
  • 后台管理系统登录思路「建议收藏」

    后台管理系统登录思路「建议收藏」一般来说我们不管是做后台管理,还是做普通项目,必不可少的其实就是登录。那么登录又是怎么实现的呢?废话不多说,上代码。首先我们把登录接口封装在一个文件里,如果这个接口有必备的参数,我们就得传参,然后在登录页引入调用。其次就是我们在登录页写登录框信息,这时候就需要接收接口必备的参数,那具体怎么接呢?先在data里设置两个放置参数的空数组。然后在登录信息框中外围prop接收,然后在信息框上v-model获取用户信息。在一个就是当我们填完用户信息的时候做什么逻辑:首先就是调用封装好的登录接口,其次在登录成功

    2022年5月8日
    75
  • python中的sys模块函数

    python中的sys模块函数Sys模块

    2022年7月18日
    19
  • BigDecimal 比较大小

    BigDecimal 比较大小BigDecimala=newBigDecimal(101);BigDecimalb=newBigDecimal(111);//使用compareTo方法比较//注意:a、b均不能为null,否则会报空指针if(a.compareTo(b)==-1){System.out.println(“a小于b”);}if(a.compareTo(b)==0){System.out.println(“a等于b”);}if(a.compareT.

    2022年6月3日
    41
  • DLL注入之使用SetWindowsHookEx注入「建议收藏」

    DLL注入之使用SetWindowsHookEx注入「建议收藏」原理分析:本次介绍的是使用全局钩子的方式进行注入。在Windows中可以使用SetWindowsHookEx来设置消息钩子,这个函数除了可以设置当前进程的钩子之外,它还可以设置全局钩子。全局钩子,顾名思义,即当前正在运行的进程都会被设置相应的钩子。//dwThreadId设置为0,则是全局钩子。HHOOKSetWindowsHookExA(intidHook,…

    2022年5月13日
    42
  • 万能乘法速算法大全_玩转扑克牌亲子游戏大全收藏 孩子爱上数学 快速提升计算能力…「建议收藏」

    万能乘法速算法大全_玩转扑克牌亲子游戏大全收藏 孩子爱上数学 快速提升计算能力…「建议收藏」难得有时间陪孩子,莫老师教您几种扑克牌的玩法,给宅家生活提供一点小乐趣,轻松玩游戏的同时,增加乐趣,提升小孩的数感和反应能力,同时可以提高孩子的计算能力!电脑比较卡,花了一天的时间整理的游戏大全,好的东西记得收藏分享。认识扑克牌1、大、小王可以抽掉,或者指定当作数字几,也可以当作万能牌(抽到的人可以任意指定1-13中的任何一个数字)使用。把A、J、Q、K分别看作1点,11点、12点、13点,其余…

    2022年6月3日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号