Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
open3d::t::pipelines::odometry Namespace Reference

Data Structures

class  OdometryConvergenceCriteria
class  OdometryResult
class  OdometryLossParams
class  Tensor
class  Image
 The Image class stores image with customizable rows, cols, channels, dtype and device. More...
class  RGBDImage
 RGBDImage A pair of color and depth images. More...

Enumerations

enum class  Method { PointToPlane , Intensity , Hybrid }

Functions

OdometryResult RGBDOdometryMultiScalePointToPlane (const RGBDImage &source, const RGBDImage &target, const Tensor &intrinsics, const Tensor &trans, const float depth_scale, const float depth_max, const std::vector< OdometryConvergenceCriteria > &criteria, const OdometryLossParams &params)
OdometryResult RGBDOdometryMultiScaleIntensity (const RGBDImage &source, const RGBDImage &target, const Tensor &intrinsic, const Tensor &trans, const float depth_scale, const float depth_max, const std::vector< OdometryConvergenceCriteria > &criteria, const OdometryLossParams &params)
OdometryResult RGBDOdometryMultiScaleHybrid (const RGBDImage &source, const RGBDImage &target, const Tensor &intrinsics, const Tensor &trans, const float depth_scale, const float depth_max, const std::vector< OdometryConvergenceCriteria > &criteria, const OdometryLossParams &params)
OdometryResult RGBDOdometryMultiScale (const t::geometry::RGBDImage &source, const t::geometry::RGBDImage &target, const core::Tensor &intrinsics, const core::Tensor &init_source_to_target=core::Tensor::Eye(4, core::Float64, core::Device("CPU:0")), const float depth_scale=1000.0f, const float depth_max=3.0f, const std::vector< OdometryConvergenceCriteria > &criteria_list={10, 5, 3}, const Method method=Method::Hybrid, const OdometryLossParams &params=OdometryLossParams())
 Create an RGBD image pyramid given the original source and target RGBD images, and perform hierarchical odometry using specified method. Can be used for offline odometry where we do not expect to push performance to the extreme and not reuse vertex/normal map computed before. Input RGBD images hold a depth image (UInt16 or Float32) with a scale factor and a color image (UInt8 x 3).
OdometryResult ComputeOdometryResultPointToPlane (const core::Tensor &source_vertex_map, const core::Tensor &target_vertex_map, const core::Tensor &target_normal_map, const core::Tensor &intrinsics, const core::Tensor &init_source_to_target, const float depth_outlier_trunc, const float depth_huber_delta)
 Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \([(V_p - V_q)^T N_p]^2\), where \( V_p \) denotes the vertex at pixel p in the source, \( V_q \) denotes the vertex at pixel q in the target, \( N_p \) denotes the normal at pixel p in the source. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. KinectFusion, ISMAR 2011.
OdometryResult ComputeOdometryResultIntensity (const core::Tensor &source_depth, const core::Tensor &target_depth, const core::Tensor &source_intensity, const core::Tensor &target_intensity, const core::Tensor &target_intensity_dx, const core::Tensor &target_intensity_dy, const core::Tensor &source_vertex_map, const core::Tensor &intrinsics, const core::Tensor &init_source_to_target, const float depth_outlier_trunc, const float intensity_huber_delta)
 Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \((I_p - I_q)^2\), where \( I_p \) denotes the intensity at pixel p in the source, \( I_q \) denotes the intensity at pixel q in the target. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. Real-time visual odometry from dense RGB-D images, ICCV Workshops, 2011.
