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


相关推荐

  • 异步fifo的工作原理(netty异步方法)

    FPGA(一):异步FIFO实现(包含源码和仿真文件)一、异步FIFO的重要参数及其作用1、FIFO:FirstInputFirstOutput,即先入先出队列,本质是RAM。FIFO有几个最重要的参数:2、wr_clk:写时钟,所有与写有关的操作都是基于写时钟;3、rd_clk:读时钟,所有与读有关的操作都是基于读时钟;4、FIFO_WIDTH:FIFO的位宽,即FIFO中每个地址对应的数据的位宽;5、FIFO_DEPTH:FIFO的深度,即FIFO中能存入多少个(位宽为FIFO_

    2022年4月13日
    124
  • 计算机的历程_计算机的发展史简介课件

    计算机的历程_计算机的发展史简介课件一、史前时代:1623——1895

    2022年10月19日
    0
  • 三十六:Redis过期键删除策略[通俗易懂]

    redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典:❑过期字典的键是一个指针,这个指针指向键空间中的某个键对象(也即是某个数据库键)。❑过期字典的值是一个longlong类型的整数,这个整数保存了键所指向的数据库键的过期时间——一个毫秒精度的UNIX时间戳。❑定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过…

    2022年4月13日
    43
  • ssl证书怎么安装到服务器_iis ssl证书

    ssl证书怎么安装到服务器_iis ssl证书Zimbra邮件服务器SSL证书部署

    2022年4月21日
    61
  • FPS游戏:实现GDI方框透视「建议收藏」

    FPS游戏:实现GDI方框透视「建议收藏」FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视

    2022年7月1日
    153
  • PriorityQueue源码分析

    PriorityQueue源码分析来源:Java编程的逻辑1前导将新的头部与两个孩子节点中较小的比较,如果不大于该孩子节点,则满足堆的性质,结束,否则与较小的孩子进行交换,交换后,再与较小的孩子比较和交换,一直到没有孩子,或者不大于两个孩子节点。这个过程我们般称为siftdown与父节点比较,如果大于等于父节点,则满足堆的性质,结束,否则与父节点进行交换,然后再与父节点比较和交换,直到父节点为空或者大于等于父节点;称之为…

    2022年6月8日
    28

发表回复

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

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