前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >奥比中光相机的深度图像数据(TUM数据集)

奥比中光相机的深度图像数据(TUM数据集)

作者头像
云深无际
发布于 2021-12-01 13:59:54
发布于 2021-12-01 13:59:54
3K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

这篇文章写出来的东西,细节太多了。。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/ParikaGoel/KinectFusion

这个库是从Kinect相机中实时的重建环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf

实现的论文。

德国慕尼黑工业大学分享的RGBD数据集。

下面是格式的样子:

1. rgb.txt 和 depth.txt 记录了各文件的采集时间和对应的文件名。

2. rgb/ 和 depth/目录存放着采集到的 png 格式图像文件。彩色图像为八位三通道,深

度图为 16 位单通道图像。文件名即采集时间。

3. groundtruth.txt 为外部运动捕捉系统采集到的相机位姿,格式为

(time, t x , t y , t z , q x , q y , q z , q w ),

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://vision.in.tum.de/data/datasets/rgbd-dataset/download

这个链接是全部的数据集下载位置。

下载一个最小的看看

在下载了

这就是内容

解压以后就是这样的

地面轨迹

深度图

RGB的图

ROSbang的数据,我觉得Intel的工具可以一战

下载下来

ROS 包格式,这是一种用于将 ROS 消息存储在文件中的日志记录格式。使用这种格式的文件称为包,文件扩展名为.bag。包被rosbag和rqt_bag包中的工具记录、回放和一般操作。

解压后的文件

  • 彩色图像以 PNG 格式存储为 640x480 8 位 RGB 图像。
  • 深度图以 PNG 格式存储为 640x480 16 位单色图像。
  • 颜色和深度图像已经使用 PrimeSense 的 OpenNI 驱动程序预先注册,即颜色和深度图像中的像素已经 1:1 对应。
  • 深度图像按5000的因子进行缩放,即深度图像中5000的像素值对应距离相机1米,10000到2米距离等。像素值为0表示缺失值/没有数据。

已经被处理过了

将真实轨迹作为文本文件提供,其中包含相机在固定坐标系中的平移和方向

  • 文本文件中的每一行都包含一个姿势。
  • 每行的格式为' timestamp tx ty tz qx qy qz qw '
  • 时间戳(浮点数)给出自 Unix 纪元以来的秒数。
  • tx ty tz (3 个浮点数) 给出彩色相机的光学中心相对于运动捕捉系统定义的世界原点的位置。
  • qx qy qz qw(4 个浮点数)以单位四元数的形式给出彩色相机的光学中心相对于运动捕捉系统定义的世界原点的方向。
  • 该文件可能包含必须以“#”开头的注释。

从 2D 图像到 3D 点云的转换工作如下。请注意,每个相机的焦距 (fx/fy)、光学中心 (cx/cy)、畸变参数 (d0-d4) 和深度校正因子都不同。

下面的 Python 代码说明了如何根据像素坐标和深度值计算 3D 点:

中文的注释

英文

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://dev.intelrealsense.com/docs

Intelrealsense的文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/IntelRealSense/librealsense/releases

在这里下载播放工具

这么大

插我的R200没有反应,bang也读取不了

ROS包出错

但是会识别自带的摄像头,所以RealSense的相机也是UVC的驱动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.mrpt.org/tutorials/programming/maths-and-geometry/2d_3d_geometry/

在惆怅之余,找到一个可以学习数学知识的链接:

然是不问因果的学

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://svncvpr.in.tum.de/cvpr-ros-pkg/trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools/

这个地址里面是一些关于处理RGBD的PY脚本。

Kinect 以不同步的方式提供颜色和深度图像。这意味着来自彩色图像的时间戳集与深度图像的时间戳不相交。因此,我们需要某种方式将彩色图像与深度图像相关联。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse
import sys
import os
import numpy


def read_file_list(filename):
    """
    Reads a trajectory from a text file. 

    File format:
    The file format is "stamp d1 d2 d3 ...", where stamp denotes the time stamp (to be matched)
    and "d1 d2 d3.." is arbitary data (e.g., a 3D position and 3D orientation) associated to this timestamp. 

    Input:
    filename -- File name

    Output:
    dict -- dictionary of (stamp,data) tuples

    """
    file = open(filename)
    data = file.read()
    lines = data.replace(",", " ").replace("\t", " ").split("\n")
    list = [[v.strip() for v in line.split(" ") if v.strip() != ""]
            for line in lines if len(line) > 0 and line[0] != "#"]
    list = [(float(l[0]), l[1:]) for l in list if len(l) > 1]
    return dict(list)


