深度图与RGB彩色图的对准(内附Python代码)

这篇具有很好参考价值的文章主要介绍了深度图与RGB彩色图的对准(内附Python代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用RealSense深度相机前,必须把深度相机和RGB相机对准了使用。。。不然会导致采集到的图像不对齐(如下图所示):

深度图像与rgb图像配准,数码相机        深度图像与rgb图像配准,数码相机

 

 左边是RGB图像,右边是深度图像。

 关于RealSense相机的校准,网上已经有了许多教程,这里就不再赘述。本文主要内容是如何处理已采集好的未对准的图像,以避免之前采集的一堆实验数据作废。搜索了很多教程,但是没找到现成的代码,唯一现成的代码是用C++写的。。。由于我太废物只会最简单的Python,因此决定自己写一版Python的代码。

代码的撰写思路

先简单讲述一下过程。以下是从别的教程复制粘贴的:

1、获取Kinect的深度图像;

2、获取RGB摄像头的图像;

3、为深度图像中的每一个像素附上对应的RGB颜色,比如你要给坐标为(x, y)的深度图像素附上颜色,具体步骤如下;

1)构造一个三维向量p_ir = (x, y, z),其中x,y是该点的像素坐标,z是该像素的深度值;

2)用Kinect内参矩阵H_ir的逆,乘以p_ir得到对应的空间点坐标P_ir,具体公式见上文第四部分(配准);

3)由于P_ir是该点在Kinect坐标系下的坐标,我们需要将其转换到RGB摄像头的坐标系下,具体的,就是乘以一个旋转矩阵R,再加上一个平移向量T,得到P_rgb;

4)用RGB摄像头的内参矩阵H_rgb乘以P_rgb,得到p_rgb,p_rgb也是一个三维向量,其x和y坐标即为该点在RGB图像中的像素坐标,取出该像素的颜色,作为深度图像中对应像素的颜色;

5)对深度图像中的每一个像素都做上述操作,得到配准后的深度图。

深度图与RGB图对齐原理

其原理就是:

  1. 深度图上的2D点转换到世界坐标的3D点(这里设为点A)
  2. 将点A的世界坐标的3D点投影到彩色图像上,获取点A在RGB图像上的坐标(x,y)
  3. 提取A点的RGB三通道的值,将其赋予到原深度图上点A的坐标上。

最后的效果是深度图像不变,RGB图像对齐到深度图像

注意:这里只能让RGB图像去对齐到深度图像而不能反过来,因为在第1步将图像上的点转化为世界坐标的3D点这里,只有深度图像内含的深度信息才能实现。RGB图像不含深度信息因此无法做到RGB图像不变,深度图像去对齐到RGB。

代码实现

下面就是Python代码的实现。

import numpy as np
import cv2

# 获取RGB与深度图像信息。因为采集数据时是直接将RGB和深度信息一起存储到npy文件里,因此这里将RGB三通道和D深度通道的信息分开存储
arr = np.load('Data.npy')
b, g, r, d = cv2.split(arr)
depth_img = d  # 深度信息
rgb_img = cv2.merge([b, g, r])  # RGB信息

# 深度相机的外参矩阵(包括旋转矩阵与传递矩阵), 这里是通过RealSense2的函数 get_extrinsics_to(profile) 获得后直接赋值的,具体可网上搜索教程
R = np.array([(0.999993, 0.00372933, -0.000414306), (-0.00372927, 0.999993, 0.000135122), (0.000414807, -0.000133576, 1)])
T = np.array([-0.0148581, -8.0544e-05, 2.60393e-05])

# R1 = H_rgb@R@np.linalg.inv(H_depth)
result = np.zeros([480, 640, 3])

for row in range(480):
    for col in range(640):
        V_depth = depth_img[row][col]
        p_depth = np.array([col, row, 1])
        p_rgb = V_depth/1000*R@p_depth + T/1000

        X = p_rgb[0]//p_rgb[2]
        Y = p_rgb[1]//p_rgb[2]
        if (0 <= X < 640) and (0 <= Y < 480):
            result[row][col] = rgb_img[int(Y)][int(X)]
        else:
            result[row][col] = np.array([0, 0, 0])


