Volumes

VDB-backed volumes and loaders used with attribute / grid workflows.

Typedefs

using FloatVDBVolume = VDBVolume<openvdb::FloatGrid>
typedef openvdb::Grid<openvdb::tree::Tree4<openvdb::Vec2s, 5, 4, 3>::Type> Vec2sGrid
using Vec2sVDBVolume = VDBVolume<Vec2sGrid>
using Vec3sVDBVolume = VDBVolume<openvdb::Vec3SGrid>
typedef openvdb::Grid<openvdb::tree::Tree4<openvdb::Vec4s, 5, 4, 3>::Type> Vec4sGrid
using Vec4sVDBVolume = VDBVolume<Vec4sGrid>
template<typename GridType>
class VDBVolume
#include <vdb_volume.h>

Public Types

using GridPtr = typename GridType::Ptr
using ValueType = typename GridType::ValueType

Public Functions

inline std::pair<glm::vec3, glm::vec3> bounding_box() const
inline std::shared_ptr<VDBVolume<GridType>> clone() const
inline GridPtr grid() const
inline std::string grid_type() const
inline ValueType sample(const double x, const double y, const double z) const
inline void set_transform(const openvdb::math::Transform &transform)
inline VDBVolume()
inline explicit VDBVolume(GridPtr grid, bool center = false)

Private Members

std::shared_ptr<typename GridType::Accessor> m_accessor
GridPtr m_grid
openvdb::tools::GridSampler<GridType, openvdb::tools::BoxSampler>::Ptr m_sampler
namespace VDB_Loader

Functions

std::shared_ptr<Vec3sVDBVolume> load_vdb_vec3s_volume_from_grid(const std::string &file_path, const std::string &grid_name, bool center = false)
std::shared_ptr<Vec4sVDBVolume> load_vdb_vec4s_volume_from_grid(const std::string &file_path, const std::string &grid_name, bool center = false)
std::shared_ptr<FloatVDBVolume> load_vdb_volume_from_grid(const std::string &file_path, const std::string &grid_name, bool center = false)
class DICOMLoader
#include <dicom_loader.h>

Public Functions

std::shared_ptr<FloatVDBVolume> as_volume()
DICOMLoader(const std::string &directory, bool center = false, double rescale_slope = -std::numeric_limits<double>::infinity(), double rescale_intercept = -std::numeric_limits<double>::infinity(), double slice_thickness = -std::numeric_limits<double>::infinity(), double x_pixel_spacing = -std::numeric_limits<double>::infinity(), double y_pixel_spacing = -std::numeric_limits<double>::infinity())

Construct a DICOM volume from the given directory.

Parameters:
  • directory – The directory containing the DICOM stack.

  • center – Whether to center the volume at the origin. Default is false.

  • rescale_slope – The rescale slope to apply to the pixel values. If not provided, it will be read from the DICOM metadata.

  • rescale_intercept – The rescale intercept to apply to the pixel values. If not provided, it will be read from the DICOM metadata.

  • slice_thickness – The slice thickness in mm. If not provided, it will be read from the DICOM metadata.

  • x_pixel_spacing – The pixel spacing in the x direction in mm. If not provided, it will be read from the DICOM metadata.

  • y_pixel_spacing – The pixel spacing in the y direction in mm. If not provided, it will be read from the DICOM metadata.

inline std::pair<glm::vec3, glm::vec3> get_bounding_box() const
inline glm::vec3 get_dimensions() const
inline std::pair<double, double> get_min_max_hu() const
inline double get_rescale_intercept() const
inline double get_rescale_slope() const
inline glm::vec3 get_voxel_size() const

Private Types

using GridType = openvdb::FloatGrid

Private Functions

std::vector<std::vector<double>> load_dicom_image(const std::string &file_path)

Load a single DICOM image from the given file path and return the pixel data as a 2D vector.

void load_dicom_stack(const std::string &directory)

Load a DICOM stack from the given directory into an OpenVDB volume.

Parameters:

directory – The directory containing the DICOM stack.

Private Members

bool m_center = false
double m_hu_max = std::numeric_limits<double>::min()
double m_hu_min = std::numeric_limits<double>::max()
double m_rescale_intercept = -std::numeric_limits<double>::infinity()
double m_rescale_slope = -std::numeric_limits<double>::infinity()
openvdb::tools::GridSampler<GridType, openvdb::tools::BoxSampler>::Ptr m_sampler
GridType::Ptr m_volume
double m_x_size = 0
double m_x_spacing = -std::numeric_limits<double>::infinity()
double m_y_size = 0
double m_y_spacing = -std::numeric_limits<double>::infinity()
double m_z_size = 0
double m_z_spacing = -std::numeric_limits<double>::infinity()

Private Static Functions

static DICOM_Meta_Data GetDICOMMetaData(const std::string &file_path)

Get the metadata for a DICOM image from the given file path.

static glm::mat4 GetDICOMRigidTransform(DcmDataset *dataset)
static double GetRescaledValue(Uint16 pixel_value, double rescale_slope, double rescale_intercept)
struct DICOM_Meta_Data

Public Members

bool found_rescale_intercept = false
bool found_rescale_slope = false
bool found_thickness = false
bool found_width_and_height = false
bool found_xy_spacing = false
size_t height = 0
double rescale_intercept = 0.0
double rescale_slope = 1.0
glm::mat4 rigid_transform = glm::mat4(1.0f)
double slice_thickness = 1
size_t width = 0
double x_pixel_spacing = -1
double y_pixel_spacing = -1