def associate(first_list, second_list, offset, max_difference):
    """
    Associate two dictionaries of (stamp,data). As the time stamps never match exactly, we aim 
    to find the closest match for every input tuple.

    Input:
    first_list -- first dictionary of (stamp,data) tuples
    second_list -- second dictionary of (stamp,data) tuples
    offset -- time offset between both dictionaries (e.g., to model the delay between the sensors)
    max_difference -- search radius for candidate generation

    Output:
    matches -- list of matched tuples ((stamp1,data1),(stamp2,data2))

    """
    first_keys = first_list.keys()
    second_keys = second_list.keys()
    potential_matches = [(abs(a - (b + offset)), a, b)
                         for a in first_keys
                         for b in second_keys
                         if abs(a - (b + offset)) < max_difference]
    potential_matches.sort()
    matches = []
    for diff, a, b in potential_matches:
        if a in first_keys and b in second_keys:
            first_keys.remove(a)
            second_keys.remove(b)
            matches.append((a, b))

    matches.sort()
    return matches


if __name__ == '__main__':

    # parse command line
    parser = argparse.ArgumentParser(description='''
    This script takes two data files with timestamps and associates them   
    ''')
    parser.add_argument(
        'first_file', help='first text file (format: timestamp data)')
    parser.add_argument(
        'second_file', help='second text file (format: timestamp data)')
    parser.add_argument(
        '--first_only', help='only output associated lines from first file', action='store_true')
    parser.add_argument(
        '--offset', help='time offset added to the timestamps of the second file (default: 0.0)', default=0.0)
    parser.add_argument(
        '--max_difference', help='maximally allowed time difference for matching entries (default: 0.02)', default=0.02)
    args = parser.parse_args()

    first_list = read_file_list(args.first_file)
    second_list = read_file_list(args.second_file)

    matches = associate(first_list, second_list, float(
        args.offset), float(args.max_difference))

    if args.first_only:
        for a, b in matches:
            print("%f %s" % (a, " ".join(first_list[a])))
    else:
        for a, b in matches:
            print("%f %s %f %s" % (a, " ".join(
                first_list[a]), b-float(args.offset), " ".join(second_list[b])))

配准代码

深度图像已经与彩色图像配准,因此深度图像中的像素已经与彩色图像中的像素一一对应。因此,生成彩色点云很简单。

脚本使用方法

就一个函数

以上都可以从:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://svncvpr.in.tum.de/cvpr-ros-pkg/trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools/

获得

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://vision.in.tum.de/data/datasets/rgbd-dataset/tools#evaluation

这些是文档:

怎么说呢,就是RGB和深度的图像采集回来以后,要进行一步融合操作,就好像是组装,在一张图像里面写入更多的信息。

接着按照规矩是对融合后的成果进行评价,但是这里就不加这步了。接着就可以做高层的点云展示啥的。

反正我也是给搞研究,这里就插点如何生成点云的算法操作,注意是一个rgb和图和一个深度图,生成一个点云图。

格式上面是:png+png=PLY format

最后这个格式,我最后补格式要求

做实验前,先准备一下

由于RGB和Depth是一一对应的关系,所以分辨率是一样的。深度图像 = 普通RGB三通道彩色图像 + Depth Map。

包含与视点场景对象表面距离有关信息的图像通道,通道本身类似于灰度图像,每个像素值是传感器测出距离物体的实际距离

分类

  • 与相机距离成比例:较近的表面较暗; 其他表面较轻
  • 与标称平面的距离相关:靠近焦平面的表面较暗; 远离焦平面的表面更轻

其实这个图是来自于一本书中

用深度相机获取到了深度图depth map,相当于黑白图像有两个通道,灰度值和深度值,彩色图像有四个通道RGBD。

图像深度 是指存储每个像素所用的位数,也用于量度图像的色彩分辨率。

图像深度 确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级。比如一幅单色图像,若每个像素有8位,则最大灰度数目为2的8次方,即256。一幅彩色图像RGB三通道的像素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种。

  例如:

  一幅画的尺寸是1024*768,深度为16,则它的数据量为1.5M。

  计算如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1024×768×16bit = 
  (1024×768×16)/8 Byte = 
  [(1024×768×16)/8]/1024 KB = 
  1536 KB = 
  {[(1024×768×16)/8]/1024}/1024 MB 
  = 1.5 MB

一个函数就完事了

“”“”“”是Python的说明文档,说了输入和输出

下面是使用了Image的打开方法

PIL库的方法

