Open3D (C++ API)  0.18.0
Loading...
Searching...
No Matches
ScalableTSDFVolume.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2023 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <memory>
11#include <unordered_map>
12
15
16namespace open3d {
17namespace pipelines {
18namespace integration {
19
20class UniformTSDFVolume;
21
41public:
42 struct VolumeUnit {
43 public:
44 VolumeUnit() : volume_(NULL) {}
45
46 public:
47 std::shared_ptr<UniformTSDFVolume> volume_;
48 Eigen::Vector3i index_;
49 };
50
51public:
52 ScalableTSDFVolume(double voxel_length,
53 double sdf_trunc,
54 TSDFVolumeColorType color_type,
55 int volume_unit_resolution = 16,
56 int depth_sampling_stride = 4);
57 ~ScalableTSDFVolume() override;
58
59public:
60 void Reset() override;
62 const camera::PinholeCameraIntrinsic &intrinsic,
63 const Eigen::Matrix4d &extrinsic) override;
64 std::shared_ptr<geometry::PointCloud> ExtractPointCloud() override;
65 std::shared_ptr<geometry::TriangleMesh> ExtractTriangleMesh() override;
67 std::shared_ptr<geometry::PointCloud> ExtractVoxelPointCloud();
68
69public:
73
77 std::unordered_map<Eigen::Vector3i,
81
82private:
83 Eigen::Vector3i LocateVolumeUnit(const Eigen::Vector3d &point) {
84 return Eigen::Vector3i((int)std::floor(point(0) / volume_unit_length_),
85 (int)std::floor(point(1) / volume_unit_length_),
86 (int)std::floor(point(2) / volume_unit_length_));
87 }
88
89 std::shared_ptr<UniformTSDFVolume> OpenVolumeUnit(
90 const Eigen::Vector3i &index);
91
92 Eigen::Vector3d GetNormalAt(const Eigen::Vector3d &p);
93
94 double GetTSDFAt(const Eigen::Vector3d &p);
95};
96
97} // namespace integration
98} // namespace pipelines
99} // namespace open3d
std::shared_ptr< core::Tensor > image
Definition FilamentRenderer.cpp:183
Contains the pinhole camera intrinsic parameters.
Definition PinholeCameraIntrinsic.h:32
RGBDImage is for a pair of registered color and depth images,.
Definition RGBDImage.h:27
Definition ScalableTSDFVolume.h:40
std::shared_ptr< geometry::TriangleMesh > ExtractTriangleMesh() override
Function to extract a triangle mesh, using the marching cubes algorithm. (https://en....
Definition ScalableTSDFVolume.cpp:203
void Reset() override
Function to reset the TSDFVolume.
Definition ScalableTSDFVolume.cpp:33
void Integrate(const geometry::RGBDImage &image, const camera::PinholeCameraIntrinsic &intrinsic, const Eigen::Matrix4d &extrinsic) override
Function to integrate an RGB-D image into the volume.
Definition ScalableTSDFVolume.cpp:35
double volume_unit_length_
Definition ScalableTSDFVolume.h:71
~ScalableTSDFVolume() override
Definition ScalableTSDFVolume.cpp:31
std::unordered_map< Eigen::Vector3i, VolumeUnit, utility::hash_eigen< Eigen::Vector3i > > volume_units_
Definition ScalableTSDFVolume.h:80
int depth_sampling_stride_
Definition ScalableTSDFVolume.h:72
int volume_unit_resolution_
Definition ScalableTSDFVolume.h:70
std::shared_ptr< geometry::PointCloud > ExtractVoxelPointCloud()
Debug function to extract the voxel data into a point cloud.
Definition ScalableTSDFVolume.cpp:353
std::shared_ptr< geometry::PointCloud > ExtractPointCloud() override
Function to extract a point cloud with normals.
Definition ScalableTSDFVolume.cpp:100
Base class of the Truncated Signed Distance Function (TSDF) volume.
Definition TSDFVolume.h:42
TSDFVolumeColorType
Definition TSDFVolume.h:22
Definition PinholeCameraIntrinsic.cpp:16
Eigen::Vector3i index_
Definition ScalableTSDFVolume.h:48
std::shared_ptr< UniformTSDFVolume > volume_
Definition ScalableTSDFVolume.h:47
Definition Helper.h:71