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

130 lines
4.6 KiB
C++

// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/geometry/Geometry2D.h"
#include "open3d/geometry/Image.h"
namespace open3d {
namespace geometry {
class RGBDImage;
/// Typedef and functions for RGBDImagePyramid
typedef std::vector<std::shared_ptr<RGBDImage>> RGBDImagePyramid;
/// \class RGBDImage
///
/// \brief RGBDImage is for a pair of registered color and depth images,
///
/// viewed from the same view, of the same resolution.
/// If you have other format, convert it first.
class RGBDImage : public Geometry2D {
public:
/// \brief Default Comnstructor.
RGBDImage() : Geometry2D(Geometry::GeometryType::RGBDImage) {}
/// \brief Parameterized Constructor.
///
/// \param color The color image.
/// \param depth The depth image.
RGBDImage(const Image &color, const Image &depth)
: Geometry2D(Geometry::GeometryType::RGBDImage),
color_(color),
depth_(depth) {}
~RGBDImage() override {
color_.Clear();
depth_.Clear();
};
RGBDImage &Clear() override;
bool IsEmpty() const override;
Eigen::Vector2d GetMinBound() const override;
Eigen::Vector2d GetMaxBound() const override;
/// \brief Factory function to create an RGBD Image from color and depth
/// Images.
///
/// \param color The color image.
/// \param depth The depth image.
/// \param depth_scale The ratio to scale depth values. The depth values
/// will first be scaled and then truncated.
/// \param depth_trunc Depth values larger than \p depth_trunc gets
/// truncated to 0. The depth values will first be scaled and then
/// truncated.
/// \param convert_rgb_to_intensity - Whether to convert RGB
/// image to intensity image.
static std::shared_ptr<RGBDImage> CreateFromColorAndDepth(
const Image &color,
const Image &depth,
double depth_scale = 1000.0,
double depth_trunc = 3.0,
bool convert_rgb_to_intensity = true);
/// \brief Factory function to create an RGBD Image from Redwood dataset.
///
/// \param color The color image.
/// \param depth The depth image.
/// \param convert_rgb_to_intensity Whether to convert RGB image to
/// intensity image.
static std::shared_ptr<RGBDImage> CreateFromRedwoodFormat(
const Image &color,
const Image &depth,
bool convert_rgb_to_intensity = true);
/// \brief Factory function to create an RGBD Image from TUM dataset.
///
/// \param color The color image.
/// \param depth The depth image.
/// \param convert_rgb_to_intensity Whether to convert RGB image to
/// intensity image.
static std::shared_ptr<RGBDImage> CreateFromTUMFormat(
const Image &color,
const Image &depth,
bool convert_rgb_to_intensity = true);
/// \brief Factory function to create an RGBD Image from SUN3D dataset.
///
/// \param color The color image.
/// \param depth The depth image.
/// \param convert_rgb_to_intensity Whether to convert RGB image to
/// intensity image.
static std::shared_ptr<RGBDImage> CreateFromSUNFormat(
const Image &color,
const Image &depth,
bool convert_rgb_to_intensity = true);
/// \brief Factory function to create an RGBD Image from NYU dataset.
///
/// \param color The color image.
/// \param depth The depth image.
/// \param convert_rgb_to_intensity Whether to convert RGB image to
/// intensity image.
static std::shared_ptr<RGBDImage> CreateFromNYUFormat(
const Image &color,
const Image &depth,
bool convert_rgb_to_intensity = true);
static RGBDImagePyramid FilterPyramid(
const RGBDImagePyramid &rgbd_image_pyramid, Image::FilterType type);
RGBDImagePyramid CreatePyramid(
size_t num_of_levels,
bool with_gaussian_filter_for_color = true,
bool with_gaussian_filter_for_depth = false) const;
public:
/// The color image.
Image color_;
/// The depth image.
Image depth_;
};
} // namespace geometry
} // namespace open3d