12 #include <unordered_map>
22 class PinholeCameraParameters;
47 Voxel(
const Eigen::Vector3i &grid_index,
const Eigen::Vector3d &
color)
55 Eigen::Vector3d
color_ = Eigen::Vector3d(0, 0, 0);
73 Eigen::Vector3d
GetCenter()
const override;
87 bool robust =
false)
const override;
92 bool robust =
false)
const override;
96 bool relative =
true)
override;
98 const Eigen::Vector3d ¢er)
override;
100 const Eigen::Vector3d ¢er)
override;
112 Eigen::Vector3i
GetVoxel(
const Eigen::Vector3d &
point)
const;
118 auto voxel = it->second;
119 Eigen::Vector3d local = (voxel.grid_index_.cast<
double>() +
120 Eigen::Vector3d(0.5, 0.5, 0.5)) *
124 return Eigen::Vector3d::Zero();
136 const Eigen::Vector3i &index)
const;
141 const std::vector<Eigen::Vector3d> &queries);
153 const Image &depth_map,
155 bool keep_voxels_outside_image);
167 const Image &silhouette_mask,
169 bool keep_voxels_outside_image);
179 std::shared_ptr<geometry::Octree>
ToOctree(
const size_t &max_depth)
const;
190 static std::shared_ptr<VoxelGrid>
CreateDense(
const Eigen::Vector3d &origin,
191 const Eigen::Vector3d &
color,
230 const Eigen::Vector3d &min_bound,
231 const Eigen::Vector3d &max_bound,
254 const Eigen::Vector3d &min_bound,
255 const Eigen::Vector3d &max_bound);
266 Eigen::Vector3d
origin_ = Eigen::Vector3d::Zero();
269 Eigen::Matrix3d
rotation_ = Eigen::Matrix3d::Identity();
271 std::unordered_map<Eigen::Vector3i,
286 void Add(
const Eigen::Vector3i &voxel_index) {
289 "Tried to aggregate ColorVoxel with different "
295 void Add(
const Eigen::Vector3i &voxel_index,
const Eigen::Vector3d &
color) {
326 min_color_(
Eigen::Vector3d::Constant(
327 std::numeric_limits<double>::max())),
328 max_color_(
Eigen::Vector3d::Constant(
329 std::numeric_limits<double>::lowest())) {}
332 void Add(
const Eigen::Vector3i &voxel_index) {
335 "Tried to aggregate ColorVoxel with different "
341 void Add(
const Eigen::Vector3i &voxel_index,
const Eigen::Vector3d &
color) {
345 min_color_ = min_color_.cwiseMin(
color);
346 max_color_ = max_color_.cwiseMax(
color);
371 Eigen::Vector3d min_color_;
372 Eigen::Vector3d max_color_;
math::float4 color
Definition: LineSetBuffers.cpp:45
#define LogWarning(...)
Definition: Logging.h:63
Point< Real, 3 > point
Definition: SurfaceReconstructionPoisson.cpp:163
Contains both intrinsic and extrinsic pinhole camera parameters.
Definition: PinholeCameraParameters.h:21
Class to aggregate color values from different votes in one voxel Can be used to compute min,...
Definition: VoxelGrid.h:321
Eigen::Vector3d color_
Definition: VoxelGrid.h:368
void Add(const Eigen::Vector3i &voxel_index, const Eigen::Vector3d &color)
Definition: VoxelGrid.h:341
AggColorVoxel()
Definition: VoxelGrid.h:323
Eigen::Vector3d GetMaxColor() const
Definition: VoxelGrid.h:361
Eigen::Vector3i GetVoxelIndex() const
Definition: VoxelGrid.h:349
Eigen::Vector3i voxel_index_
Definition: VoxelGrid.h:367
Eigen::Vector3d GetSumColor() const
Definition: VoxelGrid.h:363
void Add(const Eigen::Vector3i &voxel_index)
Definition: VoxelGrid.h:332
Eigen::Vector3d GetAverageColor() const
Definition: VoxelGrid.h:351
int num_of_points_
Definition: VoxelGrid.h:366
Eigen::Vector3d GetMinColor() const
Definition: VoxelGrid.h:359
Class to aggregate color values from different votes in one voxel Computes the average color value in...
Definition: VoxelGrid.h:281
AvgColorVoxel()
Definition: VoxelGrid.h:283
void Add(const Eigen::Vector3i &voxel_index, const Eigen::Vector3d &color)
Definition: VoxelGrid.h:295
Eigen::Vector3d color_
Definition: VoxelGrid.h:314
void Add(const Eigen::Vector3i &voxel_index)
Definition: VoxelGrid.h:286
Eigen::Vector3i GetVoxelIndex() const
Definition: VoxelGrid.h:301
int num_of_points_
Definition: VoxelGrid.h:312
Eigen::Vector3i voxel_index_
Definition: VoxelGrid.h:313
Eigen::Vector3d GetAverageColor() const
Definition: VoxelGrid.h:303
A bounding box that is aligned along the coordinate axes and defined by the min_bound and max_bound.
Definition: BoundingVolume.h:172
The base geometry class for 3D geometries.
Definition: Geometry3D.h:28
The base geometry class.
Definition: Geometry.h:18
GeometryType
Specifies possible geometry types.
Definition: Geometry.h:23
The Image class stores image with customizable width, height, num of channels and bytes per channel.
Definition: Image.h:34
Octree datastructure.
Definition: Octree.h:244
A bounding box oriented along an arbitrary frame of reference.
Definition: BoundingVolume.h:25
A point cloud consists of point coordinates, and optionally point colors and point normals.
Definition: PointCloud.h:36
Triangle mesh contains vertices and triangles represented by the indices to the vertices.
Definition: TriangleMesh.h:35
VoxelGrid is a collection of voxels which are aligned in grid.
Definition: VoxelGrid.h:61
static std::shared_ptr< VoxelGrid > CreateFromTriangleMesh(const TriangleMesh &input, double voxel_size)
Definition: VoxelGridFactory.cpp:166
AxisAlignedBoundingBox GetAxisAlignedBoundingBox() const override
Definition: VoxelGrid.cpp:108
void CreateFromOctree(const Octree &octree)
Definition: VoxelGrid.cpp:250
VoxelGrid & CarveSilhouette(const Image &silhouette_mask, const camera::PinholeCameraParameters &camera_parameter, bool keep_voxels_outside_image)
Definition: VoxelGrid.cpp:340
VoxelPoolingMode
Possible ways of determining voxel color from PointCloud.
Definition: VoxelGrid.h:200
VoxelGrid operator+(const VoxelGrid &voxelgrid) const
Definition: VoxelGrid.cpp:204
std::vector< Eigen::Vector3d > GetVoxelBoundingPoints(const Eigen::Vector3i &index) const
Return a vector of 3D coordinates that define the indexed voxel cube.
Definition: VoxelGrid.cpp:215
VoxelGrid()
Default Constructor.
Definition: VoxelGrid.h:64
VoxelGrid & Rotate(const Eigen::Matrix3d &R, const Eigen::Vector3d ¢er) override
Apply rotation to the geometry coordinates and normals. Given a rotation matrix , and center ,...
Definition: VoxelGrid.cpp:145
OrientedBoundingBox GetOrientedBoundingBox(bool robust=false) const override
Definition: VoxelGrid.cpp:115
std::unordered_map< Eigen::Vector3i, Voxel, utility::hash_eigen< Eigen::Vector3i > > voxels_
Voxels contained in voxel grid.
Definition: VoxelGrid.h:274
bool IsEmpty() const override
Returns true iff the geometry is empty.
Definition: VoxelGrid.cpp:37
Eigen::Vector3d GetVoxelCenterCoordinate(const Eigen::Vector3i &idx) const
Function that returns the 3d coordinates of the queried voxel center.
Definition: VoxelGrid.h:115
Eigen::Vector3d origin_
Coordinate of the origin point.
Definition: VoxelGrid.h:266
VoxelGrid & Clear() override
Clear all elements in the geometry.
Definition: VoxelGrid.cpp:30
VoxelGrid & CarveDepthMap(const Image &depth_map, const camera::PinholeCameraParameters &camera_parameter, bool keep_voxels_outside_image)
Definition: VoxelGrid.cpp:296
VoxelGrid & Scale(const double scale, const Eigen::Vector3d ¢er) override
Apply scaling to the geometry coordinates. Given a scaling factor , and center , a given point is tr...
Definition: VoxelGrid.cpp:139
Eigen::Vector3d GetMinBound() const override
Returns min bounds for geometry coordinates.
Definition: VoxelGrid.cpp:39
bool HasVoxels() const
Returns true if the voxel grid contains voxels.
Definition: VoxelGrid.h:106
std::vector< bool > CheckIfIncluded(const std::vector< Eigen::Vector3d > &queries)
Definition: VoxelGrid.cpp:237
VoxelGrid & Transform(const Eigen::Matrix4d &transformation) override
Apply transformation (4x4 matrix) to the geometry coordinates.
Definition: VoxelGrid.cpp:125
bool HasColors() const
Returns true if the voxel grid contains voxel colors.
Definition: VoxelGrid.h:108
Eigen::Vector3d GetMaxBound() const override
Returns max bounds for geometry coordinates.
Definition: VoxelGrid.cpp:54
std::vector< Eigen::Vector3d > GetAllVoxelCorners() const
Returns the 3D coordinates of all corners of every voxel in the grid.
Definition: VoxelGrid.cpp:69
static std::shared_ptr< VoxelGrid > CreateFromTriangleMeshWithinBounds(const TriangleMesh &input, double voxel_size, const Eigen::Vector3d &min_bound, const Eigen::Vector3d &max_bound)
Definition: VoxelGridFactory.cpp:108
Eigen::Vector3d GetCenter() const override
Returns the center of the geometry coordinates.
Definition: VoxelGrid.cpp:92
static std::shared_ptr< VoxelGrid > CreateFromPointCloudWithinBounds(const PointCloud &input, double voxel_size, const Eigen::Vector3d &min_bound, const Eigen::Vector3d &max_bound, VoxelPoolingMode color_mode=VoxelPoolingMode::AVG)
Definition: VoxelGridFactory.cpp:44
void AddVoxel(const Voxel &voxel)
Add a voxel with specified grid index and color.
Definition: VoxelGrid.cpp:231
VoxelGrid & Translate(const Eigen::Vector3d &translation, bool relative=true) override
Apply translation to the geometry coordinates.
Definition: VoxelGrid.cpp:133
std::vector< Voxel > GetVoxels() const
Definition: VoxelGrid.cpp:384
double voxel_size_
Size of the voxel.
Definition: VoxelGrid.h:264
static std::shared_ptr< VoxelGrid > CreateDense(const Eigen::Vector3d &origin, const Eigen::Vector3d &color, double voxel_size, double width, double height, double depth)
Definition: VoxelGridFactory.cpp:21
static std::shared_ptr< VoxelGrid > CreateFromPointCloud(const PointCloud &input, double voxel_size, VoxelPoolingMode color_mode=VoxelPoolingMode::AVG)
Definition: VoxelGridFactory.cpp:97
void RemoveVoxel(const Eigen::Vector3i &idx)
Remove a voxel with specified grid index.
Definition: VoxelGrid.cpp:235
VoxelGrid & operator+=(const VoxelGrid &voxelgrid)
Definition: VoxelGrid.cpp:153
Eigen::Vector3i GetVoxel(const Eigen::Vector3d &point) const
Returns voxel index given query point.
Definition: VoxelGrid.cpp:208
OrientedBoundingBox GetMinimalOrientedBoundingBox(bool robust=false) const override
Definition: VoxelGrid.cpp:119
std::shared_ptr< geometry::Octree > ToOctree(const size_t &max_depth) const
Definition: VoxelGrid.cpp:289
Eigen::Matrix3d rotation_
Definition: VoxelGrid.h:269
~VoxelGrid() override
Definition: VoxelGrid.h:67
Base Voxel class, containing grid id and color.
Definition: VoxelGrid.h:35
~Voxel()
Definition: VoxelGrid.h:49
Eigen::Vector3i grid_index_
Grid coordinate index of the voxel.
Definition: VoxelGrid.h:53
Voxel(const Eigen::Vector3i &grid_index, const Eigen::Vector3d &color)
Parameterized Constructor.
Definition: VoxelGrid.h:47
Eigen::Vector3d color_
Color of the voxel.
Definition: VoxelGrid.h:55
Voxel(const Eigen::Vector3i &grid_index)
Parameterized Constructor.
Definition: VoxelGrid.h:42
Voxel()
Default Constructor.
Definition: VoxelGrid.h:38
Definition: NonRigidOptimizer.cpp:22
Definition: PinholeCameraIntrinsic.cpp:16