supereight
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
se Namespace Reference

Helper wrapper to allocate and de-allocate octants in the octree. More...

Namespaces

 algorithms
 
 allocator
 
 colours
 
 fetcher
 
 integrator
 Helper wrapper to integrate data in the octree.
 
 io
 
 keyops
 
 math
 
 meshing
 
 octantops
 
 preprocessor
 
 propagator
 
 raycaster
 
 str_utils
 
 updater
 
 visitor
 
 yaml
 

Classes

struct  AppConfig
 
class  BaseIterator
 Iterates over all valid data in the octree at the last scale it was updated at. More...
 
struct  BaseTraits
 
struct  BaseTraits< BlocksIterator< OctreeT > >
 
struct  BaseTraits< FrustumIterator< MapT, SensorT > >
 
struct  BaseTraits< LeavesIterator< OctreeT > >
 
struct  BaseTraits< NodesIterator< OctreeT > >
 
struct  BaseTraits< OctreeIterator< OctreeT > >
 
struct  BaseTraits< UpdateIterator< OctreeT > >
 
class  Block
 The actual block used in the tree. More...
 
class  BlockMultiRes
 
class  BlockMultiRes< se::Data< FldT, ColB, SemB >, BlockSize, DerivedT >
 
class  BlockMultiRes< se::Data< se::Field::Occupancy, ColB, SemB >, BlockSize, DerivedT >
 
class  BlockMultiRes< se::Data< se::Field::TSDF, ColB, SemB >, BlockSize, DerivedT >
 
class  BlockSingleRes
 The base used for single-resolution blocks. More...
 
class  BlocksIterator
 
class  BoostMemoryPool
 
struct  ColourData
 
struct  ColourData< se::Colour::On >
 
struct  ColourDataConfig
 
struct  ColourDataConfig< se::Colour::On >
 
struct  ColourDeltaData
 
struct  ColourDeltaData< se::Colour::On >
 
struct  Config
 
struct  crtp
 helper class for static_cast removal. More...
 
struct  Data
 
struct  DataConfig
 
struct  DeltaData
 
class  DensePoolingImage
 
struct  FieldData
 
struct  FieldData< se::Field::Occupancy >
 
struct  FieldData< se::Field::TSDF >
 
struct  FieldDataConfig
 
struct  FieldDataConfig< se::Field::Occupancy >
 
struct  FieldDataConfig< se::Field::TSDF >
 
struct  FieldDeltaData
 DELTA DATA ///. More...
 
struct  FieldDeltaData< se::Field::Occupancy >
 
struct  FieldDeltaData< se::Field::TSDF >
 
class  FrustumIterator
 
class  Image
 
class  InteriorNetReader
 Reader for the InteriorNet dataset. More...
 
class  LeavesIterator
 
class  Map
 
class  Map< se::Data< FldT, ColB, SemB >, ResT, BlockSize >
 
struct  MapConfig
 
class  MapIntegrator
 
struct  MeshFace
 
class  NewerCollegeReader
 Reader for the Newer College dataset. More...
 
class  Node
 The node type of the octant. More...
 
class  NodeMultiRes
 
class  NodeMultiRes< se::Data< FldT, ColB, SemB >, DerivedT >
 
class  NodeMultiRes< se::Data< se::Field::Occupancy, ColB, SemB >, DerivedT >
 Multi-resolution data of a Occupancy node. More...
 
class  NodeMultiRes< se::Data< se::Field::TSDF, ColB, SemB >, DerivedT >
 Multi-resolution data of a TSDF node. More...
 
class  NodeSingleRes
 Single-resolution data of a node. More...
 
class  NodesIterator
 
class  OctantBase
 This class only helps to dynamic cast the octant to the right type and builds the base of nodes and blocks. More...
 
class  Octree
 The octree is the memory manager of the map. More...
 
class  OctreeIterator
 
class  OpenNIReader
 Reader for the Microsoft Kinect and Asus Xtion using the OpenNI2 driver. More...
 
class  OusterLidar
 
struct  OusterLidarConfig
 
class  PinholeCamera
 
struct  PinholeCameraConfig
 
struct  Pixel
 
class  RAWReader
 Reader for SLAMBench 1.0 .raw files. More...
 
class  RaycastCarver
 
class  Reader
 Base abstract class for dataset readers. More...
 
struct  ReaderConfig
 
struct  SemanticData
 
struct  SemanticData< se::Semantics::On >
 
struct  SemanticDataConfig
 
struct  SemanticDataConfig< se::Semantics::On >
 
class  SensorBase
 
struct  SensorBaseConfig
 
struct  TrackData
 
class  Tracker
 
struct  TrackerConfig
 
class  TUMReader
 Reader for the TUM RGBD dataset. More...
 
class  UpdateIterator
 
class  Updater
 
class  Updater< Map< Data< se::Field::Occupancy, ColB, SemB >, se::Res::Multi, BlockSize >, SensorT >
 
class  Updater< Map< Data< se::Field::TSDF, ColB, SemB >, se::Res::Multi, BlockSize >, SensorT >
 
class  Updater< Map< Data< se::Field::TSDF, ColB, SemB >, se::Res::Single, BlockSize >, SensorT >
 
class  VolumeCarver
 
class  VolumeCarver< Map< Data< se::Field::Occupancy, ColB, SemB >, se::Res::Multi, BlockSize >, SensorT >
 Allocate the frustum using a map-to-camera volume carving approach. More...
 
struct  VolumeCarverAllocation
 
class  VoxelBlockRayIterator
 

Typedefs

using Value = float
 
using Status = int
 
template<typename FaceT >
using Mesh = std::vector< FaceT >
 Meshes are represented as lists of faces. More...
 
typedef MeshFace< 3 > Triangle
 
typedef Mesh< TriangleTriangleMesh
 
typedef MeshFace< 4 > Quad
 
typedef Mesh< QuadQuadMesh
 
typedef Data< se::Field::Occupancy, se::Colour::Off, se::Semantics::OffOccupancyData
 
typedef Data< se::Field::Occupancy, se::Colour::On, se::Semantics::OffOccupancyColData
 