OdometryResult ComputeOdometryResultHybrid (const core::Tensor &source_depth, const core::Tensor &target_depth, const core::Tensor &source_intensity, const core::Tensor &target_intensity, const core::Tensor &target_depth_dx, const core::Tensor &target_depth_dy, const core::Tensor &target_intensity_dx, const core::Tensor &target_intensity_dy, const core::Tensor &source_vertex_map, const core::Tensor &intrinsics, const core::Tensor &init_source_to_target, const float depth_outlier_trunc, const float depth_huber_delta, const float intensity_huber_delta)
 Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \((I_p - I_q)^2 + \lambda(D_p - (D_q)')^2\), where \( I_p \) denotes the intensity at pixel p in the source, \( I_q \) denotes the intensity at pixel q in the target. \( D_p \) denotes the depth pixel p in the source, \( D_q \) denotes the depth pixel q in the target. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. Reference: J. Park, Q.Y. Zhou, and V. Koltun, Colored Point Cloud Registration Revisited, ICCV, 2017.
core::Tensor ComputeOdometryInformationMatrix (const geometry::Image &source_depth, const geometry::Image &target_depth, const core::Tensor &intrinsic, const core::Tensor &source_to_target, const float dist_thr, const float depth_scale, const float depth_max)

Enumeration Type Documentation

◆ Method

Enumerator
PointToPlane 
Intensity 
Hybrid 

Function Documentation

◆ ComputeOdometryInformationMatrix()

core::Tensor open3d::t::pipelines::odometry::ComputeOdometryInformationMatrix ( const geometry::Image & source_depth,
const geometry::Image & target_depth,
const core::Tensor & intrinsic,
const core::Tensor & source_to_target,
const float dist_thr,
const float depth_scale = 1000.0f,
const float depth_max = 3.0f )

Estimates 6x6 information matrix from a pair of depth images. The process is akin to information matrix creation for point clouds.

◆ ComputeOdometryResultHybrid()

OdometryResult open3d::t::pipelines::odometry::ComputeOdometryResultHybrid ( const core::Tensor & source_depth,
const core::Tensor & target_depth,
const core::Tensor & source_intensity,
const core::Tensor & target_intensity,
const core::Tensor & target_depth_dx,
const core::Tensor & target_depth_dy,
const core::Tensor & target_intensity_dx,
const core::Tensor & target_intensity_dy,
const core::Tensor & source_vertex_map,
const core::Tensor & intrinsics,
const core::Tensor & init_source_to_target,
const float depth_outlier_trunc,
const float depth_huber_delta,
const float intensity_huber_delta )

Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \((I_p - I_q)^2 + \lambda(D_p - (D_q)')^2\), where \( I_p \) denotes the intensity at pixel p in the source, \( I_q \) denotes the intensity at pixel q in the target. \( D_p \) denotes the depth pixel p in the source, \( D_q \) denotes the depth pixel q in the target. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. Reference: J. Park, Q.Y. Zhou, and V. Koltun, Colored Point Cloud Registration Revisited, ICCV, 2017.

Parameters
source_depth(rows, cols, channels=1) Float32 source depth image obtained by PreprocessDepth before calling this function.
target_depth(rows, cols, channels=1) Float32 target depth image obtained by PreprocessDepth before calling this function.
source_intensity(rows, cols, channels=1) Float32 source intensity image obtained by RGBToGray before calling this function.
target_intensity(rows, cols, channels=1) Float32 target intensity image obtained by RGBToGray before calling this function.
target_depth_dx(rows, cols, channels=1) Float32 target depth gradient image along x-axis obtained by FilterSobel before calling this function.
target_depth_dy(rows, cols, channels=1) Float32 target depth gradient image along y-axis obtained by FilterSobel before calling this function.
target_intensity_dx(rows, cols, channels=1) Float32 target intensity gradient image along x-axis obtained by FilterSobel before calling this function.
target_intensity_dy(rows, cols, channels=1) Float32 target intensity gradient image along y-axis obtained by FilterSobel before calling this function.
source_vertex_map(rows, cols, channels=3) Float32 source vertex image obtained by CreateVertexMap before calling this function.
intrinsics(3, 3) intrinsic matrix for projection.
init_source_to_target(4, 4) initial transformation matrix from source to target.
depth_outlier_truncDepth difference threshold used to filter projective associations.
depth_huber_deltaHuber norm parameter used in depth loss.
intensity_huber_deltaHuber norm parameter used in intensity loss.
Returns
odometry result, with(4, 4) optimized transformation matrix from source to target, inlier ratio, and fitness.

◆ ComputeOdometryResultIntensity()

OdometryResult open3d::t::pipelines::odometry::ComputeOdometryResultIntensity ( const core::Tensor & source_depth,
const core::Tensor & target_depth,
const core::Tensor & source_intensity,
const core::Tensor & target_intensity,
const core::Tensor & target_intensity_dx,
const core::Tensor & target_intensity_dy,
const core::Tensor & source_vertex_map,
const core::Tensor & intrinsics,
const core::Tensor & init_source_to_target,
const float depth_outlier_trunc,
const float intensity_huber_delta )

Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \((I_p - I_q)^2\), where \( I_p \) denotes the intensity at pixel p in the source, \( I_q \) denotes the intensity at pixel q in the target. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. Real-time visual odometry from dense RGB-D images, ICCV Workshops, 2011.

Parameters
source_depth(rows, cols, channels=1) Float32 source depth image obtained by PreprocessDepth before calling this function.
target_depth(rows, cols, channels=1) Float32 target depth image obtained by PreprocessDepth before calling this function.
source_intensity(rows, cols, channels=1) Float32 source intensity image obtained by RGBToGray before calling this function.
target_intensity(rows, cols, channels=1) Float32 target intensity image obtained by RGBToGray before calling this function.
target_intensity_dx(rows, cols, channels=1) Float32 target intensity gradient image along x-axis obtained by FilterSobel before calling this function.
target_intensity_dy(rows, cols, channels=1) Float32 target intensity gradient image along y-axis obtained by FilterSobel before calling this function.
source_vertex_map(rows, cols, channels=3) Float32 source vertex image obtained by CreateVertexMap before calling this function.
intrinsics(3, 3) intrinsic matrix for projection.
init_source_to_target(4, 4) initial transformation matrix from source to target.
depth_outlier_truncDepth difference threshold used to filter projective associations.
intensity_huber_deltaHuber norm parameter used in intensity loss.
Returns
odometry result, with(4, 4) optimized transformation matrix from source to target, inlier ratio, and fitness.

◆ ComputeOdometryResultPointToPlane()

OdometryResult open3d::t::pipelines::odometry::ComputeOdometryResultPointToPlane ( const core::Tensor & source_vertex_map,
const core::Tensor & target_vertex_map,
const core::Tensor & target_normal_map,
const core::Tensor & intrinsics,
const core::Tensor & init_source_to_target,
const float depth_outlier_trunc,
const float depth_huber_delta )

Estimates the 4x4 rigid transformation T from source to target, with inlier rmse and fitness. Performs one iteration of RGBD odometry using loss function \([(V_p - V_q)^T N_p]^2\), where \( V_p \) denotes the vertex at pixel p in the source, \( V_q \) denotes the vertex at pixel q in the target, \( N_p \) denotes the normal at pixel p in the source. q is obtained by transforming p with init_source_to_target then projecting with intrinsics. KinectFusion, ISMAR 2011.

Parameters
source_vertex_map(rows, cols, channels=3) Float32 source vertex image obtained by CreateVertexMap before calling this function.
target_vertex_map(rows, cols, channels=3) Float32 target vertex image obtained by CreateVertexMap before calling this function.
target_normal_map(rows, cols, channels=3) Float32 target normal image obtained by CreateNormalMap before calling this function.
intrinsics(3, 3) intrinsic matrix for projection.
init_source_to_target(4, 4) initial transformation matrix from source to target.
depth_outlier_truncDepth difference threshold used to filter projective associations.
depth_huber_deltaHuber norm parameter used in depth loss.
Returns
odometry result, with (4, 4) optimized transformation matrix from source to target, inlier ratio, and fitness.

◆ RGBDOdometryMultiScale()

OdometryResult open3d::t::pipelines::odometry::RGBDOdometryMultiScale ( const t::geometry::RGBDImage & source,
const t::geometry::RGBDImage & target,
const core::Tensor & intrinsics,
const core::Tensor & init_source_to_target = core::Tensor::Eye(4, core::Float64core::Device("CPU:0")),
const float depth_scale = 1000.0f,
const float depth_max = 3.0f,
const std::vector< OdometryConvergenceCriteria > & criteria_list = {10, 5, 3},
const Method method = Method::Hybrid,
const OdometryLossParams & params = OdometryLossParams() )

Create an RGBD image pyramid given the original source and target RGBD images, and perform hierarchical odometry using specified method. Can be used for offline odometry where we do not expect to push performance to the extreme and not reuse vertex/normal map computed before. Input RGBD images hold a depth image (UInt16 or Float32) with a scale factor and a color image (UInt8 x 3).

Parameters
sourceSource RGBD image.
targetTarget RGBD image.
intrinsics(3, 3) intrinsic matrix for projection of core::Float64 on CPU.
init_source_to_target(4, 4) initial transformation matrix from source to target of core::Float64 on CPU.
depth_scaleConverts depth pixel values to meters by dividing the scale factor.
depth_maxMax depth to truncate depth image with noisy measurements.
criteria_listCriteria used to define and terminate iterations. In multiscale odometry the order is from coarse to fine. Inputting a vector of iterations by default triggers the implicit conversion.
methodMethod used to apply RGBD odometry.
paramsParameters used in loss function, including outlier rejection threshold and Huber norm parameters.
Returns
odometry result, with (4, 4) optimized transformation matrix from source to target, inlier ratio, and fitness.

◆ RGBDOdometryMultiScaleHybrid()

OdometryResult open3d::t::pipelines::odometry::RGBDOdometryMultiScaleHybrid ( const RGBDImage & source,
const RGBDImage & target,
const Tensor & intrinsics,
const Tensor & trans,
const float depth_scale,
const float depth_max,
const std::vector< OdometryConvergenceCriteria > & criteria,
const OdometryLossParams & params )

◆ RGBDOdometryMultiScaleIntensity()

OdometryResult open3d::t::pipelines::odometry::RGBDOdometryMultiScaleIntensity ( const RGBDImage & source,
const RGBDImage & target,
const Tensor & intrinsic,
const Tensor & trans,
const float depth_scale,
const float depth_max,
const std::vector< OdometryConvergenceCriteria > & criteria,
const OdometryLossParams & params )

◆ RGBDOdometryMultiScalePointToPlane()

OdometryResult open3d::t::pipelines::odometry::RGBDOdometryMultiScalePointToPlane ( const RGBDImage & source,
const RGBDImage & target,
const Tensor & intrinsics,
const Tensor & trans,
const float depth_scale,
const float depth_max,
const std::vector< OdometryConvergenceCriteria > & criteria,
const OdometryLossParams & params )