RGBD融合原理及实践
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,需要做一个罗格变换成标准的3x3矩阵,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摄像头在日光灯下产生了条纹)
RGBD融合原理及实践相关推荐
- Atitit.软件兼容性原理与实践 v3 q326.docx
Atitit.软件兼容性原理与实践 v3 q326.docx 1. 架构兼容性1 2. Api兼容性1 2.1. 新api vs 修改旧的api1 3. Web方面的兼容性(js,html)1 3 ...
- 《新一代SDN——VMware NSX 网络原理与实践》——导读
** 前言 ** 当企业需要搭建一个"云"的时候,无论它是公有云还是私有云,其基础架构一定涉及网络.计算和存储这三大块.NIST对云计算的定义中,明确提出了云中资源需要实现&quo ...
- 文末送书|增强现实:原理与实践
CV君:我在2011年毕业,进入华为的第一个研究项目就是增强现实(Augmented Reality,AR),后来即使不再做这个方向,但还在一直关注着.这是一个神奇的领域,几乎每一年都有人在年初时说当 ...
- 酉变换 matlab,数字图像处理:原理与实践(MATLAB版)
数字图像处理:原理与实践(MATLAB版) 作 者:左飞 著 出版时间:2014 内容简介 本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像分割.图像去噪. ...
- Struts原理与实践(文摘)
Struts原理与实践 摘自walle的blog word文档下载:http://www.chq.name/component/option,com_docman/task,doc_download/ ...
- Struts原理与实践
[@more@] Struts原理与实践 (第1部分) 一. 什么是Struts 框架(Framework)是可重用的,半完成的应用程序,可以用来产生专门的定制程序. 您只要细心地研究真实的应用程序, ...
- 百分点认知智能实验室:智能校对的技术原理和实践
编者按 :大数据时代下各种文本信息爆炸,传统的文本分析处理工作逐渐被计算机取代.文本数据量越大,其中所包含的错误的总数也越多,通过校对工作来纠正文本中的错误显得尤其重要.传统的校对主要依赖人工,通过人 ...
- lstm处理时序数据结构图_LSTM原理与实践,原来如此简单
LSTM原理与实践,原来如此简单 首发于公众号:机器学习荐货情报局 做干货最多的公众号,关注了不吃亏原创不易,转载请标明出处 目录 一.介绍 1.1 LSTM介绍 LSTM全称Long Short-T ...
- CompletableFuture原理与实践-外卖商家端API的异步化
CompletableFuture由Java 8提供,是实现异步化的工具类,上手难度较低,且功能强大,支持通过函数式编程的方式对各类操作进行组合编排.相比于ListenableFuture,Compl ...
最新文章
- VMware下redhat9.0的上网设置
- Django-HttpResponse、render,、redirect(转载)
- 水晶底是什么材质_蓝宝石水晶镜面,贵是有道理的!
- GaussDB(for openGauss)让数据“存得下、算得快、算得准”
- 95-35-010-Topic-Topic 删除 源码解析
- 字符串在JVM中如何存放 及常量池技术
- MaterialPropertyBlock的使用
- 100-days: thirty-five
- kafka可视化界面kibana_kafka日志同步至elasticsearch和kibana展示
- oracle的update加并发,关于update操作并发问题
- 【118期分享】简约商务PPT模板免费下载
- 微信小程序码无法解析到scene参数问题
- Python结巴中文分词工具使用过程中遇到的问题及解决方法
- framework7 入门知识
- 各版本Qt下载传送门
- 视频会议十大开源项目
- Redisson文档
- 独家免费资源:《成长的烦恼》全7季在线高清无水印播放!
- 什么是PCB抄板?主要抄板软件有哪些?
- 狼人杀暂时未连接到语音服务器,狼人杀连接服务器失败 连接不上网络怎么办...