typedef Data< se::Field::Occupancy, se::Colour::Off, se::Semantics::OnOccupancySemData
 
typedef Data< se::Field::Occupancy, se::Colour::On, se::Semantics::OnOccupancyColSemData
 
typedef DataConfig< se::Field::Occupancy, se::Colour::Off, se::Semantics::OffOccupancyDataConfig
 
typedef DataConfig< se::Field::Occupancy, se::Colour::On, se::Semantics::OffOccupancyColDataConfig
 
typedef DataConfig< se::Field::Occupancy, se::Colour::Off, se::Semantics::OnOccupancySemDataConfig
 
typedef DataConfig< se::Field::Occupancy, se::Colour::On, se::Semantics::OnOccupancyColSemDataConfig
 
typedef Data< se::Field::TSDF, se::Colour::Off, se::Semantics::OffTSDFData
 
typedef Data< se::Field::TSDF, se::Colour::On, se::Semantics::OffTSDFColData
 
typedef Data< se::Field::TSDF, se::Colour::Off, se::Semantics::OnTSDFSemData
 
typedef Data< se::Field::TSDF, se::Colour::On, se::Semantics::OnTSDFColSemData
 
typedef DataConfig< se::Field::TSDF, se::Colour::Off, se::Semantics::OffTSDFDataConfig
 
typedef DataConfig< se::Field::TSDF, se::Colour::On, se::Semantics::OffTSDFColDataConfig
 
typedef DataConfig< se::Field::TSDF, se::Colour::Off, se::Semantics::OnTSDFSemDataConfig
 
typedef DataConfig< se::Field::TSDF, se::Colour::On, se::Semantics::OnTSDFColSemDataConfig
 
template<se::Field FldT = se::Field::TSDF, se::Colour ColB = se::Colour::Off, se::Semantics SemB = se::Semantics::Off, se::Res ResT = se::Res::Single, int BlockSize = 8>
using MapD = Map< Data< FldT, ColB, SemB >, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using OccupancyMap = Map< OccupancyData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using OccupancyColMap = Map< OccupancyColData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using OccupancySemMap = Map< OccupancySemData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using OccupancyColSemMap = Map< OccupancyColSemData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using TSDFMap = Map< TSDFData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using TSDFColMap = Map< TSDFColData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using TSDFSemMap = Map< TSDFSemData, ResT, BlockSize >
 
template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using TSDFColSemMap = Map< TSDFColSemData, ResT, BlockSize >
 
typedef uint64_t key_t
 key = 1 bit buffer + 57 bits of morton code + 6 bits of scale information The maxium scale is limited by 57 / 3 = 19 scales More...
 
typedef uint64_t code_t
 The type of the Morton code. More...
 
typedef uint64_t scale_t
 The type of the scale in the morton code. More...
 
typedef unsigned int idx_t
 Child or voxel index type. More...
 
typedef float field_t
 The type of the stored field (e.g. TSDF, ESDF or occupancy) More...
 
typedef Eigen::Matrix< field_t, 3, 1 > field_vec_t
 
typedef se::field_t weight_t
 The type of the field type weight. More...
 
typedef float time_stamp_t
 The type of the time stamp. More...
 
typedef uint32_t rgba_t
 The type of the colour. More...
 
typedef short semantics_t
 The type of the semantic class. More...
 

Enumerations

enum  VarianceState { VarianceState::Constant, VarianceState::Gradient, VarianceState::Undefined }
 
enum  UncertaintyModel { UncertaintyModel::Linear, UncertaintyModel::Quadratic }
 DATA CONFIG ///. More...
 
enum  Field { Field::TSDF, Field::Occupancy }
 
enum  Colour { Colour::On = true, Colour::Off = false }
 
enum  Semantics { Semantics::On = true, Semantics::Off = false }
 
enum  Res { Res::Single, Res::Multi }
 
enum  Integ { Integ::Simple, Integ::LiDAR, Integ::PinholeCamera }
 
enum  Safe { Safe::On = true, Safe::Off = false }
 
enum  AllocMeth { AllocMeth::Raycasting, AllocMeth::VoxelCarving }
 
enum  Rep { Rep::Surface, Rep::Freespace }
 
enum  Sort { Sort::SmallToLarge, Sort::LargeToSmall }
 The enum classes to define the sorting templates. More...
 
enum  ReaderType {
  ReaderType::OPENNI, ReaderType::RAW, ReaderType::TUM, ReaderType::INTERIORNET,
  ReaderType::NEWERCOLLEGE, ReaderType::UNKNOWN
}
 
enum  ReaderStatus : int { ReaderStatus::ok = 0, ReaderStatus::skip, ReaderStatus::eof, ReaderStatus::error }
 The result of trying to read a depth/RGB image or a pose. More...
 

Functions

static uint32_t pack_rgba (const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t a)
 Pack the individual RGBA channels into a single 32-bit unsigned integer. More...
 
static uint32_t pack_rgba (const Eigen::Vector4f &color)
 Pack a color stored in an Eigen vector into a single 32-bit unsigned integer. More...
 
static uint32_t pack_rgba (const Eigen::Vector3f &color)
 Pack a color stored in an Eigen vector into a single 32-bit unsigned integer. More...
 
static uint32_t pack_rgba (const Eigen::Vector4i &color)
 Pack a color stored in an Eigen vector into a single 32-bit unsigned integer. More...
 
static uint32_t pack_rgba (const Eigen::Vector3i &color)
 Pack a color stored in an Eigen vector into a single 32-bit unsigned integer. More...
 
static uint8_t r_from_rgba (const uint32_t rgba)
 Get the value of the red channel from a 32-bit packed RGBA value. More...
 
static uint8_t g_from_rgba (const uint32_t rgba)
 Get the value of the green channel from a 32-bit packed RGBA value. More...
 
static uint8_t b_from_rgba (const uint32_t rgba)
 Get the value of the blue channel from a 32-bit packed RGBA value. More...
 
static uint8_t a_from_rgba (const uint32_t rgba)
 Get the value of the alpha channel from a 32-bit packed RGBA value. More...
 
