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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 税控盘开票助手Excel导入或ERP导入开票明细接口使用说明(使用手册)

    税控盘开票助手Excel导入或ERP导入开票明细接口使用说明(使用手册)税控盘开票助手使用说明(使用手册)写这遍文章的目的是方便以后个人使用,做个笔记记录。首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据、ERP系统导入到税控盘开票软件中。解决企业开票明细多、开票数据量大、手工输入明细慢、开票赋码不方便等问题,通过使用开票助手可以提高开票人员工作效果,工作产能,减少手工输入带来的差错。可以使用的功能有:开票明细

    2022年5月27日
    241
  • 计算机可靠度计算公式,可靠性计算公式大全

    计算机可靠度计算公式,可靠性计算公式大全《可靠性计算公式大全》由会员分享,可在线阅读,更多相关《可靠性计算公式大全(3页珍藏版)》请在人人文库网上搜索。1、计算机系统的可靠性是制从它开始运行(t=0)到某时刻t这段时间内能正常运行的概率,用R(t)表示所谓失效率是指单位时间内失效的元件数与元件总数的比例,以表示,当为常数时,可靠性与失效率的关系为:()=e-u(u为次方)两次故障之间系统能够正常工作的时间的平均值称为平均为故障时…

    2022年7月26日
    10
  • docker启动和关闭命令

    docker启动和关闭命令下面红色代表的centos6.5的命令

    2022年5月17日
    50
  • 女朋友让我深夜十二点催她睡觉,我有Python我就不干

    用Python的pyautogui库自动操作电脑,并用apscheduler设置定时任务,实现定时发送微信功能。

    2022年4月15日
    55
  • pip install 使用国内镜像

    pip install 使用国内镜像让PIP源使用国内镜像,提升下载速度和安装成功率。对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率。国内源:新版ubuntu要求使用https源,要注意。清华:https://pypi.tuna.tsinghua.edu.cn/…

    2022年6月8日
    33
  • JS它DOM

    JS它DOM

    2022年1月6日
    48

发表回复

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

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