HoloLens2 初入——从Lut表中求解相机内参
文章目录
- HoloLens2 初入——从Lut表中求解相机内参
- 引言
- HoloLens2 的相机们
- 基本条件
- 解畸变
- ----------------------------------------------------------------------------------------------------
- 关键代码
HoloLens2 初入——从Lut表中求解相机内参
引言
求取定位相机内参矩阵的目的是为了能够将相机坐标系下的坐标点映射到图像上的像素点。这个过程在进行深度相机和其它相机对齐的时候需要用到。
对齐的意思就是在灰度图像中找到和深度图像某一个像素点对于的像素位置。
(2021/7/6更新)这边内参的目标相机指的是4个定位的灰度相机,目前深度相机(存在畸变,后续会有)和中间的彩色相机并不适用(变焦相机,不属于研究者模式下的传感器,可直接调用函数得到内参) 。
由于最近时间比较紧,先不写详细的内容。先把关键的代码开源一下。 以后再详细解释
HoloLens2 的相机们
HoloLens2中有8个相机传感器。分别是4个高速灰度相机、1个变焦前景RGB相机、1个深度相机(红外相机)、以及2个眼动追踪所用的红外相机(尚未确认)。目前,我可以拿到数据的是前6个相机。
————待续
基本条件
1、相应相机的lut表
2、该相机的分辨率
这两个条件可以通过微软提供的SteamRecorder工程得到。工程链接
工程部署看另外一篇文章离线记录传感器数据
记得修改如下图的代码。表示记录这些类型的传感器的数据。会自动把相应的lut标和外参离线保存下来。
类似下图的文件,我这边是包括了所有相机的,自己需要用哪个从工程中拿到哪个就可以
解畸变
哇擦擦擦擦!!!,终于整出来了。
原图
解畸变后的图
----------------------------------------------------------------------------------------------------
以下的方法是错误的,灰度图像中也有畸变, 新的方法正在研究
关键代码
因为我的代码都是中英混编的,所以先不详细注释了
因为是中英混编的,所以记得到在你们的代码最前面(导入包之前添加下面语句)
# -*- coding:utf-8 -*-
def Read读取传感器标定标文件(filepath):with open(filepath, mode='rb') as depth_file:lut = np.frombuffer(depth_file.read(), dtype="f")lut = np.reshape(lut, (-1, 3))return lut
def Fit_拟合相机内参(lup_标定表, h_图像高, w_图像宽):"""u = fx*xc+x0v = fy*yc+y0这边要拟合就是fy,fx,x0,y0返回一个转换矩阵,为相机空间到图像平面的转换矩阵"""where = np.where(lup_标定表[:, 2] != 0)lup_标定表 = lup_标定表[where]xc = lup_标定表[:, 0] / lup_标定表[:, 2]yc = lup_标定表[:, 1] / lup_标定表[:, 2]u = np.arange(0.5, w_图像宽, 1, float)u = np.tile(u, h_图像高)u = u[where]v = np.arange(0.5, h_图像高, 1, float)v = v.repeat(w_图像宽)v = v[where]fx, x0 = Fit_线性拟合(x_自变量集=xc, y_因变量集=u)fy, y0 = Fit_线性拟合(x_自变量集=yc, y_因变量集=v)trans_相机To图像 = np.array([[fx, 0, x0], [0, fy, y0], [0, 0, 1]])return trans_相机To图像
贴一张效果图
HoloLens2 初入——从Lut表中求解相机内参相关推荐
- Hololens2初入——解决HL真机到PC图像传输的实时性问题
文章目录 Hololens2初入--解决HL真机到PC图像传输的实时性问题 引言 正文 解决方案 具体方案 示例动图 原工程的一个小问题 Hololens2初入--解决HL真机到PC图像传输的实时性问 ...
- HoloLens2初入——Unity远程调试时启用眼动追踪和手势追踪功能
文章目录 HoloLens2初入--Unity远程调试时启用眼动追踪和手势追踪功能 引言 基础环境 安装DotNetWinRT包 设置MRTK配置文件 配置光标指示点 效果图 现在的中文博客很少,公司 ...
- Hololens2初入—— Unity socket 异步通讯
Hololens2初入--socket 异步通讯 介绍 Hololens2真机中运行的程序与在电脑端的程序要求有些不同. 它不支持同步的socket,必须采用异步的形式才能跑的通.具体的原因和细节我也 ...
- 使用OpenCV库快速求解相机内参
本文主要介绍如何使用OpenCV库函数求解相机内参.具体可查阅官网:https://docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html ...
- 初入C++(一) c++中的一些基础和与c的一些区别
1.定义变量的位置 在c中,所有的局部变量都必须在函数的开头定义. 而在c+中却不是这样的强求,只要在使用该变量之前定义就可以. 2.c++中的波尔类型(bool) 只有两种情况 就是0和1:掌握bo ...
- sql 如何把查询得到的结果如何放入一个新表中
表已经存在:insert into 表名 (列名1... 列名n) select 列名1....列名n from 表 where 条件表不存在:oraclecreate table 新表明 as se ...
- 个人java学习路线-html初入
个人java学习路线-html初入 简单介绍 第一个html html基本标签 html实体符号 html的表格 创建表格和表格简单格式 表格合并 html的表格-thead tbody tfoot ...
- Oracle删除表中的重复数据
Oracle数据库删除表中的重复数据,只保留其中的一条,以两个字段为例,提供两种方法 ①.直接delete重复的数据 delete from table_name t1 where (t1.col1, ...
- slam中的相机相关
相机模型 文章目录 相机模型 1. 基本成像原理 1.1 相机 1.1.1 相机简介 1.1.2 传感器 1.2 小孔成像原理 1.3 相机成像相关坐标系的建立 1.4 相机成像过程 2. 相机模型数 ...
最新文章
- laravel实现数据库读写分离配置或者多读写分离配置
- cocos2dx的图片载入
- 使用maven profile实现多环境可移植构建
- [js] 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证?
- Windows系统 services.msc命令详解,Windows命令行查看本地服务
- 关于平方根倒数速算法(雷神之锤3,牛B)
- 2021-03-08
- 戴尔计算机亮度如何调整,官方数据:如何调整Dell显示器的亮度
- 简化预测集合的永磁同步电机的无差拍预测转矩控制系统Simulink仿真
- 计算机毕业设计ssm基于远程协作的汽车故障诊断系统t6ipg系统+程序+源码+lw+远程部署
- 基于Instrument技术实现Java类字节码插桩代理
- 游戏设计---游戏中战斗力计算方法(整理)
- 基尼指数 Gini Index
- C++ 语法篇之 static 用法
- Myshare.cc 图床对接ShareX自定义图片上传
- ACM纪念日 C语言
- log4j2远程代码执行漏洞学习总结
- 【点云相关】CvxNet:Learnable Convex Decomposition
- 【Bluetooth蓝牙开发】三、蓝牙调试工具【集合汇总】
- 字符串前加 u、r、f 的含义