calibration_tools_v1.0/lidar_driver/include/open3d/data/Dataset.h
2025-02-20 10:45:17 +08:00

1270 lines
49 KiB
C++

// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "open3d/utility/Eigen.h"
namespace open3d {
namespace data {
/// Function to return default data root directory in the following order:
///
/// (a) OPEN3D_DATA_ROOT environment variable.
/// (b) $HOME/open3d_data.
std::string LocateDataRoot();
/// Returns the URL prefix for the open3d_downloads's releases.
/// See https://github.com/isl-org/open3d_downloads/releases/ for more info.
/// This is hard-coded to have "/" at the end.
std::string Open3DDownloadsPrefix();
/// \class Dataset
/// \brief Base Open3D dataset class.
///
/// The Dataset classes in Open3D are designed for convenient access to
/// "built-in" example and test data. You'll need internet access to use the
/// dataset classes. The downloaded data will be stored in the Open3D's data
/// root directory.
///
/// - A dataset class locates the data root directory in the following order:
/// (a) User-specified by `data_root` when instantiating a dataset object.
/// (b) OPEN3D_DATA_ROOT environment variable.
/// (c) $HOME/open3d_data.
/// By default, (c) will be used, and it is also the recommended way.
/// - When a dataset object is instantiated, the corresponding data will be
/// downloaded in `${data_root}/download/prefix/` and extracted or copied to
/// `${data_root}/extract/prefix/`. If the extracted data directory exists,
/// the files will be used without validation. If it does not exists, and the
/// valid downloaded file exists, the data will be extracted from the
/// downloaded file. If downloaded file does not exists, or validates against
/// the provided MD5, it will be re-downloaded.
/// - After the data is downloaded and extracted, the dataset object will NOT
/// load the data for you. Instead, you will get the paths to the data files
/// and use Open3D's I/O functions to load the data. This design exposes where
/// the data is stored and how the data is loaded, allowing users to modify
/// the code and load their own data in a similar way. Please check the
/// documentation of the specific dataset to know more about the specific
/// functionalities provided for it.
class Dataset {
public:
/// \brief Parameterized Constructor.
///
/// \param prefix Prefix of the dataset. The data is downloaded in
/// `${data_root}/download/${prefix}/` and extracted in
/// `${data_root}/extract/${prefix}/`.
/// \param data_root Path to `${data_root}`, which contains all the
/// downloaded and extracted files.
/// The data root directory is located in the following order:
/// (a) User-specified by `data_root` when instantiating a dataset object.
/// (b) OPEN3D_DATA_ROOT environment variable.
/// (c) $HOME/open3d_data.
/// By default, (c) will be used, and it is also the recommended way.
Dataset(const std::string& prefix, const std::string& data_root = "");
virtual ~Dataset() {}
/// \brief Get data root directory. The data root is set at construction
/// time or automatically determined.
const std::string GetDataRoot() const { return data_root_; }
/// \brief Get prefix for the dataset.
const std::string GetPrefix() const { return prefix_; }
/// \brief Get absolute path to download directory. i.e.
/// ${data_root}/download/${prefix}
const std::string GetDownloadDir() const {
return GetDataRoot() + "/download/" + GetPrefix();
}
/// \brief Get absolute path to extract directory. i.e.
/// ${data_root}/extract/${prefix}
const std::string GetExtractDir() const {
return GetDataRoot() + "/extract/" + GetPrefix();
}
protected:
/// Open3D data root.
std::string data_root_;
/// Dataset prefix.
std::string prefix_;
/// Check if the paths exists after extraction.
void CheckPathsExist(const std::vector<std::string>& paths) const;
};
/// \struct DataDescriptor
/// \brief Infomation about a file to be downloaded.
struct DataDescriptor {
/// \brief Constructor a list of url mirrors.
/// \param urls URL mirrors of the file.
/// \param md5 MD5 checksum of the file.
/// \param extract_in_subdir Subdirectory to extract the file. If empty, the
/// file will be extracted in the root extract directory of the dataset.
DataDescriptor(const std::vector<std::string>& urls,
const std::string& md5,
const std::string& extract_in_subdir = "")
: urls_(urls), md5_(md5), extract_in_subdir_(extract_in_subdir) {}
/// \brief Constructor a download url.
/// \param url URL of the file.
/// \param md5 MD5 checksum of the file.
/// \param extract_in_subdir Subdirectory to extract the file. If empty, the
/// file will be extracted in the root extract directory of the dataset.
DataDescriptor(const std::string& url,
const std::string& md5,
const std::string& extract_in_subdir = "")
: DataDescriptor(
std::vector<std::string>{url}, md5, extract_in_subdir) {}
/// List of URL mirrors.
std::vector<std::string> urls_;
/// MD5 checksum of the downloaded file.
std::string md5_;
/// Subdirectory to extract the file. If empty, the file will be extracted
/// in the root extract directory of the dataset.
std::string extract_in_subdir_ = "";
};
/// \class DownloadDataset
/// \brief Dataset class with one or more downloaded file.
///
/// \param prefix Prefix of the dataset. The data is downloaded in
/// ${data_root}/download/${prefix} and extracted in
/// ${data_root}/extract/${prefix}.
/// \param data_descriptor Information about a file to be downloaded.
/// \param data_root Path to the dataset root.
class DownloadDataset : public Dataset {
public:
DownloadDataset(const std::string& prefix,
const DataDescriptor& data_descriptor,
const std::string& data_root = "");
DownloadDataset(const std::string& prefix,
const std::vector<DataDescriptor>& data_descriptors,
const std::string& data_root = "");
virtual ~DownloadDataset() {}
protected:
/// Check if all files are downloaded and MD5 checksums are valid.
bool HasDownloaded(const DataDescriptor& data_descriptor) const;
std::vector<DataDescriptor> data_descriptors_;
};
/// \class ArmadilloMesh
/// \brief Data class for `ArmadilloMesh` contains the `ArmadilloMesh.ply` from
/// the `Stanford 3D Scanning Repository`.
class ArmadilloMesh : public DownloadDataset {
public:
ArmadilloMesh(const std::string& data_root = "");
/// \brief Path to the `ArmadilloMesh.ply` file.
std::string GetPath() const { return path_; }
private:
/// Path to the `ArmadilloMesh.ply` file.
std::string path_;
};
/// \class AvocadoModel
/// \brief Data class for `AvocadoModel` contains a avocado model file,
/// along with material and PNG format embedded textures.
class AvocadoModel : public DownloadDataset {
public:
AvocadoModel(const std::string& data_root = "");
/// \brief Path to the GLB format avocado model.
std::string GetPath() const { return path_; }
private:
/// Path to the GLB format avocado model.
std::string path_;
};
/// \class BedroomRGBDImages
/// \brief Data class for `BedroomRGBDImages` contains a sample set of 21931
/// color and depth images from Redwood RGBD dataset. Additionally it also
/// contains camera trajectory log, and mesh reconstruction.
class BedroomRGBDImages : public DownloadDataset {
public:
BedroomRGBDImages(const std::string& data_root = "");
/// \brief Returns List of paths to color image samples of size 21931.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Returns List of paths to depth image samples of size 21931.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Path to camera trajectory log file
/// `lounge_trajectory.log`.
std::string GetTrajectoryLogPath() const { return trajectory_log_path_; }
/// \brief Path to mesh reconstruction `bedroom.ply`.
std::string GetReconstructionPath() const { return reconstruction_path_; }
private:
/// List of paths to color image samples of size 21931.
std::vector<std::string> color_paths_;
/// List of paths to depth image samples of size 21931.
std::vector<std::string> depth_paths_;
/// Path to camera trajectory log file `bedroom.log`.
std::string trajectory_log_path_;
/// Path to mesh reconstruction.
std::string reconstruction_path_;
};
/// \class BunnyMesh
/// \brief Data class for `BunnyMesh` contains the `BunnyMesh.ply` from the
/// `Stanford 3D Scanning Repository`.
class BunnyMesh : public DownloadDataset {
public:
BunnyMesh(const std::string& data_root = "");
/// \brief Path to the `BunnyMesh.ply` file.
std::string GetPath() const { return path_; }
private:
/// Path to `BunnyMesh.ply` file.
std::string path_;
};
/// \class CrateModel
/// \brief Data class for `CrateModel` contains a sword model file, along with
/// material and various other texture files. The model file can be accessed
/// using `GetPath()`, however in order to access the paths to the texture files
/// one may use `GetPath(filename)` method or get the unordered map of filename
/// to path using `GetPathMap()`.
class CrateModel : public DownloadDataset {
public:
CrateModel(const std::string& data_root = "");
/// \brief Path to the `filename`. By default it returns the path to
/// `crate.obj` file. Refer documentation page for available options.
std::string GetPath(const std::string filename = "crate_model") const {
return map_filename_to_path_.at(filename);
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class DamagedHelmetModel
/// \brief Data class for `DamagedHelmetModel` contains a damaged helmet model
/// file, along with material and JPG format embedded textures.
class DamagedHelmetModel : public DownloadDataset {
public:
DamagedHelmetModel(const std::string& data_root = "");
/// \brief Path to the GLB format damaged helmet model.
std::string GetPath() const { return path_; }
private:
/// Path to the GLB format damaged helmet model.
std::string path_;
};
/// \class DemoColoredICPPointClouds
/// \brief Data class for `DemoColoredICPPointClouds` contains 2
/// point clouds of PLY format. This data is used in Open3D for
/// Colored-ICP demo.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class DemoColoredICPPointClouds : public DownloadDataset {
public:
DemoColoredICPPointClouds(const std::string& data_root = "");
/// \brief Returns list of list of 2 point cloud paths.
std::vector<std::string> GetPaths() const { return paths_; }
/// \brief Path to the point cloud at index. Use `GetPaths(0)`, and
/// `GetPaths(1)` to access the paths.
std::string GetPaths(size_t index) const;
private:
// List of path to PCD point-cloud fragments.
std::vector<std::string> paths_;
};
/// \class DemoCropPointCloud
/// \brief Data class for `DemoCropPointCloud` contains a point cloud, and
/// `cropped.json` (a saved selected polygon volume file). This data is used
/// in Open3D for point cloud crop demo.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class DemoCropPointCloud : public DownloadDataset {
public:
DemoCropPointCloud(const std::string& data_root = "");
/// \brief Path to example point cloud.
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Path to saved selected polygon volume file.
std::string GetCroppedJSONPath() const { return cropped_json_path_; }
private:
// Path to example point cloud.
std::string point_cloud_path_;
// Path to saved selected polygon volume file.
std::string cropped_json_path_;
};
/// \class DemoCustomVisualization
/// \brief Data class for `DemoCustomVisualization` contains an example
/// point-cloud, camera trajectory (json file), rendering options (json file).
/// This data is used in Open3D for custom visualization with camera trajectory
/// demo.
class DemoCustomVisualization : public DownloadDataset {
public:
DemoCustomVisualization(const std::string& data_root = "");
/// \brief Path to the point cloud (ply).
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Path to the camera_trajectory.json.
std::string GetTrajectoryPath() const { return camera_trajectory_path_; }
/// \brief Path to the renderoption.json.
std::string GetRenderOptionPath() const { return render_option_path_; }
private:
std::string point_cloud_path_;
std::string camera_trajectory_path_;
std::string render_option_path_;
};
/// \class DemoDopplerICPSequence
/// \brief Data class for `DemoDopplerICPSequence` contains an example sequence
/// of 100 point clouds with Doppler velocity channel and corresponding ground
/// truth poses. The sequence was generated using the CARLA simulator.
class DemoDopplerICPSequence : public DownloadDataset {
public:
DemoDopplerICPSequence(const std::string& data_root = "");
/// \brief Returns the list of the point cloud paths in the sequence.
std::vector<std::string> GetPaths() const { return paths_; }
/// \brief Path to the point cloud at index.
std::string GetPath(std::size_t index) const;
/// \brief Path to the calibration metadata file, containing transformation
/// between the vehicle and sensor frames and the time period.
std::string GetCalibrationPath() const { return calibration_path_; }
/// \brief Path to the ground truth poses for the entire sequence.
std::string GetTrajectoryPath() const { return trajectory_path_; }
/// \brief Returns the vehicle to sensor calibration transformation and the
/// time period (in secs) between sequential point cloud scans.
bool GetCalibration(Eigen::Matrix4d& calibration, double& period) const;
/// \brief Returns a list of (timestamp, pose) representing the ground truth
/// trajectory of the sequence.
std::vector<std::pair<double, Eigen::Matrix4d>> GetTrajectory() const;
private:
/// List of paths to the point clouds.
std::vector<std::string> paths_;
/// Path to the calibration JSON file.
std::string calibration_path_;
/// Path to the TUM ground truth trajectory text file.
std::string trajectory_path_;
};
/// \class DemoFeatureMatchingPointClouds
/// \brief Data class for `DemoFeatureMatchingPointClouds` contains 2
/// point cloud fragments and their respective FPFH features and L32D features.
/// This data is used in Open3D for point cloud feature matching demo.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class DemoFeatureMatchingPointClouds : public DownloadDataset {
public:
DemoFeatureMatchingPointClouds(const std::string& data_root = "");
/// \brief Returns list of paths to point clouds, of size 2.
std::vector<std::string> GetPointCloudPaths() const {
return point_cloud_paths_;
}
/// \brief Returns list of paths to saved FPFH features binary for point
/// clouds, respectively, of size 2.
std::vector<std::string> GetFPFHFeaturePaths() const {
return fpfh_feature_paths_;
}
/// \brief Returns list of paths to saved L32D features binary for point
/// clouds, respectively, of size 2.
std::vector<std::string> GetL32DFeaturePaths() const {
return l32d_feature_paths_;
}
private:
/// List of paths to point clouds, of size 2.
std::vector<std::string> point_cloud_paths_;
/// List of saved FPFH features binary for point clouds,
/// respectively, of size 2.
std::vector<std::string> fpfh_feature_paths_;
/// List of saved L32D features binary for point clouds,
/// respectively, of size 2.
std::vector<std::string> l32d_feature_paths_;
};
/// \class DemoICPPointClouds
/// \brief Data class for `DemoICPPointClouds` contains 3 point clouds of binary
/// PCD format. This data is used in Open3D for ICP demo.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class DemoICPPointClouds : public DownloadDataset {
public:
DemoICPPointClouds(const std::string& data_root = "");
/// \brief Returns list of 3 point cloud paths.
std::vector<std::string> GetPaths() const { return paths_; }
/// \brief Path to the point cloud at index. Use `GetPaths(0)`,
/// `GetPaths(1)`, and `GetPaths(2)` to access the paths.
std::string GetPaths(size_t index) const;
/// \brief Path to the transformation metadata log file, containing
/// transformation between frame 0 and 1, and frame 1 and 2.
std::string GetTransformationLogPath() const {
return transformation_log_path_;
}
private:
// List of path to PCD point-cloud fragments.
std::vector<std::string> paths_;
std::string transformation_log_path_;
};
/// \class DemoPoseGraphOptimization
/// \brief Data class for `DemoPoseGraphOptimization` contains an example
/// fragment pose graph, and global pose graph. This data is used in Open3D
/// for pose graph optimization demo.
class DemoPoseGraphOptimization : public DownloadDataset {
public:
DemoPoseGraphOptimization(const std::string& data_root = "");
/// \brief Path to example global pose graph (json).
std::string GetPoseGraphFragmentPath() const {
return pose_graph_fragment_path_;
}
/// \brief Path to example fragment pose graph (json).
std::string GetPoseGraphGlobalPath() const {
return pose_graph_global_path_;
}
private:
/// Path to example global pose graph (json).
std::string pose_graph_fragment_path_;
/// Path to example fragment pose graph (json).
std::string pose_graph_global_path_;
};
/// \class EaglePointCloud
/// \brief Data class for `EaglePointCloud` contains the `EaglePointCloud.ply`
/// file.
class EaglePointCloud : public DownloadDataset {
public:
EaglePointCloud(const std::string& data_root = "");
/// \brief Path to the `EaglePointCloud.ply` file.
std::string GetPath() const { return path_; }
private:
/// Path to `EaglePointCloud.ply` file.
std::string path_;
};
/// \class FlightHelmetModel
/// \brief Data class for `FlightHelmetModel` contains a flight helmet model
/// file, along with material and various other texture files. The model file
/// can be accessed using `GetPath()`, however in order to access the paths to
/// the texture files one may use `GetPath(filename)` method or get the
/// unordered map of filename to path using `GetPathMap()`.
class FlightHelmetModel : public DownloadDataset {
public:
FlightHelmetModel(const std::string& data_root = "");
/// \brief Path to the `filename`. By default it returns the path to
/// `FlightHelmet.gltf` file. Refer documentation page for available
/// options.
std::string GetPath(const std::string filename = "flight_helmet") const {
return map_filename_to_path_.at(filename);
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class JackJackL515Bag
/// \brief Data class for `JackJackL515Bag` contains the RealSense L515
/// `JackJackL515Bag.bag` file.
class JackJackL515Bag : public DownloadDataset {
public:
JackJackL515Bag(const std::string& data_root = "");
/// \brief Path to the `JackJackL515Bag.bag` file.
std::string GetPath() const { return path_; }
private:
/// Path to `JackJackL515Bag.bag` file.
std::string path_;
};
/// \class JuneauImage
/// \brief Data class for `JuneauImage` contains the `JuneauImage.jpg` file.
class JuneauImage : public DownloadDataset {
public:
JuneauImage(const std::string& data_root = "");
/// \brief Path to the `JuneauImage.jgp` file.
std::string GetPath() const { return path_; }
private:
/// Path to `JuneauImage.jgp` file.
std::string path_;
};
/// \class KnotMesh
/// \brief Data class for `KnotMesh` contains the `KnotMesh.ply` file.
class KnotMesh : public DownloadDataset {
public:
KnotMesh(const std::string& data_root = "");
/// \brief Path to the `KnotMesh.ply` file.
std::string GetPath() const { return path_; }
private:
/// Path to `KnotMesh.ply` file.
std::string path_;
};
/// \class LivingRoomPointClouds
/// \brief Dataset class for `LivingRoomPointClouds` contains 57 point
/// clouds of binary PLY format.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class LivingRoomPointClouds : public DownloadDataset {
public:
LivingRoomPointClouds(const std::string& data_root = "");
/// \brief Returns list of paths to ply point-cloud fragments of size 57.
std::vector<std::string> GetPaths() const { return paths_; }
/// \brief Path to the ply point-cloud fragment at index (from 0 to
/// 56). Use `GetPaths(0)`, `GetPaths(1)` ... `GetPaths(56)` to access the
/// paths.
std::string GetPaths(size_t index) const;
private:
/// List of paths to ply point-cloud fragments of size 57.
std::vector<std::string> paths_;
};
/// \class LoungeRGBDImages
/// \brief Data class for `LoungeRGBDImages` contains a sample set of 3000 color
/// and depth images from Stanford Lounge RGBD dataset. Additionally it also
/// contains camera trajectory log, and mesh reconstruction.
class LoungeRGBDImages : public DownloadDataset {
public:
LoungeRGBDImages(const std::string& data_root = "");
/// \brief Returns List of paths to color image samples of size 3000.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Returns List of paths to depth image samples of size 3000.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Path to camera trajectory log file
/// `lounge_trajectory.log`.
std::string GetTrajectoryLogPath() const { return trajectory_log_path_; }
/// \brief Path to mesh reconstruction `lounge.ply`.
std::string GetReconstructionPath() const { return reconstruction_path_; }
private:
/// List of paths to color image samples of size 3000.
std::vector<std::string> color_paths_;
/// List of paths to depth image samples of size 3000.
std::vector<std::string> depth_paths_;
/// Path to camera trajectory log file `lounge_trajectory.log`.
std::string trajectory_log_path_;
/// Path to mesh reconstruction.
std::string reconstruction_path_;
};
/// \class MetalTexture
/// \brief Data class for `MetalTexture` contains albedo, normal, roughness and
/// metallic texture files for metal based material.
class MetalTexture : public DownloadDataset {
public:
MetalTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the path to metallic texture image.
std::string GetMetallicTexturePath() const {
return map_filename_to_path_.at("metallic");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class MonkeyModel
/// \brief Data class for `MonkeyModel` contains a monkey model file, along with
/// material and various other texture files. The model file can be accessed
/// using `GetPath()`, however in order to access the paths to the texture files
/// one may use `GetPath(filename)` method or get the unordered map of filename
/// to path using `GetPathMap()`.
class MonkeyModel : public DownloadDataset {
public:
MonkeyModel(const std::string& data_root = "");
/// \brief Path to the `filename`. By default it returns the path to
/// `mokey.obj` file. Refer documentation page for available options.
std::string GetPath(const std::string filename = "monkey_model") const {
return map_filename_to_path_.at(filename);
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class OfficePointClouds
/// \brief Dataset class for `OfficePointClouds` contains 53 point clouds
/// of binary PLY format.
/// \copyright Creative Commons 3.0 (CC BY 3.0).
class OfficePointClouds : public DownloadDataset {
public:
OfficePointClouds(const std::string& data_root = "");
/// \brief Returns list of paths to ply point-cloud fragments of size 52.
std::vector<std::string> GetPaths() const { return paths_; }
/// \brief Path to the ply point-cloud fragment at index (from 0 to
/// 52). Use `GetPaths(0)`, `GetPaths(1)` ... `GetPaths(52)` to access the
/// paths.
std::string GetPaths(size_t index) const;
private:
/// List of paths to ply point-cloud fragments of size 53.
std::vector<std::string> paths_;
};
/// \class PCDPointCloud
/// \brief Data class for `PCDPointCloud` contains the `fragment.pcd`
/// point cloud mesh from the `Redwood Living Room` dataset.
class PCDPointCloud : public DownloadDataset {
public:
PCDPointCloud(const std::string& data_root = "");
/// \brief Path to the `pcd` format point cloud.
std::string GetPath() const { return path_; }
private:
/// Path to the `pcd` format point cloud.
std::string path_;
};
/// \class PLYPointCloud
/// \brief Data class for `PLYPointCloud` contains the `fragment.ply`
/// point cloud mesh from the `Redwood Living Room` dataset.
class PLYPointCloud : public DownloadDataset {
public:
PLYPointCloud(const std::string& data_root = "");
/// \brief Path to the PLY format point cloud.
std::string GetPath() const { return path_; }
private:
/// Path to the PLY format point cloud.
std::string path_;
};
/// \class PTSPointCloud
/// \brief Data class for `PTSPointCloud` contains a sample point-cloud of PTS
/// format.
class PTSPointCloud : public DownloadDataset {
public:
PTSPointCloud(const std::string& data_root = "");
/// \brief Path to the PTS format point cloud.
std::string GetPath() const { return path_; }
private:
/// Path to the PTS format point cloud.
std::string path_;
};
/// \class PaintedPlasterTexture
/// \brief Data class for `PaintedPlasterTexture` contains albedo, normal and
/// roughness texture files for painted plaster based material.
class PaintedPlasterTexture : public DownloadDataset {
public:
PaintedPlasterTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class RedwoodIndoorLivingRoom1 (Augmented ICL-NUIM Dataset)
/// \brief Data class for `RedwoodIndoorLivingRoom1`, containing dense point
/// cloud, rgb sequence, clean depth sequence, noisy depth sequence, oni
/// sequence, and ground-truth camera trajectory.
///
/// RedwoodIndoorLivingRoom1
/// ├── colors
/// │ ├── 00000.jpg
/// │ ├── 00001.jpg
/// │ ├── ...
/// │ └── 02869.jpg
/// ├── depth
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02869.png
/// ├── depth_noisy
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02869.png
/// ├── dist-model.txt
/// ├── livingroom1.oni
/// ├── livingroom1-traj.txt
/// └── livingroom.ply
class RedwoodIndoorLivingRoom1 : public DownloadDataset {
public:
RedwoodIndoorLivingRoom1(const std::string& data_root = "");
/// \brief Path to the point cloud.
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Paths to the color images.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Paths to the clean depth images.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Paths to the noisy depth images.
std::vector<std::string> GetNoisyDepthPaths() const {
return noisy_depth_paths_;
}
/// \brief Paths to the ONI sequence.
std::string GetONIPath() const { return oni_path_; }
/// \brief Path to the ground-truth camera trajectory.
std::string GetTrajectoryPath() const { return trajectory_path_; }
/// \brief Path to the noise model.
std::string GetNoiseModelPath() const { return noise_model_path_; }
private:
std::string point_cloud_path_;
std::vector<std::string> color_paths_;
std::vector<std::string> depth_paths_;
std::vector<std::string> noisy_depth_paths_;
std::string oni_path_;
std::string trajectory_path_;
std::string noise_model_path_;
};
/// \class RedwoodIndoorLivingRoom2 (Augmented ICL-NUIM Dataset)
/// \brief Data class for `RedwoodIndoorLivingRoom2`, containing dense point
/// cloud, rgb sequence, clean depth sequence, noisy depth sequence, oni
/// sequence, and ground-truth camera trajectory.
///
/// RedwoodIndoorLivingRoom2
/// ├── colors
/// │ ├── 00000.jpg
/// │ ├── 00001.jpg
/// │ ├── ...
/// │ └── 02349.jpg
/// ├── depth
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02349.png
/// ├── depth_noisy
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02349.png
/// ├── dist-model.txt
/// ├── livingroom2.oni
/// ├── livingroom2-traj.txt
/// └── livingroom.ply
class RedwoodIndoorLivingRoom2 : public DownloadDataset {
public:
RedwoodIndoorLivingRoom2(const std::string& data_root = "");
/// \brief Path to the point cloud.
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Paths to the color images.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Paths to the clean depth images.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Paths to the noisy depth images.
std::vector<std::string> GetNoisyDepthPaths() const {
return noisy_depth_paths_;
}
/// \brief Paths to the ONI sequence.
std::string GetONIPath() const { return oni_path_; }
/// \brief Path to the ground-truth camera trajectory.
std::string GetTrajectoryPath() const { return trajectory_path_; }
/// \brief Path to the noise model.
std::string GetNoiseModelPath() const { return noise_model_path_; }
private:
std::string point_cloud_path_;
std::vector<std::string> color_paths_;
std::vector<std::string> depth_paths_;
std::vector<std::string> noisy_depth_paths_;
std::string oni_path_;
std::string trajectory_path_;
std::string noise_model_path_;
};
/// \class RedwoodIndoorOffice1 (Augmented ICL-NUIM Dataset)
/// \brief Data class for `RedwoodIndoorOffice1`, containing dense point
/// cloud, rgb sequence, clean depth sequence, noisy depth sequence, oni
/// sequence, and ground-truth camera trajectory.
///
/// RedwoodIndoorOffice1
/// ├── colors
/// │ ├── 00000.jpg
/// │ ├── 00001.jpg
/// │ ├── ...
/// │ └── 02689.jpg
/// ├── depth
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02689.png
/// ├── depth_noisy
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02689.png
/// ├── dist-model.txt
/// ├── office1.oni
/// ├── office1-traj.txt
/// └── office.ply
class RedwoodIndoorOffice1 : public DownloadDataset {
public:
RedwoodIndoorOffice1(const std::string& data_root = "");
/// \brief Path to the point cloud.
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Paths to the color images.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Paths to the clean depth images.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Paths to the noisy depth images.
std::vector<std::string> GetNoisyDepthPaths() const {
return noisy_depth_paths_;
}
/// \brief Paths to the ONI sequence.
std::string GetONIPath() const { return oni_path_; }
/// \brief Path to the ground-truth camera trajectory.
std::string GetTrajectoryPath() const { return trajectory_path_; }
/// \brief Path to the noise model.
std::string GetNoiseModelPath() const { return noise_model_path_; }
private:
std::string point_cloud_path_;
std::vector<std::string> color_paths_;
std::vector<std::string> depth_paths_;
std::vector<std::string> noisy_depth_paths_;
std::string oni_path_;
std::string trajectory_path_;
std::string noise_model_path_;
};
/// \class RedwoodIndoorOffice2 (Augmented ICL-NUIM Dataset)
/// \brief Data class for `RedwoodIndoorOffice2`, containing dense point
/// cloud, rgb sequence, clean depth sequence, noisy depth sequence, oni
/// sequence, and ground-truth camera trajectory.
///
/// RedwoodIndoorOffice2
/// ├── colors
/// │ ├── 00000.jpg
/// │ ├── 00001.jpg
/// │ ├── ...
/// │ └── 02537.jpg
/// ├── depth
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02537.png
/// ├── depth_noisy
/// │ ├── 00000.png
/// │ ├── 00001.png
/// │ ├── ...
/// │ └── 02537.png
/// ├── dist-model.txt
/// ├── office2.oni
/// ├── office2-traj.txt
/// └── office.ply
class RedwoodIndoorOffice2 : public DownloadDataset {
public:
RedwoodIndoorOffice2(const std::string& data_root = "");
/// \brief Path to the point cloud.
std::string GetPointCloudPath() const { return point_cloud_path_; }
/// \brief Paths to the color images.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Paths to the clean depth images.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Paths to the noisy depth images.
std::vector<std::string> GetNoisyDepthPaths() const {
return noisy_depth_paths_;
}
/// \brief Paths to the ONI sequence.
std::string GetONIPath() const { return oni_path_; }
/// \brief Path to the ground-truth camera trajectory.
std::string GetTrajectoryPath() const { return trajectory_path_; }
/// \brief Path to the noise model.
std::string GetNoiseModelPath() const { return noise_model_path_; }
private:
std::string point_cloud_path_;
std::vector<std::string> color_paths_;
std::vector<std::string> depth_paths_;
std::vector<std::string> noisy_depth_paths_;
std::string oni_path_;
std::string trajectory_path_;
std::string noise_model_path_;
};
/// \class SampleFountainRGBDImages
/// \brief Data class for `SampleFountainRGBDImages` contains a sample set
/// of 33 color and depth images from the `Fountain RGBD dataset`.
class SampleFountainRGBDImages : public DownloadDataset {
public:
SampleFountainRGBDImages(const std::string& data_root = "");
/// \brief Returns List of paths to color image samples of size 33.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Returns List of paths to depth image samples of size 33.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Path to camera poses at key frames log file `key.log`.
std::string GetKeyframePosesLogPath() const {
return keyframe_poses_log_path_;
}
/// \brief Path to mesh reconstruction.
std::string GetReconstructionPath() const { return reconstruction_path_; }
private:
std::vector<std::string> color_paths_;
std::vector<std::string> depth_paths_;
std::string keyframe_poses_log_path_;
std::string reconstruction_path_;
};
/// \class SampleL515Bag
/// \brief Data class for `SampleL515Bag` contains the `SampleL515Bag.bag` file.
class SampleL515Bag : public DownloadDataset {
public:
SampleL515Bag(const std::string& data_root = "");
/// \brief Path to the `SampleL515Bag.bag` file.
std::string GetPath() const { return path_; }
private:
/// Path to `SampleL515Bag.bag` file.
std::string path_;
};
/// \class SampleNYURGBDImage
/// \brief Data class for `SampleNYURGBDImage` contains a color image
/// `NYU_color.ppm` and a depth image `NYU_depth.pgm` sample from NYU RGBD
/// dataset.
class SampleNYURGBDImage : public DownloadDataset {
public:
SampleNYURGBDImage(const std::string& data_root = "");
/// \brief Path to color image sample.
std::string GetColorPath() const { return color_path_; }
/// \brief Path to depth image sample.
std::string GetDepthPath() const { return depth_path_; }
private:
/// Path to color image sample.
std::string color_path_;
/// Path to depth image sample.
std::string depth_path_;
};
/// \class SampleRedwoodRGBDImages
/// \brief Data class for `SampleRedwoodRGBDImages` contains a sample set of
/// 5 color and depth images from Redwood RGBD dataset living-room1.
// Additionally it also contains camera trajectory log, camera odometry log,
// rgbd match, and point cloud reconstruction obtained using TSDF.
class SampleRedwoodRGBDImages : public DownloadDataset {
public:
SampleRedwoodRGBDImages(const std::string& data_root = "");
/// \brief Returns List of paths to color image samples of size 5.
std::vector<std::string> GetColorPaths() const { return color_paths_; }
/// \brief Returns List of paths to depth image samples of size 5.
std::vector<std::string> GetDepthPaths() const { return depth_paths_; }
/// \brief Path to camera trajectory log file `trajectory.log`.
std::string GetTrajectoryLogPath() const { return trajectory_log_path_; }
/// \brief Path to camera trajectory log file `odometry.log`.
std::string GetOdometryLogPath() const { return odometry_log_path_; }
/// \brief Path to color and depth image match file `rgbd.match`.
std::string GetRGBDMatchPath() const { return rgbd_match_path_; }
/// \brief Path to point cloud reconstruction from TSDF.
std::string GetReconstructionPath() const { return reconstruction_path_; }
/// \brief Path to pinhole camera intrinsic (json).
std::string GetCameraIntrinsicPath() const {
return camera_intrinsic_path_;
}
private:
/// List of paths to color image samples of size 5.
std::vector<std::string> color_paths_;
/// List of paths to depth image samples of size 5.
std::vector<std::string> depth_paths_;
/// Path to camera trajectory log file `trajectory.log`.
std::string trajectory_log_path_;
/// Path to camera odometry log file `odometry.log`.
std::string odometry_log_path_;
/// Path to color and depth image match file `rgbd.match`.
std::string rgbd_match_path_;
/// Path to point cloud reconstruction from TSDF.
std::string reconstruction_path_;
/// Path to pinhole camera intrinsic.
std::string camera_intrinsic_path_;
};
/// \class SampleSUNRGBDImage
/// \brief Data class for `SampleSUNRGBDImage` contains a color image
/// `SUN_color.jpg` and a depth image `SUN_depth.png` sample from SUN RGBD
/// dataset.
class SampleSUNRGBDImage : public DownloadDataset {
public:
SampleSUNRGBDImage(const std::string& data_root = "");
/// \brief Path to color image sample.
std::string GetColorPath() const { return color_path_; }
/// \brief Path to depth image sample.
std::string GetDepthPath() const { return depth_path_; }
private:
/// Path to color image sample.
std::string color_path_;
/// Path to depth image sample.
std::string depth_path_;
};
/// \class SampleTUMRGBDImage
/// \brief Data class for `SampleTUMRGBDImage` contains a color image
/// `TUM_color.png` and a depth image `TUM_depth.png` sample from TUM RGBD
/// dataset.
class SampleTUMRGBDImage : public DownloadDataset {
public:
SampleTUMRGBDImage(const std::string& data_root = "");
/// \brief Path to color image sample.
std::string GetColorPath() const { return color_path_; }
/// \brief Path to depth image sample.
std::string GetDepthPath() const { return depth_path_; }
private:
/// Path to color image sample.
std::string color_path_;
/// Path to depth image sample.
std::string depth_path_;
};
/// \class SwordModel
/// \brief Data class for `SwordModel` contains a sword model file, along with
/// material and various other texture files. The model file can be accessed
/// using `GetPath()`, however in order to access the paths to the texture files
/// one may use `GetPath(filename)` method or get the unordered map of filename
/// to path using `GetPathMap()`.
class SwordModel : public DownloadDataset {
public:
SwordModel(const std::string& data_root = "");
/// \brief Path to the `filename`. By default it returns the
/// path to `sword.obj` file. Refer documentation page for available
/// options.
std::string GetPath(const std::string filename = "sword_model") const {
return map_filename_to_path_.at(filename);
}
/// \brief Returns the map of filename to path. Refer documentation page
/// for available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class TerrazzoTexture
/// \brief Data class for `TerrazzoTexture` contains albedo, normal and
/// roughness texture files for terrazzo based material.
class TerrazzoTexture : public DownloadDataset {
public:
TerrazzoTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class TilesTexture
/// \brief Data class for `TilesTexture` contains albedo, normal and roughness
/// texture files for tiles based material.
class TilesTexture : public DownloadDataset {
public:
TilesTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class WoodFloorTexture
/// \brief Data class for `WoodFloorTexture` contains albedo, normal and
/// roughness texture files for wooden floor based material.
class WoodFloorTexture : public DownloadDataset {
public:
WoodFloorTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
/// \class WoodTexture
/// \brief Data class for `WoodTexture` contains albedo, normal and roughness
/// texture files for wood based material.
class WoodTexture : public DownloadDataset {
public:
WoodTexture(const std::string& data_root = "");
/// \brief Returns the path to albedo color texture image.
std::string GetAlbedoTexturePath() const {
return map_filename_to_path_.at("albedo");
}
/// \brief Returns the path to normal texture image.
std::string GetNormalTexturePath() const {
return map_filename_to_path_.at("normal");
}
/// \brief Returns the path to roughness texture image.
std::string GetRoughnessTexturePath() const {
return map_filename_to_path_.at("roughness");
}
/// \brief Returns the map of filename to path. Refer documentation page for
/// available options.
std::unordered_map<std::string, std::string> GetPathMap() const {
return map_filename_to_path_;
}
private:
/// Map to path for the available filenames.
std::unordered_map<std::string, std::string> map_filename_to_path_;
};
} // namespace data
} // namespace open3d