这里可以看作是处理前的准备,一定要保证分辨率的一致,我写个脚本验证一下。

这里先改名字

写脚本验证一下

都一样的

接着使用一个列表来放我们的点云数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
focalLength = 525.0
centerX = 319.5
centerY = 239.5
scalingFactor = 5000.0

4参数

  • 深度图像按5000的因子进行缩放,即深度图像中5000的像素值对应距离相机1米,10000到2米距离等。
  • 像素值为0表示缺失值/没有数据。
  • 16bit的png是5000

这句是我们的精华

某点像素坐标(u , v)及其对应深度值depth,根据相机参数以及以下公式,可以求得该点的相机坐标(x , y , z)为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def depth2mi(depthValue):

    return depthValue * 0.001


def depth2xyz(u, v, depthValue):
    fx = 361.1027
    fy = 361.8266
    cx = 258.4545
    cy = 212.1282

    depth = depth2mi(depthValue)

    z = float(depth)
    x = float((u - cx) * z) / fx
    y = float((v - cy) * z) / fy

    result = [x, y, z]
    return result
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#深度图存入np数组
arr = np.array(depth)
#彩色图上某点像素坐标(u,v)在对齐深度图的深度值
depthValue =float(arr3[v, u])
coordinate = depth2xyz(u, v, depthValue)