# cv2.imwrite('OMG/RGB.jpg', rgb_img)
cv2.imwrite('OMG/RGB2.jpg', result)

这里的Python代码是照着这篇教程里的C++代码修改的:

kinect 2.0 SDK学习笔记(四)--深度图与彩色图对齐_深度相机rgb图和深度图对齐原理_jiaojialulu的博客-CSDN博客

最后得到的效果并不是很理想。但是由于时间有限,懒得进行进一步优化。猜测原因如果不是代码问题的话,就是之前深度相机没和RGB相机对准,两个相机范围相差过大导致的。欢迎大神找出原因并指导一下我(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )

深度图像与rgb图像配准,数码相机

 

参考文章:​​​​​​​Kinect深度图与RGB摄像头的标定与配准_aipiano的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-721277.html

到了这里,关于深度图与RGB彩色图的对准(内附Python代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

    官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) CSDN数据集免费下载 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)

    2024年02月04日
    浏览(32)
  • RGB空间中的彩色图像分割原理及其python实现

    ⭐️ 为尊重原创性 !转载请注明出处:©️ Sylvan Ding’s Blog 本文论述了基于欧式距离和曼哈顿距离的彩色图像分割算法,并用python实现了各个算法。之后将二者的优势结合,提出了改进后的曼哈顿距离算法:基于 加权曼哈顿距离 的彩色图像分割算法,在分割效果和速度上超

    2023年04月22日
    浏览(37)
  • 彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)

    简介:         把一个彩色图像,也称为 RGB(红,绿,蓝)图像转化为灰度图像的行为称为彩色图像灰度化处理。也就是由原来的三个通道 RGB 转化为一个通道 YCrCb(从三个亮度值转换为一个亮度值), 也即 YUV(亮度,饱和度)的过程。常见的 24 位深度彩色图像 RGB888 中的每

    2024年01月25日
    浏览(34)
  • opencv 05 彩色RGB像素值操作

    RGB 模式的彩色图像在读入 OpenCV 内进行处理时,会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点,并将像素点以行为单位存储在 ndarray 的列中。例如, 有一幅大小为 R 行×C 列的原始 RGB 图像,其在 OpenCV 内以 BGR 模式的三维数组形式存储, 如图 2-7 所示 可

    2024年02月16日
    浏览(30)
  • python基于opencv和tkinter实现人脸识别【内附完整代码】

    人脸识别技术已经在许多领域得到了广泛应用,例如安防、金融、医疗等等。人脸识别可以帮助我们识别和验证一个人的身份,这是一项非常重要的任务。本篇博客将介绍如何使用Python和OpenCV库进行人脸识别。我们将学习如何使用OpenCV中的人脸检测器检测图像中的人脸,如何

    2023年04月14日
    浏览(29)
  • 10个Python绘画表白代码【内附源码,再不收藏你只能单身了】

    发现一些很好玩的画图小项目,今天分享给大家,教你怎样用Python画一朵玫瑰花、时钟、爱心、太阳花、月饼、进阶自定义爱心、小猪佩奇、星空、超梦幻的蓝色背景樱花等大家快来学习吧。 pycharm 、python

    2024年02月12日
    浏览(27)
  • Python语音合成-第三方库(gTTs/pyttsx3/speech)横评(内附使用代码)

    由于项目需要, 我需要 将文字转换为语音 , 那么第一步就要进行调研 语音合成(text to speech),简称TTS 。是将文字转化为语音的一种技术,是让计算机模拟人类的嘴巴,通过不同的音色说出想表达的内容, 是人机对话的一部分。 TTS可以通过 神经网络 的设计,把文字智能地转化

    2024年02月04日
    浏览(79)
  • 深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

    pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 计算图是用来描述运算的有向无环

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包