static uint32_t blend (const uint32_t rgba_1, const uint32_t rgba_2, const float alpha)
 Blend two RGBA colors based on the value of the blending parameter alpha. More...
 
static void rgb_to_rgba (const uint8_t *rgb, uint32_t *rgba, size_t num_pixels)
 
static void rgba_to_rgb (const uint32_t *rgba, uint8_t *rgb, size_t num_pixels)
 
void depth_to_rgba (uint32_t *depth_RGBA_image_data, const float *depth_image_data, const Eigen::Vector2i &depth_image_res, const float min_depth, const float max_depth)
 Convert a depth image to an RGBA image to allow visualizing it. More...
 
int save_depth_png (const float *depth_image_data, const Eigen::Vector2i &depth_image_res, const std::string &filename, const float scale=1000.0f)
 Save a depth image with depth values in metres to a PNG. More...
 
int save_depth_png (const uint16_t *depth_image_data, const Eigen::Vector2i &depth_image_res, const std::string &filename)
 Save a depth image with depth values in millimetres to a PNG. More...
 
int load_depth_png (float **depth_image_data, Eigen::Vector2i &depth_image_res, const std::string &filename, const float inverse_scale=1.0f/1000.0f)
 Load a PNG depth image into a buffer with depth values in metres. More...
 
int load_depth_png (uint16_t **depth_image_data, Eigen::Vector2i &depth_image_res, const std::string &filename)
 Load a PNG depth image into a buffer with depth values in millimetres. More...
 
int save_depth_pgm (const float *depth_image_data, const Eigen::Vector2i &depth_image_res, const std::string &filename, const float scale=1000.0f)
 Save a depth image with depth values in metres to a P2 PGM. More...
 
int save_depth_pgm (const uint16_t *depth_image_data, const Eigen::Vector2i &depth_image_res, const std::string &filename)
 Save a depth image with depth values in millimetres to a P2 PGM. More...
 
int load_depth_pgm (float **depth_image_data, Eigen::Vector2i &depth_image_res, const std::string &filename, const float inverse_scale=1.0f/1000.0f)
 Load a P2 PGM depth image into a buffer with depth values in metres. More...
 
int load_depth_pgm (uint16_t **depth_image_data, Eigen::Vector2i &depth_image_res, const std::string &filename)
 Load a P2 PGM depth image into a buffer with depth values in millimeters. More...
 
static Eigen::Vector2i round_pixel (const Eigen::Vector2f &pixel_f)
 
static void convert_to_output_rgba_img (const se::Image< uint32_t > &input_rgba_img, uint32_t *output_rgba_img_data)
 
static void convert_to_output_depth_img (const se::Image< float > &input_depth_img, uint32_t *output_depth_img_data)
 
static void convert_to_output_depth_img (const se::Image< float > &input_depth_img, const float min_depth, const float max_depth, uint32_t *output_depth_img_data)
 
static Eigen::Vector3f get_sample_coord (const Eigen::Vector3i &octant_coord, const int octant_size)
 compute the sample coordinates for a given octant coordinate More...
 
template<typename ConfigT >
float compute_three_sigma (const se::field_t depth_value, const float sigma_min, const float sigma_max, const ConfigT config)
 Compute the estimated uncertainty boundary for a given depth measurement. More...
 
template<typename ConfigT >
float compute_tau (const se::field_t depth_value, const float tau_min, const float tau_max, const ConfigT config)
 Compute the estimated wall thickness tau for a given depth measurement. More...
 
template<typename OctreeT >
QuadMesh octree_structure_mesh (OctreeT &octree)
 Extract the octree structure as a quadrilateral mesh. More...
 
std::ostream & operator<< (std::ostream &os, const FieldDataConfig< se::Field::Occupancy > &c)
 
std::ostream & operator<< (std::ostream &os, const FieldDataConfig< se::Field::TSDF > &c)
 
template<se::Colour ColB>
std::ostream & operator<< (std::ostream &os, const ColourDataConfig< ColB > &)
 
std::ostream & operator<< (std::ostream &os, const ColourDataConfig< se::Colour::On > &c)
 
template<se::Semantics SemB>
std::ostream & operator<< (std::ostream &os, const SemanticDataConfig< SemB > &)
 
