HoloLens2 初入——从Lut表中求解相机内参

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+x0
    v = 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图像

贴一张效果图
在这里插入图片描述

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值