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. 相机模型数 ...
最新文章
- 008 数据结构逆向—数组(简单版)
- Mysql主从延时解决办法
- java php js_【javascript/PHP】当一个JavaScripter初次进入PHP的世界,他将看到这样的风景...
- android 6.0电池优化,Android 优化——电量优化
- 内涝预测过程的噪音_提高人工智能模型准确率的测试过程中需要注意什么?
- k8s核心技术-Pod(调度策略)_影响Pod调度(资源限制和节点选择器)---K8S_Google工作笔记0025
- poj 1324 Holedox Moving
- html无序列表文字换行,ppwjs之bootstrap文字排版:无序列表项不换行
- nafxcw.lib与LIBCMT.LIB链接冲突
- 课改 计算机 论文,计算机论文 计算机应用课改分析
- Excel图表4——平均线图
- R软件中调用windows字体二
- 汉化后的eclipse改成英文版
- 【高速PCB电路设计】2.高速电路DDR原理图概述
- 【IoT库】物联网行业仍普遍存在的问题
- iOS开发面试和底层学习视频整理合集
- 决策树之CART算法
- ./config.status --recheck 而发现的error的根因与解决方案
- 教程:在C#中创建带有表格、图表、图片的PPT演示文稿
- python使用while循环语句计算GDP
热门文章
- 【网络流24题补全计划】
- Spire.Office for Java 7.9.9 ---2022-09-30
- 小米MIX 2S简单刷入开发版开启Root权限的步骤
- Codeforces Round #481 (Div. 3) F. Mentors(思维+二分)
- python pyplot安装_Python学习-windows安装Python以及matplotlib.pyplot包
- 半导体未来浪潮(深度好文)
- 万亿级消息背后: 小米消息队列的实践
- 救急修复17款MacBook Pro键盘出现某些健按一下被识别成两下,然后打出2个字母的情况
- 2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---Vue篇
- 从事新媒体运营岗位我很迷茫