Bootstrap

投影变换库 PinholeCamera

目录

Kornia库简介

构建内参,外参:

深度转点云:

光栅化pytorch3d

点光栅化设置:

PointsRasterizer 光栅化


Kornia库简介

  1. Kornia 是一个基于 PyTorch 的计算机视觉库,它提供了一系列可微的计算机视觉操作和算法。它的设计目标是与深度学习框架(特别是 PyTorch)无缝集成,使得在神经网络中可以方便地使用计算机视觉操作,并且这些操作可以在反向传播过程中自动求导。
  2. PinholeCamera类的用途
    • 相机建模方面
      • PinholeCamera类主要用于针孔相机模型的表示。在计算机视觉和计算机图形学中,针孔相机模型是一种简化但非常有用的相机成像模型。它可以用来描述相机如何将三维世界中的点投影到二维图像平面上。通过PinholeCamera类,可以方便地存储和操作相机的内部参数(如焦距、主点等)和外部参数(如相机在世界坐标系中的位置和姿态)。
    • 几何变换和投影方面
      • 可以利用这个类进行 3D - 2D 的投影操作。例如,给定三维空间中的点云数据,可以使用PinholeCamera模型将这些 3D 点投影到相机的图像平面上,这在目标检测、三维重建等任务中非常有用。在目标检测中,它可以帮助将 3D 物体的边界框从 3D 空间投影到 2D 图像空间,以便与图像中的检测结果进行匹配;在三维重建中,它是从多个视角的 2D 图像恢复 3D 结构的关键组成部分,通过已知的相机模型(如PinholeCamera)和多个视图之间的对应关系来重建 3D 场景。
    • 与深度学习结合方面
      • 由于 Kornia 是基于 PyTorch 的,PinholeCamera类可以很方便地融入到深度学习管道中。例如,在训练一个基于图像的位姿估计神经网络时,可以将PinholeCamera模型作为网络的一部分,网络可以学习如何根据输入图像和相机参数来预测相机的位姿或者物体在相机坐标系中的位置。这种可微的相机模型使得整个系统可以端到端地进行训练,通过反向传播来优化相机参数和神经网络的权重。

构建内参,外参:

def convert_pytorch3d_kornia(camera, focal_length, size=512):
    R = torch.clone(camera.R)
    T = torch.clone(camera.T)
    T[0, 0] = -T[0, 0]
    extrinsics = torch.eye(4, device=R.device).unsqueeze(0)
    extrinsics[:, :3, :3] = R
    extrinsics[:, :3, 3] = T
    h = torch.tensor([size], device="cuda")
    w = torch.tensor([size], device="cuda")
    K = torch.eye(4)[None].to("cuda")
    K[0, 0, 2] = size // 2
    K[0, 1, 2] = size // 2
    K[0, 0, 0] = focal_length
    K[0, 1, 1] = focal_length
    return PinholeCamera(K, extrinsics, h, w)

深度转点云:

        current_camera = convert_pytorch3d_kornia(self.current_camera, self.config["init_focal_length"])
        point_depth = rearrange(self.depths[epoch - 1], "b c h w -> (w h b) c")
        points_3d = current_camera.unproject(self.points, point_depth)

光栅化pytorch3d

点光栅化设置:

Points Rasterization Settings

PointsRasterizer 光栅化

  • 功能概述
    • 基于 PointsRasterizationSettings 所设定的参数,实际执行点云光栅化的操作。它会根据传入的点云数据以及设定好的光栅化参数,将点云进行处理,使其从原始的三维点云形式转化为可以在二维图像上显示的形式。
  • 参数和属性
    • 它在构造函数中通常会接收 PointsRasterizationSettings 类的实例作为参数,以获取具体的光栅化设置。然后在其方法中,会有针对点云数据进行处理的逻辑,比如遍历点云中的每个点,根据设置的点大小、图像分辨率等参数,确定每个点在图像上的位置和呈现方式,最终生成一个可以在屏幕上或作为图像输出的光栅化结果。
;