HoloLens2 Visible-Light Tracking Camera (VLC) 内参获取

news2025/3/2 4:31:15

HoloLens2 Visible-Light Tracking Camera(VLC)内参获取

    • 问题描述
    • 求解方法
    • 总结
    • 参考链接

问题描述

    OpenCV中的许多功能都需要输入相机内参(Camera Intrinsics)。然而,HoloLens2并没有提供直接获取相机内参的API,what is provided is a function (MapImagePointToCameraUnitPlane()) from pixel to unit ray in the camera space。详见HoloLens2的官方论文HoloLens 2 Research Mode as a Tool for Computer Vision Research。
    本文介绍获取HoloLens2 Visible-Light Tracking 相机内参的另一种方法——从Lookup Table (LuT)中求解相机内参。

求解方法

1. 获取LuT
LuT通过微软提供的SteamRecorder工程得到,工程链接。
将工程中需要记录的相机类型修改为VLC:
在这里插入图片描述
将工程部署到HL并运行,LuT将被离线保存:
在这里插入图片描述
2.从LuT中求解相机内参

import numpy as np

def ReadFile(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_Linearity(x_array, y_array):
    # x_array自变量 y_array因变量
    # 方程个数
    m = len(x_array)
    # 计算过程
    sum_x = np.sum(x_array)
    sum_y = np.sum(y_array)
    sum_xy = np.sum(x_array * y_array)
    sum_xx = np.sum(x_array ** 2)
    b = (sum_y * sum_xx - sum_x * sum_xy) / (m * sum_xx - (sum_x) ** 2)
    k = (m * sum_xy - sum_x * sum_y) / (m * sum_xx - (sum_x) ** 2)
    return k, b

def Fit_CameraIntrinsics(lut, h, w):
    """
    u = fx*xc+x0
    v = fy*yc+y0
    """
    where = np.where(lut[:, 2] != 0)
    lut = lut[where]
    xc = lut[:, 0] / lut[:, 2]
    yc = lut[:, 1] / lut[:, 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_Linearity(xc, u)
    fy, y0 = Fit_Linearity(yc, v)
    intrinsics = np.array([[fx, 0, x0], [0, fy, y0], [0, 0, 1]])
    return intrinsics

if __name__ == '__main__':
    # 设置图像分辨率
    height = 480
    width = 640
    filepath = 'D:\\Paper\\HoloLens\\Record\\2022-12-27-053238\\VLC RR_lut.bin' # the file path of LuT that you saved
    lut = ReadFile(filepath)
    camera_intrinsics = Fit_CameraIntrinsics(lut, height,width)
    print(camera_intrinsics)

最终输出相机内参如下:
在这里插入图片描述
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述 在这里插入图片描述

总结

在这里插入图片描述

参考链接

https://blog.csdn.net/scy261983626/article/details/117224024
https://github.com/microsoft/HoloLens2ForCV/issues/37

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初阶指针(详细版)

目录 一、指针是什么 1、内存 2、内存的管理与使用 3、指针变量的使用 二、指针和指针类型 1、指针类型的意义 2、指针 或 - 整数 3、指针解引用 三、野指针 1、野指针成因 2、如何规避野指针 四、指针运算 1、指针-整数 2、指针 - 指针 指针 - 指针的运用…

11_6、Java集合之Map接口(包括HashMap在内的子接口)的使用

一、引入Map与Collection并列存在。用于保存具有映射关系的数据:key-value (双列集合框架),Map 中的 key 和 value 都可以是任何引用类型的数据 。Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应 的类&…

Android Studio生成自己的so库

一、创建Native项目 1、新建 Native 项目 1)新建项目 选择最下面的 Native C 下一步即可 2)填写项目信息 3)选择C版本可以直接选择默认 2、下载并配置NDK及CMake 1)进入Studio 设置 SDK 设置界面 这里选择需要的 NDK 和 CMake…

c++之 OpenGL(1)-安装与概述

目录概述fedora下安装编写OpenGL应用程序测试hello,world概述 OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于…

Linux开发工具的使用(一)

文章目录Linux开发工具的使用(一)1. Linux软件包管理器yum1.1 查看软件1.2 下载软件1.3 卸载软件2.vim编辑器的介绍和使用2.1 vim的介绍2.2 vim的基本操作2.3 vim命令模式命令集(必须是命令模式下)2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 …

C++ 不知树系列之二叉堆排序(递归和非递归实现上沉、下沉算法)

1. 前言 什么是二叉堆? 二叉堆是有序的 完全二叉树,在完全二叉树的基础上,二叉堆 提供了有序性特征: 二叉堆 的根结点上的值是整个堆中的最小值或最大值。 当根结点上的值是整个堆结构中的最小值时,此堆称为最小堆。…

