Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
VoxelBlockGrid.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <unordered_map>
11
12#include "open3d/core/Tensor.h"
15
16namespace open3d {
17namespace t {
18namespace geometry {
19namespace kernel {
20namespace voxel_grid {
21
22using index_t = int;
23
24void PointCloudTouch(std::shared_ptr<core::HashMap>& hashmap,
25 const core::Tensor& points,
26 core::Tensor& voxel_block_coords,
27 index_t voxel_grid_resolution,
28 float voxel_size,
29 float sdf_trunc);
30
31void DepthTouch(std::shared_ptr<core::HashMap>& hashmap,
32 const core::Tensor& depth,
33 const core::Tensor& intrinsic,
34 const core::Tensor& extrinsic,
35 core::Tensor& voxel_block_coords,
36 index_t voxel_grid_resolution,
37 float voxel_size,
38 float sdf_trunc,
39 float depth_scale,
40 float depth_max,
42
44 const core::Tensor& block_keys,
45 core::Tensor& voxel_coords,
46 core::Tensor& flattened_indices,
47 index_t block_resolution,
48 float voxel_size);
49
50void Integrate(const core::Tensor& depth,
51 const core::Tensor& color,
52 const core::Tensor& block_indices,
53 const core::Tensor& block_keys,
54 TensorMap& block_value_map,
55 const core::Tensor& depth_intrinsic,
56 const core::Tensor& color_intrinsic,
57 const core::Tensor& extrinsic,
58 index_t resolution,
59 float voxel_size,
60 float sdf_trunc,
61 float depth_scale,
62 float depth_max);
63
64void EstimateRange(const core::Tensor& block_keys,
65 core::Tensor& range_minmax_map,
66 const core::Tensor& intrinsics,
67 const core::Tensor& extrinsics,
68 int h,
69 int w,
70 int down_factor,
71 int64_t block_resolution,
72 float voxel_size,
73 float depth_min,
74 float depth_max,
75 core::Tensor& fragment_buffer);
76
77void RayCast(std::shared_ptr<core::HashMap>& hashmap,
78 const TensorMap& block_value_map,
79 const core::Tensor& range_map,
80 TensorMap& renderings_map,
81 const core::Tensor& intrinsic,
82 const core::Tensor& extrinsic,
83 index_t h,
84 index_t w,
85 index_t block_resolution,
86 float voxel_size,
87 float depth_scale,
88 float depth_min,
89 float depth_max,
90 float weight_threshold,
91 float trunc_voxel_multiplier,
92 int range_map_down_factor);
93
94void ExtractPointCloud(const core::Tensor& block_indices,
95 const core::Tensor& nb_block_indices,
96 const core::Tensor& nb_block_masks,
97 const core::Tensor& block_keys,
98 const TensorMap& block_value_map,
100 core::Tensor& normals,
101 core::Tensor& colors,
102 index_t block_resolution,
103 float voxel_size,
104 float weight_threshold,
105 index_t& valid_size);
106
107void ExtractTriangleMesh(const core::Tensor& block_indices,
108 const core::Tensor& inv_block_indices,
109 const core::Tensor& nb_block_indices,
110 const core::Tensor& nb_block_masks,
111 const core::Tensor& block_keys,
112 const TensorMap& block_value_map,
113 core::Tensor& vertices,
114 core::Tensor& triangles,
115 core::Tensor& vertex_normals,
116 core::Tensor& vertex_colors,
117 index_t block_resolution,
118 float voxel_size,
119 float weight_threshold,
120 index_t& vertex_count);
121
123void PointCloudTouchCPU(std::shared_ptr<core::HashMap>& hashmap,
124 const core::Tensor& points,
125 core::Tensor& voxel_block_coords,
126 index_t voxel_grid_resolution,
127 float voxel_size,
128 float sdf_trunc);
129
130void DepthTouchCPU(std::shared_ptr<core::HashMap>& hashmap,
131 const core::Tensor& depth,
132 const core::Tensor& intrinsic,
133 const core::Tensor& extrinsic,
134 core::Tensor& voxel_block_coords,
135 index_t voxel_grid_resolution,
136 float voxel_size,
137 float sdf_trunc,
138 float depth_scale,
139 float depth_max,
141
143 const core::Tensor& block_keys,
144 core::Tensor& voxel_coords,
145 core::Tensor& flattened_indices,
146 index_t block_resolution,
147 float voxel_size);
148
149template <typename input_depth_t,
150 typename input_color_t,
151 typename tsdf_t,
152 typename weight_t,
153 typename color_t>
154void IntegrateCPU(const core::Tensor& depth,
155 const core::Tensor& color,
156 const core::Tensor& block_indices,
157 const core::Tensor& block_keys,
158 TensorMap& block_value_map,
159 const core::Tensor& depth_intrinsic,
160 const core::Tensor& color_intrinsic,
161 const core::Tensor& extrinsic,
162 index_t resolution,
163 float voxel_size,
164 float sdf_trunc,
165 float depth_scale,
166 float depth_max);
167
168void EstimateRangeCPU(const core::Tensor& block_keys,
169 core::Tensor& range_minmax_map,
170 const core::Tensor& intrinsics,
171 const core::Tensor& extrinsics,
172 int h,
173 int w,
174 int down_factor,
175 int64_t block_resolution,
176 float voxel_size,
177 float depth_min,
178 float depth_max,
179 core::Tensor& fragment_buffer);
180
181template <typename tsdf_t, typename weight_t, typename color_t>
182void RayCastCPU(std::shared_ptr<core::HashMap>& hashmap,
183 const TensorMap& block_value_map,
184 const core::Tensor& range_map,
185 TensorMap& renderings_map,
186 const core::Tensor& intrinsic,
187 const core::Tensor& extrinsic,
188 index_t h,
189 index_t w,
190 index_t block_resolution,
191 float voxel_size,
192 float depth_scale,
193 float depth_min,
194 float depth_max,
195 float weight_threshold,
196 float trunc_voxel_multiplier,
197 int range_map_down_factor);
198
199template <typename tsdf_t, typename weight_t, typename color_t>
200void ExtractPointCloudCPU(const core::Tensor& block_indices,
201 const core::Tensor& nb_block_indices,
202 const core::Tensor& nb_block_masks,
203 const core::Tensor& block_keys,
204 const TensorMap& block_value_map,
206 core::Tensor& normals,
207 core::Tensor& colors,
208 index_t block_resolution,
209 float voxel_size,
210 float weight_threshold,
211 index_t& valid_size);
212
213template <typename tsdf_t, typename weight_t, typename color_t>
214void ExtractTriangleMeshCPU(const core::Tensor& block_indices,
215 const core::Tensor& inv_block_indices,
216 const core::Tensor& nb_block_indices,
217 const core::Tensor& nb_block_masks,
218 const core::Tensor& block_keys,
219 const TensorMap& block_value_map,
220 core::Tensor& vertices,
221 core::Tensor& triangles,
222 core::Tensor& vertex_normals,
223 core::Tensor& vertex_colors,
224 index_t block_resolution,
225 float voxel_size,
226 float weight_threshold,
227 index_t& vertex_count);
228
229#ifdef BUILD_CUDA_MODULE
230void PointCloudTouchCUDA(std::shared_ptr<core::HashMap>& hashmap,
231 const core::Tensor& points,
232 core::Tensor& voxel_block_coords,
233 index_t voxel_grid_resolution,
234 float voxel_size,
235 float sdf_trunc);
236
237void DepthTouchCUDA(std::shared_ptr<core::HashMap>& hashmap,
238 const core::Tensor& depth,
239 const core::Tensor& intrinsic,
240 const core::Tensor& extrinsic,
241 core::Tensor& voxel_block_coords,
242 index_t voxel_grid_resolution,
243 float voxel_size,
244 float sdf_trunc,
245 float depth_scale,
246 float depth_max,
248
249void GetVoxelCoordinatesAndFlattenedIndicesCUDA(const core::Tensor& buf_indices,
250 const core::Tensor& block_keys,
251 core::Tensor& voxel_coords,
252 core::Tensor& flattened_indices,
253 index_t block_resolution,
254 float voxel_size);
255
256template <typename input_depth_t,
257 typename input_color_t,
258 typename tsdf_t,
259 typename weight_t,
260 typename color_t>
261void IntegrateCUDA(const core::Tensor& depth,
262 const core::Tensor& color,
263 const core::Tensor& block_indices,
264 const core::Tensor& block_keys,
265 TensorMap& block_value_map,
266 const core::Tensor& depth_intrinsic,
267 const core::Tensor& color_intrinsic,
268 const core::Tensor& extrinsic,
269 index_t resolution,
270 float voxel_size,
271 float sdf_trunc,
272 float depth_scale,
273 float depth_max);
274
275void EstimateRangeCUDA(const core::Tensor& block_keys,
276 core::Tensor& range_minmax_map,
277 const core::Tensor& intrinsics,
278 const core::Tensor& extrinsics,
279 int h,
280 int w,
281 int down_factor,
282 int64_t block_resolution,
283 float voxel_size,
284 float depth_min,
285 float depth_max,
286 core::Tensor& fragment_buffer);
287
288template <typename tsdf_t, typename weight_t, typename color_t>
289void RayCastCUDA(std::shared_ptr<core::HashMap>& hashmap,
290 const TensorMap& block_value_map,
291 const core::Tensor& range_map,
292 TensorMap& renderings_map,
293 const core::Tensor& intrinsic,
294 const core::Tensor& extrinsic,
295 index_t h,
296 index_t w,
297 index_t block_resolution,
298 float voxel_size,
299 float depth_scale,
300 float depth_min,
301 float depth_max,
302 float weight_threshold,
303 float trunc_voxel_multiplier,
304 int range_map_down_factor);
305
306template <typename tsdf_t, typename weight_t, typename color_t>
307void ExtractPointCloudCUDA(const core::Tensor& block_indices,
308 const core::Tensor& nb_block_indices,
309 const core::Tensor& nb_block_masks,
310 const core::Tensor& block_keys,
311 const TensorMap& block_value_map,
313 core::Tensor& normals,
314 core::Tensor& colors,
315 index_t block_resolution,
316 float voxel_size,
317 float weight_threshold,
318 index_t& valid_size);
319
320template <typename tsdf_t, typename weight_t, typename color_t>
321void ExtractTriangleMeshCUDA(const core::Tensor& block_indices,
322 const core::Tensor& inv_block_indices,
323 const core::Tensor& nb_block_indices,
324 const core::Tensor& nb_block_masks,
325 const core::Tensor& block_keys,
326 const TensorMap& block_value_map,
327 core::Tensor& vertices,
328 core::Tensor& triangles,
329 core::Tensor& vertex_normals,
330 core::Tensor& vertex_colors,
331 index_t block_resolution,
332 float voxel_size,
333 float weight_threshold,
334 index_t& vertex_count);
335
336#endif
337} // namespace voxel_grid
338} // namespace kernel
339} // namespace geometry
340} // namespace t
341} // namespace open3d
math::float4 color
Definition LineSetBuffers.cpp:45
double t
Definition SurfaceReconstructionPoisson.cpp:172
size_t stride
Definition TriangleMeshBuffers.cpp:165
Definition Tensor.h:32
Definition TensorMap.h:31
int points
Definition FilePCD.cpp:54
void ExtractPointCloudCPU(const core::Tensor &block_indices, const core::Tensor &nb_block_indices, const core::Tensor &nb_block_masks, const core::Tensor &block_keys, const TensorMap &block_value_map, core::Tensor &points, core::Tensor &normals, core::Tensor &colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t &valid_size)
Definition VoxelBlockGridImpl.h:1040
void PointCloudTouch(std::shared_ptr< core::HashMap > &hashmap, const core::Tensor &points, core::Tensor &voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc)
Definition VoxelBlockGrid.cpp:24
void GetVoxelCoordinatesAndFlattenedIndicesCPU(const core::Tensor &buf_indices, const core::Tensor &block_keys, core::Tensor &voxel_coords, core::Tensor &flattened_indices, index_t block_resolution, float voxel_size)
Definition VoxelBlockGridImpl.h:38
void Integrate(const core::Tensor &depth, const core::Tensor &color, const core::Tensor &block_indices, const core::Tensor &block_keys, TensorMap &block_value_map, const core::Tensor &depth_intrinsic, const core::Tensor &color_intrinsic, const core::Tensor &extrinsic, index_t resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max)
Definition VoxelBlockGrid.cpp:125
void ExtractTriangleMesh(const core::Tensor &block_indices, const core::Tensor &inv_block_indices, const core::Tensor &nb_block_indices, const core::Tensor &nb_block_masks, const core::Tensor &block_keys, const TensorMap &block_value_map, core::Tensor &vertices, core::Tensor &triangles, core::Tensor &vertex_normals, core::Tensor &vertex_colors, index_t block_resolution, float voxel_size, float weight_threshold, int &vertex_count)
Definition VoxelBlockGrid.cpp:332
void ExtractPointCloud(const core::Tensor &block_indices, const core::Tensor &nb_block_indices, const core::Tensor &nb_block_masks, const core::Tensor &block_keys, const TensorMap &block_value_map, core::Tensor &points, core::Tensor &normals, core::Tensor &colors, index_t block_resolution, float voxel_size, float weight_threshold, int &valid_size)
Definition VoxelBlockGrid.cpp:282
void RayCast(std::shared_ptr< core::HashMap > &hashmap, const TensorMap &block_value_map, const core::Tensor &range_map, TensorMap &renderings_map, const core::Tensor &intrinsic, const core::Tensor &extrinsic, index_t h, index_t w, index_t block_resolution, float voxel_size, float depth_scale, float depth_min, float depth_max, float weight_threshold, float trunc_voxel_multiplier, int range_map_down_factor)
Definition VoxelBlockGrid.cpp:226
void GetVoxelCoordinatesAndFlattenedIndices(const core::Tensor &buf_indices, const core::Tensor &block_keys, core::Tensor &voxel_coords, core::Tensor &flattened_indices, index_t block_resolution, float voxel_size)
Definition VoxelBlockGrid.cpp:65
void EstimateRange(const core::Tensor &block_keys, core::Tensor &range_minmax_map, const core::Tensor &intrinsics, const core::Tensor &extrinsics, int h, int w, int down_factor, int64_t block_resolution, float voxel_size, float depth_min, float depth_max, core::Tensor &fragment_buffer)
Definition VoxelBlockGrid.cpp:193
void IntegrateCPU(const core::Tensor &depth, const core::Tensor &color, const core::Tensor &block_indices, const core::Tensor &block_keys, TensorMap &block_value_map, const core::Tensor &depth_intrinsic, const core::Tensor &color_intrinsic, const core::Tensor &extrinsic, index_t resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max)
Definition VoxelBlockGridImpl.h:149
void PointCloudTouchCPU(std::shared_ptr< core::HashMap > &hashmap, const core::Tensor &points, core::Tensor &voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc)
CPU.
Definition VoxelBlockGridCPU.cpp:55
void ExtractTriangleMeshCPU(const core::Tensor &block_indices, const core::Tensor &inv_block_indices, const core::Tensor &nb_block_indices, const core::Tensor &nb_block_masks, const core::Tensor &block_keys, const TensorMap &block_value_map, core::Tensor &vertices, core::Tensor &triangles, core::Tensor &vertex_normals, core::Tensor &vertex_colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t &vertex_count)
Definition VoxelBlockGridImpl.h:1297
void DepthTouch(std::shared_ptr< core::HashMap > &hashmap, const core::Tensor &depth, const core::Tensor &intrinsic, const core::Tensor &extrinsic, core::Tensor &voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max, index_t stride)
Definition VoxelBlockGrid.cpp:41
void RayCastCPU(std::shared_ptr< core::HashMap > &hashmap, const TensorMap &block_value_map, const core::Tensor &range_map, TensorMap &renderings_map, const core::Tensor &intrinsic, const core::Tensor &extrinsic, index_t h, index_t w, index_t block_resolution, float voxel_size, float depth_scale, float depth_min, float depth_max, float weight_threshold, float trunc_voxel_multiplier, int range_map_down_factor)
Definition VoxelBlockGridImpl.h:541
int index_t
Definition VoxelBlockGrid.h:22
void EstimateRangeCPU(const core::Tensor &block_keys, core::Tensor &range_minmax_map, const core::Tensor &intrinsics, const core::Tensor &extrinsics, int h, int w, int down_factor, int64_t block_resolution, float voxel_size, float depth_min, float depth_max, core::Tensor &fragment_buffer)
Definition VoxelBlockGridImpl.h:301
void DepthTouchCPU(std::shared_ptr< core::HashMap > &hashmap, const core::Tensor &depth, const core::Tensor &intrinsic, const core::Tensor &extrinsic, core::Tensor &voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max, index_t stride)
Definition VoxelBlockGridCPU.cpp:117
Definition PinholeCameraIntrinsic.cpp:16