8#ifndef SE_VOLUME_CARVER_HPP
9#define SE_VOLUME_CARVER_HPP
11#include <Eigen/Geometry>
31template<
typename MapT,
typename SensorT>
37 const Eigen::Isometry3f& ,
51template<se::Colour ColB, se::Id IdB,
int BlockSize,
typename SensorT>
56 typedef typename OctreeType::NodeType
NodeType;
64 struct VolumeCarverConfig {
66 sigma_min(map.getDataConfig().field.sigma_min_factor * map.getRes()),
67 sigma_max(map.getDataConfig().field.sigma_max_factor * map.getRes()),
68 tau_min(map.getDataConfig().field.tau_min_factor * map.getRes()),
69 tau_max(map.getDataConfig().field.tau_max_factor * map.getRes())
94 const Eigen::Isometry3f&
T_WS,
102 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
114 bool crossesFrustum(std::vector<srl::projection::ProjectionStatus>&
proj_corner_stati);
125 bool cameraInNode(
const Eigen::Vector3i&
node_coord,
127 const Eigen::Isometry3f&
T_WS);
158 template<
class SensorTDummy = SensorT>
159 typename std::enable_if_t<std::is_same<SensorTDummy, se::PinholeCamera>::value,
void>
176 template<
class SensorTDummy = SensorT>
177 typename std::enable_if_t<std::is_same<SensorTDummy, se::OusterLidar>::value,
void>
193 const Eigen::Isometry3f T_SW_;
194 const float map_res_;
195 VolumeCarverConfig config_;
196 const float max_depth_value_;
197 const float zero_depth_band_;
198 const float size_to_radius_;
206#include "impl/volume_carver_impl.hpp"
The base class of all octants (se::Node and se::Block) in an se::Octree.
Definition octant.hpp:19
MapType::OctreeType OctreeType
Definition volume_carver.hpp:55
OctreeType::NodeType NodeType
Definition volume_carver.hpp:56
VolumeCarverAllocation operator()()
Allocate the frustum using a map-to-camera volume carving approach.
VolumeCarver(MapType &map, const SensorT &sensor, const se::Image< float > &depth_img, const se::Image< float > &depth_sigma_img, const Eigen::Isometry3f &T_WS, const timestamp_t timestamp)
Setup the volume carver.
Map< Data< se::Field::Occupancy, ColB, IdB >, se::Res::Multi, BlockSize > MapType
Definition volume_carver.hpp:54
OctreeType::BlockType BlockType
Definition volume_carver.hpp:57
Unimplemented on purpose so that the template specialization is used.
Definition volume_carver.hpp:32
VolumeCarver(MapT &, const SensorT &, const se::Image< float > &, const Eigen::Isometry3f &, const timestamp_t)
Helper wrapper to allocate and de-allocate octants in the octree.
Definition bounded_vector.hpp:14
VarianceState
Definition volume_carver.hpp:19
Definition volume_carver.hpp:21
std::vector< se::OctantBase * > block_list
Definition volume_carver.hpp:23
std::vector< bool > projects_inside_list
Definition volume_carver.hpp:25
std::vector< se::OctantBase * > node_list
Definition volume_carver.hpp:22
std::vector< se::VarianceState > variance_state_list
Definition volume_carver.hpp:24
const float sigma_max
Definition volume_carver.hpp:74
const float tau_max
Definition volume_carver.hpp:76
const float tau_min
Definition volume_carver.hpp:75
const float sigma_min
Definition volume_carver.hpp:73
VolumeCarverConfig(const MapType &map)
Definition volume_carver.hpp:65