xpath获取标签之间的文本内容

目前在学习xpath,需要取一个package信息,如图: 标题 "package"在span里面,比较方便取,用这个xpath就行: //div[idartikeltabelle]/table/tbody/tr[1]/td[2]/span[classinsertlabela and text()pa…

/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning

报/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning 就是mmcv或者mmcv-full编译有问题; 尝试了mmcv_full-1.7.1-cp36-cp36m-manylinux1_x86_64.whl pip 安装,都不是对应版本; 在安装mmcv或者mmcv-full都是无…

如何用PPT画出好看的科研图

前言 好看的科研图可以从前人的作品中进行借鉴,今天介绍2副精美的科研图以及他们在PPT中的绘制方法,话不多说,先摆上标准科研图 1. 黑色粗体边框以及淡填充颜色 黑色粗体边框和淡填充颜色真的让矩形一下子变得很有质感,在学习的…

VMware Fusion设置静态IP+端口转发(macOS)+内网穿透

很少有资料提到配置macOS上VMware Fusion的端口转发,因此我在这里进行了一些记录打开网络设置解锁并添加新的网络适配器只有新的网络适配器才允许配置转发,默认的不允许这样做。设置NAT转发虚拟机选择使用新创建的虚拟网络适配器Ubuntu配置静态IP/DNS服务…

linux xshell用户免密登录设置

最重要准备工作 ​编辑linux xshell用户免密登录设置步骤 1.在xshel进行密钥获取操作 2.创建mkdir ~/.ssh目录(检查有没有这个目录,没有自己添加) 3.在该目录创建authorized_keys目录。注意(目录权限为600) 4.将刚…

Android Studio arctic Fox(北极狐)导入openCV

Android studio arctic Fox在引入opencv的时候按照正常的File->New->Import Module操作时,出现无法点击“Next”和“Finish”的情况。如下图 所以我们使用另外的方法进行引入。 准备工作: 1,Android Studio 2,下载opencv…

纪念2022年11月软考高项(信息系统项目管理师)一次通过的经验随笔

一、备考背景2022年5月的浙江软考因为疫情防控原因临时取消,我离杭州买房又远了几分。众所周知,杭州是炒房投资客的香饽饽,即使主城区购房摇号制度不停打补丁,也难济于事。自住客为了与投资客抗衡,一靠社保&#xff0c…

新品做软文推广发布在哪些平台好?

新产品上市前后,会经历开发期、介绍期、成长期、成熟期、衰退期五个阶段,每个阶段都需要软文推广的助力! 当一款新品上市前后往往会面临着无法打开市场、产品卖不出去等问题,这个时候软文推广就要做到位,除了文章撰写…

在centos7安装KubeSphere

节点准备 设置hostname hostnamectl set-hostname ks-m4 关闭防火墙 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机…

SAP 通过 OData Service 反查 CDS View 位置 视图「Workaround」

前言 使用场景:目前已知 OData Service 由 CDS View 发布,但是想要查看该 CDS 的具体内容 根据 OData Service 获取关键信息盲猜对应底表通过 SE11 反查引用位置 猜底表 目前已知 OData Service URL: http://xxx.xxx.com:xxxx/sap/opu/odata/sap/ZCD…

栉风沐雨砥砺行,春华秋实满庭芳——华秋电子2022年度大事记

岁序更替,春华秋实 转眼间,2022年已是过去 回首2022年,华秋肩负使命 持续为电子产业增效降本。 我们加大研发投入,提升全球交付保障能力; 我们以创新引领发展,以实干笃定前行; 以品质为基…

JetBrains 学生和教师认证教程

目录一、学生和教师授权申请方式二、申请网址三、激活JetBrains产品(如PyCharm、IDEA)一、学生和教师授权申请方式 详见官方教程: JetBrains 学生和教师授权申请方式 二、申请网址 学生和教师可以使用在学校注册的邮箱账号来申请。 新申请…

「EZEC-4」可乐(2种方法:差分+位运算 | 枚举+字典树)

「EZEC-4」可乐 洛谷:「EZEC-4」可乐 题目背景 很久以前,有一个 pigstd,非常迷恋美味的可乐。为了得到美味的可乐,他几乎用尽了所有的钱,他甚至对自己的 npy 也漠不关心其实是因为他没有npy,更不爱好看戏…

C语言实现烟花表白,内含源码!!

虽然现在看烟花有一定难度,但代码式烟花可以随时随地看! 烟花的代码很多,实际上是可以用 Python、HTML5 等语言写烟花,但今天主要想和大家分享用C语言写的烟花代码,非常细致和实用。 同学们一定要亲自敲一遍&#xf…