RGBD融合原理及实践[通俗易懂]

RGBD融合原理及实践[通俗易懂]RGBD融合原理及实践前言原理部分实践前言好久没更新博客了,主要是因为懒,最近有些得闲,决定纪录下之前的工作。RT,RGBD数据融合其实就是将3D摄像机的RGB与Depth数据做融合显示的过程,做法也不难理解,就是将depthcamera与rgbcamera的像素对应起来即可。原理部分原理部分主要借鉴这篇博文,详细的公式在这就不作重复了,贴张图吧。从上面的博客或图片可以看出,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

RGBD融合原理及实践

前言

好久没更新博客了,主要是因为懒,最近有些得闲,决定纪录下之前的工作。RT,RGBD数据融合其实就是将3D摄像机的RGB与Depth数据做融合显示的过程,做法也不难理解,就是将depth camera与rgb camera的像素对应起来即可。

原理部分

原理部分主要借鉴这篇 博文, 详细的公式在这就不作重复了,贴张图吧。
在这里插入图片描述
从上面的博客或图片可以看出,关键先找到两个camera的外参矩阵RT,一开始我是按照博客的来用GML Camera Calibration Toolbox进行内外参矩阵,然后利用公式求出RT,但实际测试下来我尝试在同一场景下同时采集双目摄像头的几组正面棋盘,获得它们的外参得出的RT都不正常,这里的RT很重要,直接影响到后面计算对应像素! 后面我还是转用大杀器matlab calibration toolbox,虽然比GML标定要麻烦,每张图都要手动选四个参考角点,但胜在它稳定、精度高啊,我基本走一次流程下来得到的RT就比较准确了。所以,标个内参的话可以用GML,比较快搞掂,但需要双目标定时还是用回matlab吧,哈哈。 哦,对了,matlab出来的旋转矩阵是om,需要做一个罗格变换成标准的3×3矩阵,toolbox里自带了接口,直接用即可。

Rotation vector:             om = [ 0.05129   0.00136  -0.02893 ] ? [ 0.03624   0.03419  0.00277 ]
>> rodrigues(om) 
ans =
    0.9996    0.0289    0.0006
   -0.0289    0.9983   -0.0513
   -0.0021    0.0512    0.9987

实践

来到实践部分,写了一个简单的脚本做验证,主要是验证下标定出的RT是否正确可用。(注意代码里IR即指depth camera)

from numpy import *
import numpy as np
# import matplotlib.pylab as plt


#双目内参
# ir camera
# 408.72767  0           332.18622
# 0        410.38278    227.32216
# 0        0             1 
# 
# rgb camera
# 438.63884  0      337.13761
# 0          440.86391   254.91443
# 0         0             1
#  


ir_in = np.loadtxt("ir_matlab_intrinsic.txt")
rgb_in = np.loadtxt("rgb_matlab_intrinsic.txt")

# RT矩阵
R = np.array([[0.9996,    0.0289,    0.0006], [-0.0289,    0.9983,   -0.0513], [-0.0021,    0.0512,    0.9987]])
T = np.array([[-54.58182],   [2.11322],  [-0.64764]])

print (R)
print (T)
# ir 内参逆阵
ir_in_I = linalg.inv(ir_in)
print (ir_in_I)

# 建立ir像面坐标,900指某一点的深度900mm,注意是 Zc [x  y 1]
pixel_depth = 900
test = np.array([[129 * pixel_depth], [302 * pixel_depth], [pixel_depth]])

print ("---- Pir ---")
P_ir = np.dot(ir_in_I, test)
print (P_ir)
P_rgb = np.dot(R, P_ir) + T
print ("---- P rgb ---")
print (P_rgb)
p_rgb = np.dot(rgb_in, P_rgb)

print (p_rgb)
print (p_rgb / p_rgb[2])


上面代码主要验证IR camera坐标 (129, 302)与RGB对应的坐标是多少,最终输出的p_rgb x y分量即为对应的rgb坐标值,实际测试下来还是蛮准确的。OK,验证完事后,可以用C++实现下上面的脚本,对每个pixel都做这样的转换处理,即可以得到rgb depth camera对应关系,也就是说做到这两者的数据融合咯。 注意最好用eigen这样的三方库,直接用opencv的矩阵运算实在太慢了(其实主要是cv::Mat 动态变量分配空间比较耗时,反复调用的话延时完全不可接受)。 下图为实际的融合效果,初步来看效果还是不错的。(请忽视右上角的那几道条纹,那是因为rgb摄像头在日光灯下产生了条纹)
在这里插入图片描述

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

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

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


相关推荐

  • Jenkins(5)生成allure报告

    Jenkins(5)生成allure报告前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

    2022年7月28日
    0
  • xtrabackup部署以及使用

    xtrabackup部署以及使用

    2021年11月27日
    38
  • FPN(特征图金字塔网络)理论基础与具体实现

    FPN(特征图金字塔网络)理论基础与具体实现论文地址:FeaturePyramidNetworksforObjectDetection项目地址:FPN_pytorch0x00前言我们在做目标检测和超分辨率重建等问题的时候,我们一般是对同一个尺寸的图片进行网络训练。我们希望我们的网络能够适应更多尺寸的图片,我们传统的做法使用图像金字塔,但是这种做法从侧面提升了计算的复杂度,我们希望可以改善这个问题,所以本文就提出了…

    2022年6月9日
    49
  • 十字路口的交通灯控制系统_十字路口红绿灯控制程序设计

    十字路口的交通灯控制系统_十字路口红绿灯控制程序设计十字路口交通信号灯控制系统主要任务开发平台设计思路主要任务设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态;具有倒计时的功能,用两组数码管作为东西和南北方向的倒计时显示,**主干道直行(绿灯)60秒后,左转(绿灯)40秒;支干道直行(绿灯)45秒后,左转(绿灯)30秒,**在每次绿灯变成红灯的转换过程中,要亮黄灯5秒作为过渡。黄灯每秒闪亮一次。只考虑直行和左转车辆控制信号灯,右转车辆不受信号灯控制,南北向车辆与东西向车辆交替方向,同方向等待车辆应先方向直

    2022年9月25日
    0
  • Java XML解析工具类

    Java XML解析工具类JavaXML解析工具类Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成java对象,没做完不需要了,只做到了解析,后续本来想利用解析出来的key进行遍历,利用FTL模板生成Java文件,有这个需求的小伙伴可以延续这个工具类。1.看看XML<?xmlversion=”1.0″encoding=”utf-8″?><!–每个协议有Request或Resp

    2022年7月21日
    10
  • pycharm 激活码 2022_通用破解码「建议收藏」

    pycharm 激活码 2022_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    2.0K

发表回复

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

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