上面是另一种实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
随时随地能写代码, vscode.dev 出手了
今天偶然看到了 VSCode 官方发布了一条激动人心的 Twitter,vscode.dev[1] 域名上线了!
秋风的笔记
2021/10/26
1.3K0
Web版VS Code上线:最好用的IDE终于发布网页版,然而微软发完秒删
机器之心报道 编辑:蛋酱、小舟 Visual Studio Code 发布了 Web 版本?还没有,发完又删了。 微软似乎「官宣」了编辑器 Visual Studio Code 的 Web 版本,但又很快删除了博客。最近,这一动态引起了开发者社区的热议。 9 月 1 日,微软在 Azure 产品更新列表中介绍了这项新服务,但很快就删掉了内容。这项服务和目前 GitHub 基于 Web 的编辑器差不多。使用免费的 Web 编辑器服务,任何 GitHub 用户都可以导航到 GitHub 文件和源代码存储库,
机器之心
2023/03/29
1.3K0
Web版VS Code上线:最好用的IDE终于发布网页版,然而微软发完秒删
微软低调发布Visual Studio Code for the Web预览
根据外媒 The Register 的报道,微软在一篇已删除(估计是发布早了)的文章中宣布了 Visual Studio Code for the Web 的公共预览版本。
会呼吸的Coder
2021/09/24
9670
解锁GitHub新姿势 · 只需一个"."打开Vscode在线编辑代码
最近GitHub 官方推出的 github.dev[1]。只要访问下面的网址,你就能在浏览器里面,使用VS Code编辑指定仓库。可以点击这里[2]体验一下。
公众号: 云原生生态圈
2021/09/02
7K0
GitHub 官方出的 Online VSCode 编辑器太香了!
之前我写了一篇文章《爽爆了!我搞了一个网页版 VS Code》介绍过自己搭建一个 Online VSCode 编辑器,虽然搭建过程稍显复杂,但用起来是真的挺爽的。另外还有一篇文章《介绍一个十分牛逼的 GitHub 看代码神器》介绍了可以一键打开一个 Online VSCode 编辑器的方式,就是在 github.com 后面加 1s,不过这个 VSCode 编辑器不是官方支持的,而且不能编辑和保存代码,稍显鸡肋。
崔庆才
2021/10/08
27K0
GitHub 官方出的 Online VSCode 编辑器太香了!
新神器,平板写代码!出差不用带电脑!
近日,微软推出了 Visual Studio Code Server ,这是一项在远程开发机器上运行的后端服务。用户可以将该服务安装在任何位置(本地开发机器、云 VM 等),然后使用 VS Code 网页版(vscode.dev)通过浏览器安全地连接到该远程计算机上进行开发,无需设置麻烦的 SSH 或 https 。
搜云库技术团队
2023/03/15
3.2K0
新神器,平板写代码!出差不用带电脑!
重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
昨天(北京时间 2019 年 11 月 4 日),在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版!
GitHubDaily
2019/11/06
1.2K0
重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
突破极速,蚂蚁研发团队倾力打造的魅力IDE框架 CodeBlitz
Codeblitze 是由蚂蚁云研发团队打造的基于 OpenSumi 的纯前端 IDE 基础框架,相比于我们传统的 Cloud IDE,最大的特点是无需容器,只需一个浏览器就能运行 Web IDE。在保证体验一致的基础之上具备启动快,定制灵活、接入方便等特点。
Tinywan
2023/09/18
6010
突破极速,蚂蚁研发团队倾力打造的魅力IDE框架 CodeBlitz
网页版VS Code来了,特斯拉Xbox手机都能用,随时随地写bug
你们常说的iPad买前生产力,买后爱奇艺,这下iPad也终于能coding,再也没理由摸鱼了。
量子位
2021/11/05
1.9K0
在 Kubernetes 集群上部署 VSCode
Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Windows、macOS 和 Linux。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言(如 C++、C#、Java、Python、PHP、Go)和运行时(如 .NET 和 Unity)提供了丰富的扩展生态系统.
小陈运维
2022/06/13
8640
VS Code 1.63 版本又带来哪些新特性?
Visual Studio Code 1.63 现已发布。Visual Studio Code 是一个开源的代码编辑器,支持 IntelliSense、调试、Git 和代码片断。可在 Windows、Linux 和 macOS 上下载使用。支持常见的脚本和编程语言,还可以通过安装扩展来获得更多语言和功能的支持。
逆锋起笔
2021/12/16
8540
VS Code 1.63 版本又带来哪些新特性?
浏览器上写代码,4核8G微软服务器免费用,Codespaces真香
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 一图胜千言 先上图,下面是欣宸在自己的iPad Pro上用浏览器写代码的实拍,右下方可见SpringBoot应用启动成功的日志 [image-20220527072550909.png] 您可能会觉得平板配置不高,所以写代码和运行都会卡顿,个人的实际体验是可以流畅进行,因为编译和运行这些耗费资源的操作都是在微软的云服务器上进行的,服务器的配置是4核8G内存32G硬
程序员欣宸
2022/05/28
4.4K0
浏览器上写代码,4核8G微软服务器免费用,Codespaces真香
推荐一款支持在浏览器上运行 VS Code 的服务端神器 Code-Server
VS Code 是微软推出的开源代码编辑器,根据 Stackflow 2018 年的统计,它是目前最流行的代码编辑器。VS Code 是一种基于 Electron 开发的桌面端应用。
iMike
2019/07/30
7.5K1
将VSCode部署到服务器,打开浏览器,上号!开始「云代码」!
VSCode有一个服务器版本, 支持私有化部署, 部署成功后, 可以通过浏览器打开VSCode编辑器, 随时随地开环境写代码, 无需在多台机器重复部署环境, 由于所有数据都保存在服务器, 可以完全不用考虑代码同步问题, 2021年能云游戏也能云代码
zhaoolee
2021/07/12
9.1K0
微软热门开源项目及代码库地址
非常流行的跨平台代码编辑器,提供全面的编辑和调试支持、可扩展性模型以及与现有工具的轻量级集成。
Edi Wang
2019/07/15
1.8K0
微软热门开源项目及代码库地址
文件批量重命名之在线版本-前端的本地文件操作
批量文件重命名是一个低频但时不时又会遇到的需求,非常适合在线工具的形式,即用即走。
jgrass
2024/12/25
1250
牛逼!这款神器能在浏览器跑 VS Code,让你随时随地写代码!
最近看到 iPadOS 出来了,各种牛逼的操作真的很有吸引力,于是咬咬牙买了 iPad air。
GitHubDaily
2019/10/22
1.6K0
牛逼!这款神器能在浏览器跑 VS Code,让你随时随地写代码!
​推荐一个神器!可以在浏览器运行 Node.js
在最新的 Google I/O 主题演讲中 stackblitz 向大家介绍了他们与 Next.js 和 Google 团队合作开发的在线 IDE WebContainers ,真的是非常惊艳。
小丑同学
2021/07/01
1.7K0
​推荐一个神器!可以在浏览器运行 Node.js
28 个提升开发幸福度的 VsCode 插件
Quokka.js 是一个用于 JavaScript 和 TypeScript 的实时运行代码平台。这意味着它会实时运行你输入后的代码,并在编辑器中显示各种执行结果,建议亲自尝试一下。
前端小智@大迁世界
2020/11/03
16.4K0
28 个提升开发幸福度的 VsCode 插件
从 VSCode 看大型 IDE 技术架构
为什么要去看 VSCode?因为我们团队在做的中后台快速研发平台云凤蝶也是一款类似 Web IDE 形态的产品:
Nealyang
2020/02/19
2K0
推荐阅读
相关推荐
随时随地能写代码, vscode.dev 出手了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档