std::ostream & operator<< (std::ostream &os, const SemanticDataConfig< se::Semantics::On > &c)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
std::ostream & operator<< (std::ostream &os, const DataConfig< FldT, ColB, SemB > &c)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
void set_invalid (Data< FldT, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
void set_invalid (Data< se::Field::TSDF, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
void set_invalid (Data< se::Field::Occupancy, ColB, SemB > &data)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
bool is_valid (const Data< FldT, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
bool is_valid (const Data< se::Field::TSDF, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
bool is_valid (const Data< se::Field::Occupancy, ColB, SemB > &data)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
bool is_invalid (const Data< FldT, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
bool is_invalid (const Data< se::Field::TSDF, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
bool is_invalid (const Data< se::Field::Occupancy, ColB, SemB > &data)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
float get_field (const Data< FldT, ColB, SemB > data)
 
template<se::Colour ColB, se::Semantics SemB>
float get_field (const Data< se::Field::TSDF, ColB, SemB > data)
 
template<se::Colour ColB, se::Semantics SemB>
float get_field (const Data< se::Field::Occupancy, ColB, SemB > data)
 
template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
float is_inside (const Data< FldT, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
float is_inside (const Data< se::Field::TSDF, ColB, SemB > &data)
 
template<se::Colour ColB, se::Semantics SemB>
float is_inside (const Data< se::Field::Occupancy, ColB, SemB > &data)
 
std::ostream & operator<< (std::ostream &os, const MapConfig &c)
 
template<typename NodeT >
void get_child_idx (const Eigen::Vector3i &octant_coord, NodeT *node_ptr, unsigned int &child_idx)
 Get the child idx for a given child coordinate and pointer to the parent node. More...
 
std::ostream & operator<< (std::ostream &os, const OusterLidarConfig &c)
 
std::ostream & operator<< (std::ostream &os, const PinholeCameraConfig &c)
 
std::ostream & operator<< (std::ostream &os, const TrackerConfig &c)
 
static Eigen::Matrix< float, 6, 6 > makeJTJ (const Eigen::Matrix< float, 1, 21 > &v)
 
static Eigen::Matrix< float, 6, 1 > solve (const Eigen::Matrix< float, 1, 27 > &vals)
 
std::ostream & operator<< (std::ostream &os, const AppConfig &c)
 
template<typename DataConfigT , typename SensorConfigT >
std::ostream & operator<< (std::ostream &os, const Config< DataConfigT, SensorConfigT > &c)
 
cv::Mat montage (int montage_width, int montage_height, const std::vector< cv::Mat > &images, const std::vector< std::string > &labels)
 Create a montage of several images and overlay labels. More...
 
Readercreate_reader (const se::ReaderConfig &config)
 Create the appropriate reader instance based on the configuration. More...
 
ReaderType string_to_reader_type (const std::string &s)
 
std::string reader_type_to_string (ReaderType t)
 
std::ostream & operator<< (std::ostream &os, const ReaderConfig &c)
 
std::ostream & operator<< (std::ostream &os, const ReaderStatus &s)
 

Variables

PerfStats perfstats
 
static const se::field_t dflt_tsdf = 1.f
 
static const se::field_t dflt_occupancy = 0.f
 
static const se::weight_t dflt_weight = 0
 
static const se::time_stamp_t dflt_time_stamp = -1.f
 
static const se::rgba_t dflt_rgba = 0xFFFFFFFF
 
static const se::semantics_t dflt_semantics = 0
 
constexpr uint64_t CODE_MASK []
 #define NUM_DIM 3 uint64_t MASK[64]; MASK[0] = 0x1c0000000000000; More...
 
constexpr uint64_t SCALE_MASK = 0x1F
 11 111 More...
 
static Eigen::Vector3f sample_offset_frac = Eigen::Vector3f::Constant(0.5f)
 
constexpr float e_delta = 0.1f
 

Detailed Description

Helper wrapper to allocate and de-allocate octants in the octree.

Helper wrapper to traverse the octree.

The actual allocation and deallocation of memory is still only handled by the octree class.

All functions take a const octree references and as no manipulation of the octree is done.

Typedef Documentation

◆ Value

using se::Value = typedef float

◆ Status

using se::Status = typedef int

◆ Mesh

template<typename FaceT >
using se::Mesh = typedef std::vector<FaceT>

Meshes are represented as lists of faces.

Bug:
This representation has the inherent problem that there is vertex duplication. A more advanced representation would be needed to alleviate this, e.g. a list of vertices and a list of faces with indices to the list of faces.

◆ Triangle

typedef MeshFace<3> se::Triangle

◆ TriangleMesh

◆ Quad

typedef MeshFace<4> se::Quad

◆ QuadMesh

◆ OccupancyData

◆ OccupancyColData

◆ OccupancySemData

◆ OccupancyColSemData

◆ OccupancyDataConfig

◆ OccupancyColDataConfig

◆ OccupancySemDataConfig

◆ OccupancyColSemDataConfig

◆ TSDFData

◆ TSDFColData

◆ TSDFSemData

◆ TSDFColSemData

◆ TSDFDataConfig

◆ TSDFColDataConfig

◆ TSDFSemDataConfig

◆ TSDFColSemDataConfig

◆ MapD

template<se::Field FldT = se::Field::TSDF, se::Colour ColB = se::Colour::Off, se::Semantics SemB = se::Semantics::Off, se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::MapD = typedef Map<Data<FldT, ColB, SemB>, ResT, BlockSize>

◆ OccupancyMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::OccupancyMap = typedef Map<OccupancyData, ResT, BlockSize>

◆ OccupancyColMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::OccupancyColMap = typedef Map<OccupancyColData, ResT, BlockSize>

◆ OccupancySemMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::OccupancySemMap = typedef Map<OccupancySemData, ResT, BlockSize>

◆ OccupancyColSemMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::OccupancyColSemMap = typedef Map<OccupancyColSemData, ResT, BlockSize>

◆ TSDFMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::TSDFMap = typedef Map<TSDFData, ResT, BlockSize>

◆ TSDFColMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::TSDFColMap = typedef Map<TSDFColData, ResT, BlockSize>

◆ TSDFSemMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::TSDFSemMap = typedef Map<TSDFSemData, ResT, BlockSize>

◆ TSDFColSemMap

template<se::Res ResT = se::Res::Single, int BlockSize = 8>
using se::TSDFColSemMap = typedef Map<TSDFColSemData, ResT, BlockSize>

◆ key_t

typedef uint64_t se::key_t

key = 1 bit buffer + 57 bits of morton code + 6 bits of scale information The maxium scale is limited by 57 / 3 = 19 scales

Note
uint64_t has 64 bits We'll use the key to store both, the Morton code and scale information In 3D three bits are required to encode the Morton code at each scale. 21 scales -> 3 bits * 21 = 63 bits; 64 bits - 63 bits = 1 bit to encode unsigned int up to 21 [not possible] 20 scales -> 3 bits * 20 = 60 bits; 64 bits - 60 bits = 4 bits to encode unsigned int up to 20 [not possible] 19 scales -> 3 bits * 19 = 57 bits; 64 bits - 57 bits = 7 bits to encode unsigend int up to 19 [possible]

The tree cannot allocate any depth further than 19 allowing a map size = 524288 * map resolution That is a maximum map size of 1 x 1 x 1 km^3 at 2 mm resolutionThe type of the Key i.e. code | scale

◆ code_t

typedef uint64_t se::code_t

The type of the Morton code.

◆ scale_t

typedef uint64_t se::scale_t

The type of the scale in the morton code.

◆ idx_t

typedef unsigned int se::idx_t

Child or voxel index type.

◆ field_t

typedef float se::field_t

The type of the stored field (e.g. TSDF, ESDF or occupancy)

◆ field_vec_t

typedef Eigen::Matrix<field_t, 3, 1> se::field_vec_t

◆ weight_t

The type of the field type weight.

◆ time_stamp_t

typedef float se::time_stamp_t

The type of the time stamp.

◆ rgba_t

typedef uint32_t se::rgba_t

The type of the colour.

◆ semantics_t

typedef short se::semantics_t

The type of the semantic class.

Enumeration Type Documentation

◆ VarianceState

enum se::VarianceState
strong
Enumerator
Constant 
Gradient 
Undefined 

◆ UncertaintyModel

enum se::UncertaintyModel
strong

DATA CONFIG ///.

Enumerator
Linear 
Quadratic 

◆ Field

enum se::Field
strong
Enumerator
TSDF 
Occupancy 

◆ Colour

enum se::Colour
strong
Enumerator
On 
Off 

◆ Semantics

enum se::Semantics
strong
Enumerator
On 
Off 

◆ Res

enum se::Res
strong
Enumerator
Single 
Multi 

◆ Integ

enum se::Integ
strong
Enumerator
Simple 
LiDAR 
PinholeCamera 

◆ Safe

enum se::Safe
strong
Enumerator
On 
Off 

◆ AllocMeth

enum se::AllocMeth
strong
Enumerator
Raycasting 
VoxelCarving 

◆ Rep

enum se::Rep
strong
Enumerator
Surface 
Freespace 

◆ Sort

enum se::Sort
strong

The enum classes to define the sorting templates.

Enumerator
SmallToLarge 
LargeToSmall 

◆ ReaderType

enum se::ReaderType
strong
Enumerator
OPENNI 

Use the se::OpenNIReader.

RAW 

Use the se::RAWReader.

TUM 

Use the se::TUMReader.

INTERIORNET 

Use the se::InteriorNetReader.

NEWERCOLLEGE 

Use the se::NewerCollegeReader.

UNKNOWN 

◆ ReaderStatus

enum se::ReaderStatus : int
strong

The result of trying to read a depth/RGB image or a pose.

Enumerator
ok 

Data read successfully.

skip 

Temporary data read error.

Further reads might succeed. Typically used to indicate an invalid image or pose.

eof 

End of dataset reached.

error 

Fatal data read error.

No further read should be attempted. Typically used to indicate that the dataset could not be read at all or no camera was found.

Function Documentation

◆ pack_rgba() [1/5]

static uint32_t se::pack_rgba ( const uint8_t  r,
const uint8_t  g,
const uint8_t  b,
const uint8_t  a 
)
inlinestatic

Pack the individual RGBA channels into a single 32-bit unsigned integer.

The uint32_t is stored in little-endian order in all common CPUs so the alpha channel is stored in the MSB and the red channel in the LSB. Red: bits 0-7 Green: bits 8-15 Blue: bits 16-23 Alpha: bits 24-31

Parameters
[in]rThe value of the red channel.
[in]gThe value of the green channel.
[in]bThe value of the blue channel.
[in]aThe value of the alpha channel.
Returns
The 32-bit unsigned integer RGBA value.

◆ pack_rgba() [2/5]

static uint32_t se::pack_rgba ( const Eigen::Vector4f &  color)
inlinestatic

Pack a color stored in an Eigen vector into a single 32-bit unsigned integer.

It is assumed that the R, G, B and A channels are stored in the x, y, z and w members respectively. Their values are assumed to be in the range [0, 1].

Parameters
[in]colorThe input color as an Eigen Vector.
Returns
The 32-bit unsigned integer RGBA value.

◆ pack_rgba() [3/5]

static uint32_t se::pack_rgba ( const Eigen::Vector3f &  color)
inlinestatic

Pack a color stored in an Eigen vector into a single 32-bit unsigned integer.

It is assumed that the R, G and B channels are stored in the x, y and z members respectively. Their values are assumed to be in the range [0, 1]. The alpha channel is assumed to be completely opaque, e.g. 1.

Parameters
[in]colorThe input color as an Eigen Vector.
Returns
The 32-bit unsigned integer RGBA value.

◆ pack_rgba() [4/5]

static uint32_t se::pack_rgba ( const Eigen::Vector4i &  color)
inlinestatic

Pack a color stored in an Eigen vector into a single 32-bit unsigned integer.

It is assumed that the R, G, B and A channels are stored in the x, y, z and w members respectively. Their values are assumed to be in the range [0x00, 0xFF].

Parameters
[in]colorThe input color as an Eigen Vector.
Returns
The 32-bit unsigned integer RGBA value.

◆ pack_rgba() [5/5]

static uint32_t se::pack_rgba ( const Eigen::Vector3i &  color)
inlinestatic

Pack a color stored in an Eigen vector into a single 32-bit unsigned integer.

It is assumed that the R, G and B channels are stored in the x, y and z members respectively. Their values are assumed to be in the range [0x00, 0xFF]. The alpha channel is assumed to be completely opaque, e.g. 0xFF.

Parameters
[in]colorThe input color as an Eigen Vector.
Returns
The 32-bit unsigned integer RGBA value.

◆ r_from_rgba()

static uint8_t se::r_from_rgba ( const uint32_t  rgba)
inlinestatic

Get the value of the red channel from a 32-bit packed RGBA value.

Parameters
[in]rgbaThe 32-bit packed RGBA value.
Returns
The value of the red channel.

◆ g_from_rgba()

static uint8_t se::g_from_rgba ( const uint32_t  rgba)
inlinestatic

Get the value of the green channel from a 32-bit packed RGBA value.

Parameters
[in]rgbaThe 32-bit packed RGBA value.
Returns
The value of the green channel.

◆ b_from_rgba()

static uint8_t se::b_from_rgba ( const uint32_t  rgba)
inlinestatic

Get the value of the blue channel from a 32-bit packed RGBA value.

Parameters
[in]rgbaThe 32-bit packed RGBA value.
Returns
The value of the blue channel.

◆ a_from_rgba()

static uint8_t se::a_from_rgba ( const uint32_t  rgba)
inlinestatic

Get the value of the alpha channel from a 32-bit packed RGBA value.

Parameters
[in]rgbaThe 32-bit packed RGBA value.
Returns
The value of the alpha channel.

◆ blend()

static uint32_t se::blend ( const uint32_t  rgba_1,
const uint32_t  rgba_2,
const float  alpha 
)
inlinestatic

Blend two RGBA colors based on the value of the blending parameter alpha.

Returns a color alpha * rgba_1 + (1 - alpha) * rgba_2. The values of alpha are assumed to be in the range [0, 1].

Note
Code from https://stackoverflow.com/a/12016968
Parameters
[in]rgba_1A 32-bit packed RGBA value.
[in]rgba_2A 32-bit packed RGBA value.
[in]alphaThe value of the blending parameter.
Returns
The 32-bit RGBA value of the blended color.
Warning
Swapping the rgba_1 with rgba_2 while keeping the same value for alpha will not always produce the same result.

◆ rgb_to_rgba()

static void se::rgb_to_rgba ( const uint8_t *  rgb,
uint32_t *  rgba,
size_t  num_pixels 
)
inlinestatic

◆ rgba_to_rgb()

static void se::rgba_to_rgb ( const uint32_t *  rgba,
uint8_t *  rgb,
size_t  num_pixels 
)
inlinestatic

◆ depth_to_rgba()

void se::depth_to_rgba ( uint32_t *  depth_RGBA_image_data,
const float *  depth_image_data,
const Eigen::Vector2i &  depth_image_res,
const float  min_depth,
const float  max_depth 
)

Convert a depth image to an RGBA image to allow visualizing it.

The depth image is scaled using the minimum and maximum depth values to increase contrast.

Parameters
[in]depth_RGBA_image_dataPointer to the ouput RGBA image data.
[in]depth_image_dataPointer to the input depth image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]min_depthThe minimum possible depth value.
[in]max_depthThe maximum possible depth value.

◆ save_depth_png() [1/2]

int se::save_depth_png ( const float *  depth_image_data,
const Eigen::Vector2i &  depth_image_res,
const std::string &  filename,
const float  scale = 1000.0f 
)

Save a depth image with depth values in metres to a PNG.

The data is saved in a 16-bit image with the depth values scaled by scale.

Parameters
[in]depth_image_dataPointer to the float image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PNG file to create.
[in]scaleThe number each float depth value is multiplied with before being converted to a uint16_t. By default the resulting PNG contains depth values in millimetres.
Returns
0 on success, nonzero on error.

◆ save_depth_png() [2/2]

int se::save_depth_png ( const uint16_t *  depth_image_data,
const Eigen::Vector2i &  depth_image_res,
const std::string &  filename 
)

Save a depth image with depth values in millimetres to a PNG.

Parameters
[in]depth_image_dataPointer to the 16-bit image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PNG file to create.
Returns
0 on success, nonzero on error.

◆ load_depth_png() [1/2]

int se::load_depth_png ( float **  depth_image_data,
Eigen::Vector2i &  depth_image_res,
const std::string &  filename,
const float  inverse_scale = 1.0f/1000.0f 
)

Load a PNG depth image into a buffer with depth values in metres.

Parameters
[in]depth_image_dataPointer to the loaded float image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PNG file to load.
[in]inverse_scaleThe number each uint16_t depth value is multiplied with in order to convert it to a float value in metres. By default the resulting PNG is assumed to contain depth values in millimetres.
Returns
0 on success, nonzero on error.
Warning
The memory for the image buffer is allocated inside this function. delete[] *depth_image_data must be called to free the memory. width * height * sizeof(float) bytes are allocated.

◆ load_depth_png() [2/2]

int se::load_depth_png ( uint16_t **  depth_image_data,
Eigen::Vector2i &  depth_image_res,
const std::string &  filename 
)

Load a PNG depth image into a buffer with depth values in millimetres.

Parameters
[in]depth_image_dataPointer to the loaded 16-bit image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PNG file to load.
Returns
0 on success, nonzero on error.
Warning
The memory for the image buffer is allocated inside this function. delete[] *depth_image_data must be called to free the memory. width * height * sizeof(uint16_t) bytes are allocated.

◆ save_depth_pgm() [1/2]

int se::save_depth_pgm ( const float *  depth_image_data,
const Eigen::Vector2i &  depth_image_res,
const std::string &  filename,
const float  scale = 1000.0f 
)

Save a depth image with depth values in metres to a P2 PGM.

The data is saved in a 16-bit image with the depth values scaled by scale.

Note
For documentation on the structure of P2 PGM images see here https://en.wikipedia.org/wiki/Netpbm_format
Parameters
[in]depth_image_dataPointer to the float image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PGM file to create.
[in]scaleThe number each float depth value is multiplied with before being converted to a uint16_t. By default the resulting PNG contains depth values in millimetres.
Returns
0 on success, nonzero on error.

◆ save_depth_pgm() [2/2]

int se::save_depth_pgm ( const uint16_t *  depth_image_data,
const Eigen::Vector2i &  depth_image_res,
const std::string &  filename 
)

Save a depth image with depth values in millimetres to a P2 PGM.

Note
For documentation on the structure of P2 PGM images see here https://en.wikipedia.org/wiki/Netpbm_format
Parameters
[in]depth_image_dataPointer to the 16-bit image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PGM file to create.
Returns
0 on success, nonzero on error.

◆ load_depth_pgm() [1/2]

int se::load_depth_pgm ( float **  depth_image_data,
Eigen::Vector2i &  depth_image_res,
const std::string &  filename,
const float  inverse_scale = 1.0f/1000.0f 
)

Load a P2 PGM depth image into a buffer with depth values in metres.

Parameters
[in]depth_image_dataPointer to the loaded float image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PGM file to load.
[in]inverse_scaleThe number each uint16_t depth value is multiplied with in order to convert it to a float value in metres. By default the resulting PNG is assumed to contain depth values in millimetres.
Returns
0 on success, nonzero on error.
Warning
The memory for the image buffer is allocated inside this function. delete[] *depth_image_data must be called to free the memory. width * height * sizeof(float) bytes are allocated.

◆ load_depth_pgm() [2/2]

int se::load_depth_pgm ( uint16_t **  depth_image_data,
Eigen::Vector2i &  depth_image_res,
const std::string &  filename 
)

Load a P2 PGM depth image into a buffer with depth values in millimeters.

Parameters
[in]depth_image_dataPointer to the loaded 16-bit image data.
[in]depth_image_resResolution of the depth image in pixels (width and height).
[in]filenameThe name of the PGM file to load.
Returns
0 on success, nonzero on error.
Warning
The memory for the image buffer is allocated inside this function. delete[] *depth_image_data must be called to free the memory. width * height * sizeof(uint16_t) bytes are allocated.

◆ round_pixel()

static Eigen::Vector2i se::round_pixel ( const Eigen::Vector2f &  pixel_f)
inlinestatic

◆ convert_to_output_rgba_img()

static void se::convert_to_output_rgba_img ( const se::Image< uint32_t > &  input_rgba_img,
uint32_t *  output_rgba_img_data 
)
static

◆ convert_to_output_depth_img() [1/2]

static void se::convert_to_output_depth_img ( const se::Image< float > &  input_depth_img,
uint32_t *  output_depth_img_data 
)
static

◆ convert_to_output_depth_img() [2/2]

static void se::convert_to_output_depth_img ( const se::Image< float > &  input_depth_img,
const float  min_depth,
const float  max_depth,
uint32_t *  output_depth_img_data 
)
static

◆ get_sample_coord()

static Eigen::Vector3f se::get_sample_coord ( const Eigen::Vector3i &  octant_coord,
const int  octant_size 
)
inlinestatic

compute the sample coordinates for a given octant coordinate

Parameters
octant_coordThe octant coordinates
octant_sizeThe size of the octant
sample_offset_fracThe offset fraction of the sample point to the octant corner, i.e. (0,0,0) for octant corner and (0.5, 0.5, 0.5) for octant centre
Returns
The octant sample coordinates

◆ compute_three_sigma()

template<typename ConfigT >
float se::compute_three_sigma ( const se::field_t  depth_value,
const float  sigma_min,
const float  sigma_max,
const ConfigT  config 
)
inline

Compute the estimated uncertainty boundary for a given depth measurement.

Parameters
[in]depth_valueThe measured depth of the depth image.
Returns
Three sigma uncertainty.

◆ compute_tau()

template<typename ConfigT >
float se::compute_tau ( const se::field_t  depth_value,
const float  tau_min,
const float  tau_max,
const ConfigT  config 
)
inline

Compute the estimated wall thickness tau for a given depth measurement.

Parameters
[in]depth_valueThe measured depth of the depth image.
Returns
The estimated wall thickness.

◆ octree_structure_mesh()

template<typename OctreeT >
QuadMesh se::octree_structure_mesh ( OctreeT &  octree)

Extract the octree structure as a quadrilateral mesh.

Template Parameters
OctreeT
Parameters
octreeThe octree to extract the structure from.
Returns
A quadrilateral mesh.

◆ operator<<() [1/15]

std::ostream& se::operator<< ( std::ostream &  os,
const FieldDataConfig< se::Field::Occupancy > &  c 
)

◆ operator<<() [2/15]

std::ostream& se::operator<< ( std::ostream &  os,
const FieldDataConfig< se::Field::TSDF > &  c 
)

◆ operator<<() [3/15]

template<se::Colour ColB>
std::ostream& se::operator<< ( std::ostream &  os,
const ColourDataConfig< ColB > &   
)

◆ operator<<() [4/15]

std::ostream& se::operator<< ( std::ostream &  os,
const ColourDataConfig< se::Colour::On > &  c 
)

◆ operator<<() [5/15]

template<se::Semantics SemB>
std::ostream& se::operator<< ( std::ostream &  os,
const SemanticDataConfig< SemB > &   
)

◆ operator<<() [6/15]

std::ostream& se::operator<< ( std::ostream &  os,
const SemanticDataConfig< se::Semantics::On > &  c 
)

◆ operator<<() [7/15]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
std::ostream& se::operator<< ( std::ostream &  os,
const DataConfig< FldT, ColB, SemB > &  c 
)

◆ set_invalid() [1/3]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
void se::set_invalid ( Data< FldT, ColB, SemB > &  data)
inline

◆ set_invalid() [2/3]

template<se::Colour ColB, se::Semantics SemB>
void se::set_invalid ( Data< se::Field::TSDF, ColB, SemB > &  data)
inline

◆ set_invalid() [3/3]

template<se::Colour ColB, se::Semantics SemB>
void se::set_invalid ( Data< se::Field::Occupancy, ColB, SemB > &  data)
inline

◆ is_valid() [1/3]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
bool se::is_valid ( const Data< FldT, ColB, SemB > &  data)
inline

◆ is_valid() [2/3]

template<se::Colour ColB, se::Semantics SemB>
bool se::is_valid ( const Data< se::Field::TSDF, ColB, SemB > &  data)
inline

◆ is_valid() [3/3]

template<se::Colour ColB, se::Semantics SemB>
bool se::is_valid ( const Data< se::Field::Occupancy, ColB, SemB > &  data)
inline

◆ is_invalid() [1/3]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
bool se::is_invalid ( const Data< FldT, ColB, SemB > &  data)
inline

◆ is_invalid() [2/3]

template<se::Colour ColB, se::Semantics SemB>
bool se::is_invalid ( const Data< se::Field::TSDF, ColB, SemB > &  data)
inline

◆ is_invalid() [3/3]

template<se::Colour ColB, se::Semantics SemB>
bool se::is_invalid ( const Data< se::Field::Occupancy, ColB, SemB > &  data)
inline

◆ get_field() [1/3]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
float se::get_field ( const Data< FldT, ColB, SemB >  data)
inline

◆ get_field() [2/3]

template<se::Colour ColB, se::Semantics SemB>
float se::get_field ( const Data< se::Field::TSDF, ColB, SemB >  data)
inline

◆ get_field() [3/3]

template<se::Colour ColB, se::Semantics SemB>
float se::get_field ( const Data< se::Field::Occupancy, ColB, SemB >  data)
inline

◆ is_inside() [1/3]

template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
float se::is_inside ( const Data< FldT, ColB, SemB > &  data)
inline

◆ is_inside() [2/3]

template<se::Colour ColB, se::Semantics SemB>
float se::is_inside ( const Data< se::Field::TSDF, ColB, SemB > &  data)
inline

◆ is_inside() [3/3]

template<se::Colour ColB, se::Semantics SemB>
float se::is_inside ( const Data< se::Field::Occupancy, ColB, SemB > &  data)
inline

◆ operator<<() [8/15]

std::ostream& se::operator<< ( std::ostream &  os,
const MapConfig c 
)

◆ get_child_idx()

template<typename NodeT >
void se::get_child_idx ( const Eigen::Vector3i &  octant_coord,
NodeT *  node_ptr,
unsigned int &  child_idx 
)
inline

Get the child idx for a given child coordinate and pointer to the parent node.

Warning
The function requires a pointer to the actual node rather than the se::OctantBase*.
Template Parameters
NodeT
Parameters
[in]child_coordThe voxel coordinates of the child
[in]parent_ptrThe pointer to the parent node
Returns
The child index

◆ operator<<() [9/15]

std::ostream& se::operator<< ( std::ostream &  os,
const OusterLidarConfig c 
)

◆ operator<<() [10/15]

std::ostream& se::operator<< ( std::ostream &  os,
const PinholeCameraConfig c 
)

◆ operator<<() [11/15]

std::ostream& se::operator<< ( std::ostream &  os,
const TrackerConfig c 
)

◆ makeJTJ()

static Eigen::Matrix<float, 6, 6> se::makeJTJ ( const Eigen::Matrix< float, 1, 21 > &  v)
inlinestatic

◆ solve()

static Eigen::Matrix<float, 6, 1> se::solve ( const Eigen::Matrix< float, 1, 27 > &  vals)
inlinestatic

◆ operator<<() [12/15]

std::ostream& se::operator<< ( std::ostream &  os,
const AppConfig c 
)

◆ operator<<() [13/15]

template<typename DataConfigT , typename SensorConfigT >
std::ostream& se::operator<< ( std::ostream &  os,
const Config< DataConfigT, SensorConfigT > &  c 
)

◆ montage()

cv::Mat se::montage ( int  montage_width,
int  montage_height,
const std::vector< cv::Mat > &  images,
const std::vector< std::string > &  labels 
)

Create a montage of several images and overlay labels.

The montage image is filled with images in row-major order. If fewer than montage_width * montage_height images are supplied then the montage image will have some transparent regions. If fewer labels than images are provided then the last images won't have a label.

For montage_width = 3, montage_height = 2, 5 images and 3 labels the following montage will be created

┌───────────┬───────────┬───────────┐
│ images[0] │ images[1] │ images[2] │
│ labels[0] │ labels[1] │ labels[2] │
├───────────┼───────────┼───────────┤
│ images[3] │ images[4] │ │
│ │ │ │
└───────────┴───────────┴───────────┘
Warning
It is assumed that the dimensions of all images are the same and that their type is CV_8UC4.
Parameters
[in]montage_widthThe width of the montage image in images.
[in]montage_heightThe height of the montage image in images.
[in]imagesThe images to montage.
[in]labelsThe labels corresponding to the images to montage.
Returns
A montage image from the supplied images and labels.

◆ create_reader()

Reader* se::create_reader ( const se::ReaderConfig config)

Create the appropriate reader instance based on the configuration.

Parameters
[in]configThe pipeline configuration.
Returns
A pointer to an instance of a class derived from Reader.

◆ string_to_reader_type()

ReaderType se::string_to_reader_type ( const std::string &  s)

◆ reader_type_to_string()

std::string se::reader_type_to_string ( ReaderType  t)

◆ operator<<() [14/15]

std::ostream& se::operator<< ( std::ostream &  os,
const ReaderConfig c 
)

◆ operator<<() [15/15]

std::ostream& se::operator<< ( std::ostream &  os,
const ReaderStatus s 
)

Variable Documentation

◆ perfstats

PerfStats se::perfstats

◆ dflt_tsdf

const se::field_t se::dflt_tsdf = 1.f
static

◆ dflt_occupancy

const se::field_t se::dflt_occupancy = 0.f
static

◆ dflt_weight

const se::weight_t se::dflt_weight = 0
static

◆ dflt_time_stamp

const se::time_stamp_t se::dflt_time_stamp = -1.f
static

◆ dflt_rgba

const se::rgba_t se::dflt_rgba = 0xFFFFFFFF
static

◆ dflt_semantics

const se::semantics_t se::dflt_semantics = 0
static

◆ CODE_MASK

constexpr uint64_t se::CODE_MASK[]
Initial value:
= {
0x1ffffffffffffff,
0x1fffffffffffff8,
0x1ffffffffffffc0,
0x1fffffffffffe00,
0x1fffffffffff000,
0x1ffffffffff8000,
0x1fffffffffc0000,
0x1ffffffffe00000,
0x1ffffffff000000,
0x1fffffff8000000,
0x1ffffffc0000000,
0x1fffffe00000000,
0x1fffff000000000,
0x1ffff8000000000,
0x1fffc0000000000,
0x1ffe00000000000,
0x1ff000000000000,
0x1f8000000000000,
0x1c0000000000000}

#define NUM_DIM 3 uint64_t MASK[64]; MASK[0] = 0x1c0000000000000;

for (int i = 1; i < 19; ++i) { MASK[i] = MASK[i-1] | (MASK[0] >> (i*3)); }

for (int i = 18; i >= 0; –i) { std::bitset<64> b(MASK[i]); std::cout << "0x" << std::hex << b.to_ullong() << "," << std::endl; }

◆ SCALE_MASK

constexpr uint64_t se::SCALE_MASK = 0x1F

11 111

◆ sample_offset_frac

Eigen::Vector3f se::sample_offset_frac = Eigen::Vector3f::Constant(0.5f)
inlinestatic

◆ e_delta

constexpr float se::e_delta = 0.1f