2021SC@SDUSC
open3D体素化
本篇解读voxel(体元/体素)的基本类Voxel,以及VoxelGrid和VoxelGridIO两个体素网格的基本类。
VoxelGrid.h
包含Voxel和VoxelGrid类。
Voxel(体素),包含网格 ID 和颜色;VoxelGrid(体素网格)是在网格中对齐的体素的集合。
-
注意点:
-
由于需要解析的代码较多,为使代码解读更加清晰,我将代码分析的详细过程写在代码段的注释中。
-
中文部分是源码解读,包含代码分析和遇到的问题。
-
#pragma once
#include <Eigen/Core>
#include <memory>
#include <unordered_map>
#include <vector>
#include "open3d/geometry/Geometry3D.h"
#include "open3d/utility/Helper.h"
#include "open3d/utility/Logging.h"
namespace open3d {
namespace camera {
class PinholeCameraParameters;
}
namespace geometry {
class PointCloud;
class TriangleMesh;
class Octree;
class Image;
/// \class Voxel
/// 基本体素类,包含网格id和颜色。
class Voxel {
public:
/// 默认构造函数。
Voxel() {}
/// 参数化构造函数。
/// grid_index 体素的网格坐标索引。
Voxel(const Eigen::Vector3i &grid_index) : grid_index_(grid_index) {}
/// 参数化构造函数。
/// grid_index 体素的网格坐标索引。
/// color 体素的颜色。
Voxel(const Eigen::Vector3i &grid_index, const Eigen::Vector3d &color)
: grid_index_(grid_index), color_(color) {}
~Voxel() {}
public:
/// 体素的网格坐标索引。
Eigen::Vector3i grid_index_ = Eigen::Vector3i(0, 0, 0);
/// 体素的颜色。
Eigen::Vector3d color_ = Eigen::Vector3d(0, 0, 0);
};
/// \class VoxelGrid
/// VoxelGrid是一个在网格中对齐的体素集合。
class VoxelGrid : public Geometry3D {
public:
/// 默认构造函数
VoxelGrid() : Geometry3D(Geometry::GeometryType::VoxelGrid) {}
/// 拷贝构造函数。
VoxelGrid(const VoxelGrid &src_voxel_grid);
~VoxelGrid() override {}
VoxelGrid &Clear() override;
bool IsEmpty() const override;
Eigen::Vector3d GetMinBound() const override;
Eigen::Vector3d GetMaxBound() const override;
Eigen::Vector3d GetCenter() const override;
AxisAlignedBoundingBox GetAxisAlignedBoundingBox() const override;
OrientedBoundingBox GetOrientedBoundingBox() const override;
VoxelGrid &Transform(const E