跳转至

获取Azure Kinect摄像头的内参

约 645 个字 • 23 行代码

由于同学需要摄像头的焦距等参数来将深度帧的数据转换成3维坐标系中的坐标,所以开始在网上搜索相应的方法

一开始找到了这篇文章,

Azure Kinect 获取相机内参 - BuckyI - 博客园 (cnblogs.com)

但是安装了pykinect_azure包后,运行文章中的代码出现了报错,就放弃参考这篇文章了

找到了这个issue

Get intrinsic from Azure Kinect? · Issue #2071 · isl-org/Open3D (github.com)

theNded的回答说道需要一个使用azure kinect摄像头录制的mkv文件,再使用Open3D中的 azure_kinect_mkv_reader.py 文件来解析mkv文件,会得到一个 intrinsic.json ,里面包含着摄像头的内参

We need the mkv file recorded by AzureKinect to parse the calibration. It will be stored in a json file intrinsic.json, see https://github.com/intel-isl/Open3D/blob/master/examples/python/ReconstructionSystem/sensors/azure_kinect_mkv_reader.py#L60

但他的回答中对应的文件的路径已经更改了,应该是

https://github.com/isl-org/Open3D/blob/main/examples/python/reconstruction_system/sensors/azure_kinect_mkv_reader.py#L60-L72

于是克隆仓库,然后发现可以参考Open3D官方文档的这个部分进行操作。

使用Azure Kinect摄像头录制mkv视频

但是还需要使用azure kinect摄像头录制一个mkv文件,于是搜索如何进行录制,

然后找到这篇文章

How to record using Azure Kinect. You can check out the official… | by Jo Jiyao Zhang | Medium

文章中提到如果已经安装好Azure Kinect SDK(对于在linux上,安装好的标志应该是是否可以使用 k4aviewer ),那么就可以使用 k4arecorder 来录制mkv视频,

linux上可以运行类似下面这样的命令进行录制

k4arecorder -l 5 path/to/output.mkv

-l 参数指的是录制的时长,单位是

解析录制好的mkv视频获取摄像头内参

参考Open3D官方文档的这个部分,在克隆的Open3D仓库根目录下,运行下面这个命令解析mkv

python3 examples/python/reconstruction_system/sensors/azure_kinect_mkv_reader.py --input ~/output.mkv

但是只有显示没有输出,如果要输出出文件,要加上 --output 参数,例如

python3 examples/python/reconstruction_system/sensors/azure_kinect_mkv_reader.py --input ~/output.mkv --output frames

--output 参数传入的值,会被解析成相对仓库根目录的路径(或许也可以传入绝对路径),然后就可以在 frames 文件夹中找到 intrinsic.json 这个json文件。

打开文件,发现是这样的内容

intrinsic.json
{
    "color_mode" : "MJPG_1080P",
    "depth_mode" : "NFOV_UNBINNED",
    "height" : 1080,
    "intrinsic_matrix" : 
    [
        915.332763671875,
        0.0,
        0.0,
        0.0,
        915.34014892578125,
        0.0,
        965.72125244140625,
        538.07537841796875,
        1.0
    ],
    "serial_number" : "000162502412",
    "stream_length_usec" : 5120700,
    "width" : 1920
}

但是不知道 "intrinsic_matrix" 中的数值都对应哪些参数,然后找到这个issue

Azure kinect intrinsic json structure (question) · Issue #1823 · isl-org/Open3D (github.com)

根据theNded的回答得知了 intrinsic.json 中参数的格式

It is simply [[fx, 0, 0], [0, fy, 0], [cx, cy, 1]]. Open3D at current does not support other parameters in the pinhole camera model (esp. for the downstream applications) so the rest have been ignored.


最后更新: 2024-09-10
创建日期: 2024-09-10

评论