ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cloudViewer::t::pipelines::kernel Namespace Reference

Namespaces

 odometry
 

Functions

void ComputeFPFHFeature (const core::Tensor &points, const core::Tensor &normals, const core::Tensor &indices, const core::Tensor &distance2, const core::Tensor &counts, core::Tensor &fpfhs, const utility::optional< core::Tensor > &mask, const utility::optional< core::Tensor > &map_info_idx_to_point_idx)
 
void ComputeFPFHFeatureCPU (const core::Tensor &points, const core::Tensor &normals, const core::Tensor &indices, const core::Tensor &distance2, const core::Tensor &counts, core::Tensor &fpfhs, const utility::optional< core::Tensor > &mask=utility::nullopt, const utility::optional< core::Tensor > &map_batch_info_idx_to_point_idx=utility::nullopt)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void ComputePairFeature (const scalar_t *p1, const scalar_t *n1, const scalar_t *p2, const scalar_t *n2, scalar_t *feature)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void UpdateSPFHFeature (const scalar_t *feature, int64_t idx, scalar_t hist_incr, scalar_t *spfh)
 
void FillInRigidAlignmentTerm (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &Ti_ps, const core::Tensor &Tj_qs, const core::Tensor &Ri_normal_ps, int i, int j, float threshold)
 
void FillInSLACAlignmentTerm (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &Ti_ps, const core::Tensor &Tj_qs, const core::Tensor &normal_ps, const core::Tensor &Ri_normal_ps, const core::Tensor &RjT_Ri_normal_ps, const core::Tensor &cgrid_idx_ps, const core::Tensor &cgrid_idx_qs, const core::Tensor &cgrid_ratio_qs, const core::Tensor &cgrid_ratio_ps, int i, int j, int n, float threshold)
 
void FillInSLACRegularizerTerm (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &grid_idx, const core::Tensor &grid_nbs_idx, const core::Tensor &grid_nbs_mask, const core::Tensor &positions_init, const core::Tensor &positions_curr, float weight, int n, int anchor_idx)
 
void FillInRigidAlignmentTermCPU (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &Ti_qs, const core::Tensor &Tj_qs, const core::Tensor &Ri_normal_ps, int i, int j, float threshold)
 
void FillInSLACAlignmentTermCPU (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &Ti_qs, const core::Tensor &Tj_qs, const core::Tensor &normal_ps, const core::Tensor &Ri_normal_ps, const core::Tensor &RjT_Ri_normal_ps, const core::Tensor &cgrid_idx_ps, const core::Tensor &cgrid_idx_qs, const core::Tensor &cgrid_ratio_qs, const core::Tensor &cgrid_ratio_ps, int i, int j, int n, float threshold)
 
void FillInSLACRegularizerTermCPU (core::Tensor &AtA, core::Tensor &Atb, core::Tensor &residual, const core::Tensor &grid_idx, const core::Tensor &grid_nbs_idx, const core::Tensor &grid_nbs_mask, const core::Tensor &positions_init, const core::Tensor &positions_curr, float weight, int n, int anchor_idx)
 
core::Tensor ComputePosePointToPlane (const core::Tensor &source_positions, const core::Tensor &target_positions, const core::Tensor &target_normals, const core::Tensor &correspondence_indices, const registration::RobustKernel &kernel)
 Computes pose for point to plane registration method. More...
 
core::Tensor ComputePoseColoredICP (const core::Tensor &source_positions, const core::Tensor &source_colors, const core::Tensor &target_positions, const core::Tensor &target_normals, const core::Tensor &target_colors, const core::Tensor &target_color_gradients, const core::Tensor &correspondence_indices, const registration::RobustKernel &kernel, const double &lambda_geometric)
 Computes pose for colored-icp registration method. More...
 
core::Tensor ComputePoseDopplerICP (const core::Tensor &source_points, const core::Tensor &source_dopplers, const core::Tensor &source_directions, const core::Tensor &target_points, const core::Tensor &target_normals, const core::Tensor &correspondence_indices, const core::Tensor &current_transform, const core::Tensor &transform_vehicle_to_sensor, const std::size_t iteration, const double period, const double lambda_doppler, const bool reject_dynamic_outliers, const double doppler_outlier_threshold, const std::size_t outlier_rejection_min_iteration, const std::size_t geometric_robust_loss_min_iteration, const std::size_t doppler_robust_loss_min_iteration, const registration::RobustKernel &geometric_kernel, const registration::RobustKernel &doppler_kernel)
 Computes pose for DopplerICP registration method. More...
 
std::tuple< core::Tensor, core::TensorComputeRtPointToPoint (const core::Tensor &source_positions, const core::Tensor &target_positions, const core::Tensor &correspondence_indices)
 Computes (R) Rotation {3,3} and (t) translation {3,} for point to point registration method. More...
 
core::Tensor ComputeInformationMatrix (const core::Tensor &target_positions, const core::Tensor &correspondence_indices)
 Computes Information Matrix of shape {6, 6}, of dtype Float64 on device CPU:0, from the target point cloud and correspondence indices w.r.t. target point cloud. Only target positions and correspondence indices are required. More...
 
template<typename scalar_t , typename func_t >
static void ComputePosePointToPlaneKernelCPU (const scalar_t *source_points_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const int64_t *correspondence_indices, const int n, scalar_t *global_sum, func_t GetWeightFromRobustKernel)
 
void ComputePosePointToPlaneCPU (const core::Tensor &source_points, const core::Tensor &target_points, const core::Tensor &target_normals, const core::Tensor &correspondence_indices, core::Tensor &pose, float &residual, int &inlier_count, const core::Dtype &dtype, const core::Device &device, const registration::RobustKernel &kernel)
 
template<typename scalar_t , typename funct_t >
static void ComputePoseColoredICPKernelCPU (const scalar_t *source_points_ptr, const scalar_t *source_colors_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const scalar_t *target_colors_ptr, const scalar_t *target_color_gradients_ptr, const int64_t *correspondence_indices, const scalar_t &sqrt_lambda_geometric, const scalar_t &sqrt_lambda_photometric, const int n, scalar_t *global_sum, funct_t GetWeightFromRobustKernel)
 
void ComputePoseColoredICPCPU (const core::Tensor &source_points, const core::Tensor &source_colors, const core::Tensor &target_points, const core::Tensor &target_normals, const core::Tensor &target_colors, const core::Tensor &target_color_gradients, const core::Tensor &correspondence_indices, core::Tensor &pose, float &residual, int &inlier_count, const core::Dtype &dtype, const core::Device &device, const registration::RobustKernel &kernel, const double &lambda_geometric)
 
template<typename scalar_t , typename funct1_t , typename funct2_t >
static void ComputePoseDopplerICPKernelCPU (const scalar_t *source_points_ptr, const scalar_t *source_dopplers_ptr, const scalar_t *source_directions_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const int64_t *correspondence_indices, const scalar_t *R_S_to_V, const scalar_t *r_v_to_s_in_V, const scalar_t *v_s_in_S, const bool reject_dynamic_outliers, const scalar_t doppler_outlier_threshold, const scalar_t sqrt_lambda_geometric, const scalar_t sqrt_lambda_doppler, const scalar_t sqrt_lambda_doppler_by_dt, const int n, scalar_t *global_sum, funct1_t GetWeightFromRobustKernelFirst, funct2_t GetWeightFromRobustKernelSecond)
 
template<typename scalar_t >
void PreComputeForDopplerICPKernelCPU (const scalar_t *R_S_to_V, const scalar_t *r_v_to_s_in_V, const scalar_t *w_v_in_V, const scalar_t *v_v_in_V, scalar_t *v_s_in_S)
 
void ComputePoseDopplerICPCPU (const core::Tensor &source_points, const core::Tensor &source_dopplers, const core::Tensor &source_directions, const core::Tensor &target_points, const core::Tensor &target_normals, const core::Tensor &correspondence_indices, core::Tensor &output_pose, float &residual, int &inlier_count, const core::Dtype &dtype, const core::Device &device, const core::Tensor &R_S_to_V, const core::Tensor &r_v_to_s_in_V, const core::Tensor &w_v_in_V, const core::Tensor &v_v_in_V, const double period, const bool reject_dynamic_outliers, const double doppler_outlier_threshold, const registration::RobustKernel &kernel_geometric, const registration::RobustKernel &kernel_doppler, const double lambda_doppler)
 
template<typename scalar_t >
static void Get3x3SxyLinearSystem (const scalar_t *source_points_ptr, const scalar_t *target_points_ptr, const int64_t *correspondence_indices, const int &n, const core::Dtype &dtype, const core::Device &device, core::Tensor &Sxy, core::Tensor &target_mean, core::Tensor &source_mean, int &inlier_count)
 
void ComputeRtPointToPointCPU (const core::Tensor &source_points, const core::Tensor &target_points, const core::Tensor &corres, core::Tensor &R, core::Tensor &t, int &inlier_count, const core::Dtype &dtype, const core::Device &device)
 
template<typename scalar_t >
void ComputeInformationMatrixKernelCPU (const scalar_t *target_points_ptr, const int64_t *correspondence_indices, const int n, scalar_t *global_sum)
 
void ComputeInformationMatrixCPU (const core::Tensor &target_points, const core::Tensor &correspondence_indices, core::Tensor &information_matrix, const core::Dtype &dtype, const core::Device &device)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool GetJacobianPointToPlane (int64_t workload_idx, const scalar_t *source_points_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const int64_t *correspondence_indices, scalar_t *J_ij, scalar_t &r)
 
template bool GetJacobianPointToPlane (int64_t workload_idx, const float *source_points_ptr, const float *target_points_ptr, const float *target_normals_ptr, const int64_t *correspondence_indices, float *J_ij, float &r)
 
template bool GetJacobianPointToPlane (int64_t workload_idx, const double *source_points_ptr, const double *target_points_ptr, const double *target_normals_ptr, const int64_t *correspondence_indices, double *J_ij, double &r)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool GetJacobianColoredICP (const int64_t workload_idx, const scalar_t *source_points_ptr, const scalar_t *source_colors_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const scalar_t *target_colors_ptr, const scalar_t *target_color_gradients_ptr, const int64_t *correspondence_indices, const scalar_t &sqrt_lambda_geometric, const scalar_t &sqrt_lambda_photometric, scalar_t *J_G, scalar_t *J_I, scalar_t &r_G, scalar_t &r_I)
 
template bool GetJacobianColoredICP (const int64_t workload_idx, const float *source_points_ptr, const float *source_colors_ptr, const float *target_points_ptr, const float *target_normals_ptr, const float *target_colors_ptr, const float *target_color_gradients_ptr, const int64_t *correspondence_indices, const float &sqrt_lambda_geometric, const float &sqrt_lambda_photometric, float *J_G, float *J_I, float &r_G, float &r_I)
 
template bool GetJacobianColoredICP (const int64_t workload_idx, const double *source_points_ptr, const double *source_colors_ptr, const double *target_points_ptr, const double *target_normals_ptr, const double *target_colors_ptr, const double *target_color_gradients_ptr, const int64_t *correspondence_indices, const double &sqrt_lambda_geometric, const double &sqrt_lambda_photometric, double *J_G, double *J_I, double &r_G, double &r_I)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void PreComputeForDopplerICP (const scalar_t *R_S_to_V, const scalar_t *r_v_to_s_in_V, const scalar_t *w_v_in_V, const scalar_t *v_v_in_V, scalar_t *v_s_in_S)
 
template void PreComputeForDopplerICP (const float *R_S_to_V, const float *r_v_to_s_in_V, const float *w_v_in_V, const float *v_v_in_V, float *v_s_in_S)
 
template void PreComputeForDopplerICP (const double *R_S_to_V, const double *r_v_to_s_in_V, const double *w_v_in_V, const double *v_v_in_V, double *v_s_in_S)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool GetJacobianDopplerICP (const int64_t workload_idx, const scalar_t *source_points_ptr, const scalar_t *source_dopplers_ptr, const scalar_t *source_directions_ptr, const scalar_t *target_points_ptr, const scalar_t *target_normals_ptr, const int64_t *correspondence_indices, const scalar_t *R_S_to_V, const scalar_t *r_v_to_s_in_V, const scalar_t *v_s_in_S, const bool reject_dynamic_outliers, const scalar_t doppler_outlier_threshold, const scalar_t &sqrt_lambda_geometric, const scalar_t &sqrt_lambda_doppler, const scalar_t &sqrt_lambda_doppler_by_dt, scalar_t *J_G, scalar_t *J_D, scalar_t &r_G, scalar_t &r_D)
 
template bool GetJacobianDopplerICP (const int64_t workload_idx, const float *source_points_ptr, const float *source_dopplers_ptr, const float *source_directions_ptr, const float *target_points_ptr, const float *target_normals_ptr, const int64_t *correspondence_indices, const float *R_S_to_V, const float *r_v_to_s_in_V, const float *v_s_in_S, const bool reject_dynamic_outliers, const float doppler_outlier_threshold, const float &sqrt_lambda_geometric, const float &sqrt_lambda_doppler, const float &sqrt_lambda_doppler_by_dt, float *J_G, float *J_D, float &r_G, float &r_D)
 
template bool GetJacobianDopplerICP (const int64_t workload_idx, const double *source_points_ptr, const double *source_dopplers_ptr, const double *source_directions_ptr, const double *target_points_ptr, const double *target_normals_ptr, const int64_t *correspondence_indices, const double *R_S_to_V, const double *r_v_to_s_in_V, const double *v_s_in_S, const bool reject_dynamic_outliers, const double doppler_outlier_threshold, const double &sqrt_lambda_geometric, const double &sqrt_lambda_doppler, const double &sqrt_lambda_doppler_by_dt, double *J_G, double *J_D, double &r_G, double &r_D)
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool GetInformationJacobians (int64_t workload_idx, const scalar_t *target_points_ptr, const int64_t *correspondence_indices, scalar_t *jacobian_x, scalar_t *jacobian_y, scalar_t *jacobian_z)
 
template bool GetInformationJacobians (int64_t workload_idx, const float *target_points_ptr, const int64_t *correspondence_indices, float *jacobian_x, float *jacobian_y, float *jacobian_z)
 
template bool GetInformationJacobians (int64_t workload_idx, const double *target_points_ptr, const int64_t *correspondence_indices, double *jacobian_x, double *jacobian_y, double *jacobian_z)
 
core::Tensor RtToTransformation (const core::Tensor &R, const core::Tensor &t)
 Convert rotation and translation to the transformation matrix. More...
 
template<typename scalar_t >
static void PoseToTransformationDevice (core::Tensor &transformation, const core::Tensor &pose, const core::Device::DeviceType &device_type)
 
core::Tensor PoseToTransformation (const core::Tensor &pose)
 Convert pose to the transformation matrix. More...
 
template<typename scalar_t >
static void TransformationToPoseDevice (core::Tensor &pose, const core::Tensor &transformation, const core::Device::DeviceType &device_type)
 
core::Tensor TransformationToPose (const core::Tensor &transformation)
 Convert transformation matrix to pose. More...
 
void DecodeAndSolve6x6 (const core::Tensor &A_reduction, core::Tensor &delta, float &inlier_residual, int &inlier_count)
 Decodes a 6x6 linear system from a compressed 29x1 tensor. More...
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void PoseToTransformationImpl (scalar_t *transformation_ptr, const scalar_t *pose_ptr)
 Shared implementation for PoseToTransformation function. More...
 
template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void TransformationToPoseImpl (scalar_t *pose_ptr, const scalar_t *transformation_ptr)
 

Function Documentation

◆ ComputeFPFHFeature()

◆ ComputeFPFHFeatureCPU()

◆ ComputeInformationMatrix()

core::Tensor cloudViewer::t::pipelines::kernel::ComputeInformationMatrix ( const core::Tensor target_positions,
const core::Tensor correspondence_indices 
)

Computes Information Matrix of shape {6, 6}, of dtype Float64 on device CPU:0, from the target point cloud and correspondence indices w.r.t. target point cloud. Only target positions and correspondence indices are required.

Parameters
target_positionsThe target point positions.
correspondence_indicesTensor of type Int64 containing indices of corresponding target positions, where the value is the target index and the index of the value itself is the source index. It contains -1 as value at index with no correspondence.

Definition at line 280 of file Registration.cpp.

References ComputeInformationMatrixCPU(), cloudViewer::core::Tensor::Contiguous(), CUDA_CALL, cloudViewer::core::Tensor::Empty(), cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::IsDevice::IsCPU(), cloudViewer::core::IsDevice::IsCUDA(), and LogError.

Referenced by cloudViewer::t::pipelines::registration::GetInformationMatrix().

◆ ComputeInformationMatrixCPU()

void cloudViewer::t::pipelines::kernel::ComputeInformationMatrixCPU ( const core::Tensor target_points,
const core::Tensor correspondence_indices,
core::Tensor information_matrix,
const core::Dtype dtype,
const core::Device device 
)

◆ ComputeInformationMatrixKernelCPU()

template<typename scalar_t >
void cloudViewer::t::pipelines::kernel::ComputeInformationMatrixKernelCPU ( const scalar_t *  target_points_ptr,
const int64_t *  correspondence_indices,
const int  n,
scalar_t *  global_sum 
)

Definition at line 584 of file RegistrationCPU.cpp.

References result.

Referenced by ComputeInformationMatrixCPU().

◆ ComputePairFeature()

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void cloudViewer::t::pipelines::kernel::ComputePairFeature ( const scalar_t *  p1,
const scalar_t *  n1,
const scalar_t *  p2,
const scalar_t *  n2,
scalar_t *  feature 
)

◆ ComputePoseColoredICP()

core::Tensor cloudViewer::t::pipelines::kernel::ComputePoseColoredICP ( const core::Tensor source_positions,
const core::Tensor source_colors,
const core::Tensor target_positions,
const core::Tensor target_normals,
const core::Tensor target_colors,
const core::Tensor target_color_gradients,
const core::Tensor correspondence_indices,
const registration::RobustKernel kernel,
const double &  lambda_geometric 
)

Computes pose for colored-icp registration method.

Parameters
source_positionssource point positions of Float32 or Float64 dtype.
source_colorssource point colors of same dtype as source point positions.
target_positionstarget point positions of same dtype as source point positions.
target_normalstarget point normals of same dtype as source point positions.
target_colorstarget point colors of same dtype as source point positions.
target_color_gradientstargets point color gradients of same dtype as source point positions.
correspondence_indicesTensor of type Int64 containing indices of corresponding target positions, where the value is the target index and the index of the value itself is the source index. It contains -1 as value at index with no correspondence.
kernelstatistical robust kernel for outlier rejection.
lambda_geometricλ ∈ [0,1] in the overall energy λEG + (1−λ)EC. Refer the documentation of Colored-ICP for more information.
Returns
Pose [alpha beta gamma, tx, ty, tz], a shape {6} tensor of dtype Float64, where alpha, beta, gamma are the Euler angles in the ZYX order.

Definition at line 54 of file Registration.cpp.

References ComputePoseColoredICPCPU(), cloudViewer::core::Tensor::Contiguous(), CUDA_CALL, cloudViewer::core::Tensor::Empty(), cloudViewer::core::Dtype::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::IsDevice::IsCPU(), cloudViewer::core::IsDevice::IsCUDA(), LogDebug, and LogError.

Referenced by cloudViewer::t::pipelines::registration::TransformationEstimationForColoredICP::ComputeTransformation().

◆ ComputePoseColoredICPCPU()

void cloudViewer::t::pipelines::kernel::ComputePoseColoredICPCPU ( const core::Tensor source_points,
const core::Tensor source_colors,
const core::Tensor target_points,
const core::Tensor target_normals,
const core::Tensor target_colors,
const core::Tensor target_color_gradients,
const core::Tensor correspondence_indices,
core::Tensor pose,
float &  residual,
int &  inlier_count,
const core::Dtype dtype,
const core::Device device,
const registration::RobustKernel kernel,
const double &  lambda_geometric 
)

◆ ComputePoseColoredICPKernelCPU()

template<typename scalar_t , typename funct_t >
static void cloudViewer::t::pipelines::kernel::ComputePoseColoredICPKernelCPU ( const scalar_t *  source_points_ptr,
const scalar_t *  source_colors_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const scalar_t *  target_colors_ptr,
const scalar_t *  target_color_gradients_ptr,
const int64_t *  correspondence_indices,
const scalar_t &  sqrt_lambda_geometric,
const scalar_t &  sqrt_lambda_photometric,
const int  n,
scalar_t *  global_sum,
funct_t  GetWeightFromRobustKernel 
)
static

Definition at line 132 of file RegistrationCPU.cpp.

References result.

◆ ComputePoseDopplerICP()

core::Tensor cloudViewer::t::pipelines::kernel::ComputePoseDopplerICP ( const core::Tensor source_points,
const core::Tensor source_dopplers,
const core::Tensor source_directions,
const core::Tensor target_points,
const core::Tensor target_normals,
const core::Tensor correspondence_indices,
const core::Tensor current_transform,
const core::Tensor transform_vehicle_to_sensor,
const std::size_t  iteration,
const double  period,
const double  lambda_doppler,
const bool  reject_dynamic_outliers,
const double  doppler_outlier_threshold,
const std::size_t  outlier_rejection_min_iteration,
const std::size_t  geometric_robust_loss_min_iteration,
const std::size_t  doppler_robust_loss_min_iteration,
const registration::RobustKernel geometric_kernel,
const registration::RobustKernel doppler_kernel 
)

Computes pose for DopplerICP registration method.

Parameters
source_pointssource point positions of Float32 or Float64 dtype.
source_dopplerssource point Dopplers of same dtype as source point positions.
source_directionssource point direction of same dtype as source point positions.
target_pointstarget point positions of same dtype as source point positions.
target_normalstarget point normals of same dtype as source point positions.
correspondence_indicesTensor of type Int64 containing indices of corresponding target positions, where the value is the target index and the index of the value itself is the source index. It contains -1 as value at index with no correspondence.
current_transformThe current pose estimate of ICP.
transform_vehicle_to_sensorThe 4x4 extrinsic transformation matrix between the vehicle and the sensor frames.
iterationcurrent iteration number of the ICP algorithm.
periodTime period (in seconds) between the source and the target point clouds.
lambda_dopplerweight for the Doppler objective.
reject_dynamic_outliersWhether or not to prune dynamic point outlier correspondences.
doppler_outlier_thresholdCorrespondences with Doppler error greater than this threshold are rejected from optimization.
outlier_rejection_min_iterationNumber of iterations of ICP after which outlier rejection is enabled.
geometric_robust_loss_min_iterationNumber of iterations of ICP after which robust loss for geometric term kicks in.
doppler_robust_loss_min_iterationNumber of iterations of ICP after which robust loss for Doppler term kicks in.
geometric_kernelstatistical robust kernel for outlier rejection.
doppler_kernelstatistical robust kernel for outlier rejection.
Returns
Pose [alpha beta gamma, tx, ty, tz], a shape {6} tensor of dtype Float64, where alpha, beta, gamma are the Euler angles in the ZYX order.

Definition at line 98 of file Registration.cpp.

References ComputePoseDopplerICPCPU(), cloudViewer::core::Tensor::Contiguous(), cloudViewer::core::Device::CPU, cloudViewer::core::Device::CUDA, CUDA_CALL, cloudViewer::core::Tensor::Empty(), cloudViewer::core::Dtype::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::GetItem(), cloudViewer::core::Device::GetType(), cloudViewer::core::Inverse(), cloudViewer::t::pipelines::registration::L2Loss, LogDebug, LogError, cloudViewer::core::Tensor::Neg(), cloudViewer::core::TensorKey::Slice(), cloudViewer::t::geometry::kernel::image::To(), cloudViewer::core::Tensor::To(), and TransformationToPose().

Referenced by cloudViewer::t::pipelines::registration::TransformationEstimationForDopplerICP::ComputeTransformation().

◆ ComputePoseDopplerICPCPU()

void cloudViewer::t::pipelines::kernel::ComputePoseDopplerICPCPU ( const core::Tensor source_points,
const core::Tensor source_dopplers,
const core::Tensor source_directions,
const core::Tensor target_points,
const core::Tensor target_normals,
const core::Tensor correspondence_indices,
core::Tensor output_pose,
float &  residual,
int &  inlier_count,
const core::Dtype dtype,
const core::Device device,
const core::Tensor R_S_to_V,
const core::Tensor r_v_to_s_in_V,
const core::Tensor w_v_in_V,
const core::Tensor v_v_in_V,
const double  period,
const bool  reject_dynamic_outliers,
const double  doppler_outlier_threshold,
const registration::RobustKernel kernel_geometric,
const registration::RobustKernel kernel_doppler,
const double  lambda_doppler 
)

◆ ComputePoseDopplerICPKernelCPU()

template<typename scalar_t , typename funct1_t , typename funct2_t >
static void cloudViewer::t::pipelines::kernel::ComputePoseDopplerICPKernelCPU ( const scalar_t *  source_points_ptr,
const scalar_t *  source_dopplers_ptr,
const scalar_t *  source_directions_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const int64_t *  correspondence_indices,
const scalar_t *  R_S_to_V,
const scalar_t *  r_v_to_s_in_V,
const scalar_t *  v_s_in_S,
const bool  reject_dynamic_outliers,
const scalar_t  doppler_outlier_threshold,
const scalar_t  sqrt_lambda_geometric,
const scalar_t  sqrt_lambda_doppler,
const scalar_t  sqrt_lambda_doppler_by_dt,
const int  n,
scalar_t *  global_sum,
funct1_t  GetWeightFromRobustKernelFirst,
funct2_t  GetWeightFromRobustKernelSecond 
)
static

Definition at line 255 of file RegistrationCPU.cpp.

References result.

◆ ComputePosePointToPlane()

core::Tensor cloudViewer::t::pipelines::kernel::ComputePosePointToPlane ( const core::Tensor source_positions,
const core::Tensor target_positions,
const core::Tensor target_normals,
const core::Tensor correspondence_indices,
const registration::RobustKernel kernel 
)

Computes pose for point to plane registration method.

Parameters
source_positionssource point positions of Float32 or Float64 dtype.
target_positionstarget point positions of same dtype as source point positions.
target_normalstarget point normals of same dtype as source point positions.
correspondence_indicesTensor of type Int64 containing indices of corresponding target positions, where the value is the target index and the index of the value itself is the source index. It contains -1 as value at index with no correspondence.
kernelstatistical robust kernel for outlier rejection.
Returns
Pose [alpha beta gamma, tx, ty, tz], a shape {6} tensor of dtype Float64, where alpha, beta, gamma are the Euler angles in the ZYX order.

Definition at line 19 of file Registration.cpp.

References ComputePosePointToPlaneCPU(), cloudViewer::core::Tensor::Contiguous(), CUDA_CALL, cloudViewer::core::Tensor::Empty(), cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::IsDevice::IsCPU(), cloudViewer::core::IsDevice::IsCUDA(), LogDebug, and LogError.

Referenced by cloudViewer::t::pipelines::registration::TransformationEstimationPointToPlane::ComputeTransformation().

◆ ComputePosePointToPlaneCPU()

void cloudViewer::t::pipelines::kernel::ComputePosePointToPlaneCPU ( const core::Tensor source_points,
const core::Tensor target_points,
const core::Tensor target_normals,
const core::Tensor correspondence_indices,
core::Tensor pose,
float &  residual,
int &  inlier_count,
const core::Dtype dtype,
const core::Device device,
const registration::RobustKernel kernel 
)

◆ ComputePosePointToPlaneKernelCPU()

template<typename scalar_t , typename func_t >
static void cloudViewer::t::pipelines::kernel::ComputePosePointToPlaneKernelCPU ( const scalar_t *  source_points_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const int64_t *  correspondence_indices,
const int  n,
scalar_t *  global_sum,
func_t  GetWeightFromRobustKernel 
)
static

Definition at line 30 of file RegistrationCPU.cpp.

References result.

◆ ComputeRtPointToPoint()

std::tuple< core::Tensor, core::Tensor > cloudViewer::t::pipelines::kernel::ComputeRtPointToPoint ( const core::Tensor source_positions,
const core::Tensor target_positions,
const core::Tensor correspondence_indices 
)

Computes (R) Rotation {3,3} and (t) translation {3,} for point to point registration method.

Parameters
source_positionssource point positions of Float32 or Float64 dtype.
target_positionstarget point positions of same dtype as source point positions.
correspondence_indicesTensor of type Int64 containing indices of corresponding target positions, where the value is the target index and the index of the value itself is the source index. It contains -1 as value at index with no correspondence.
Returns
tuple of (R, t). [Dtype: Float64].

Definition at line 205 of file Registration.cpp.

References cloudViewer::core::Tensor::Arange(), ComputeRtPointToPointCPU(), cloudViewer::core::Tensor::Contiguous(), cloudViewer::core::Tensor::Det(), cloudViewer::core::Tensor::Div_(), cloudViewer::core::Tensor::Eye(), cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::GetLength(), cloudViewer::core::Tensor::GetShape(), cloudViewer::core::Tensor::IndexGet(), cloudViewer::core::Int64, cloudViewer::core::IsDevice::IsCPU(), cloudViewer::core::IsDevice::IsCUDA(), LogError, cloudViewer::core::Tensor::Matmul(), cloudViewer::core::Tensor::Mean(), cloudViewer::core::Tensor::Ne(), cloudViewer::core::Tensor::Reshape(), cloudViewer::core::Tensor::SVD(), cloudViewer::core::Tensor::T(), cloudViewer::t::geometry::kernel::image::To(), and cloudViewer::core::Tensor::To().

Referenced by cloudViewer::t::pipelines::registration::TransformationEstimationPointToPoint::ComputeTransformation().

◆ ComputeRtPointToPointCPU()

◆ DecodeAndSolve6x6()

void cloudViewer::t::pipelines::kernel::DecodeAndSolve6x6 ( const core::Tensor A_reduction,
core::Tensor delta,
float &  inlier_residual,
int &  inlier_count 
)

Decodes a 6x6 linear system from a compressed 29x1 tensor.

Parameters
A_reduction1x29 tensor storing a linear system, (21 for $J^T J$ matrix, 6 for $J^T r$, 1 for residual, 1 for inlier count).
delta6d tensor for a se3 tangent vector.
inlier_residualFloat residual for the inliers.
inlier_countInt number of inliers.

Definition at line 145 of file TransformationConverter.cpp.

References AssertTensorShape, cloudViewer::core::Tensor::Empty(), cloudViewer::core::Tensor::Fill(), cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDataPtr(), LogError, cloudViewer::core::Tensor::Solve(), and cloudViewer::core::Tensor::To().

Referenced by cloudViewer::t::pipelines::kernel::odometry::ComputeOdometryResultHybridCPU(), cloudViewer::t::pipelines::kernel::odometry::ComputeOdometryResultIntensityCPU(), cloudViewer::t::pipelines::kernel::odometry::ComputeOdometryResultPointToPlaneCPU(), ComputePoseColoredICPCPU(), ComputePoseDopplerICPCPU(), and ComputePosePointToPlaneCPU().

◆ FillInRigidAlignmentTerm()

void cloudViewer::t::pipelines::kernel::FillInRigidAlignmentTerm ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor Ti_ps,
const core::Tensor Tj_qs,
const core::Tensor Ri_normal_ps,
int  i,
int  j,
float  threshold 
)

◆ FillInRigidAlignmentTermCPU()

void cloudViewer::t::pipelines::kernel::FillInRigidAlignmentTermCPU ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor Ti_qs,
const core::Tensor Tj_qs,
const core::Tensor Ri_normal_ps,
int  i,
int  j,
float  threshold 
)

◆ FillInSLACAlignmentTerm()

void cloudViewer::t::pipelines::kernel::FillInSLACAlignmentTerm ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor Ti_ps,
const core::Tensor Tj_qs,
const core::Tensor normal_ps,
const core::Tensor Ri_normal_ps,
const core::Tensor RjT_Ri_normal_ps,
const core::Tensor cgrid_idx_ps,
const core::Tensor cgrid_idx_qs,
const core::Tensor cgrid_ratio_qs,
const core::Tensor cgrid_ratio_ps,
int  i,
int  j,
int  n,
float  threshold 
)

◆ FillInSLACAlignmentTermCPU()

void cloudViewer::t::pipelines::kernel::FillInSLACAlignmentTermCPU ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor Ti_qs,
const core::Tensor Tj_qs,
const core::Tensor normal_ps,
const core::Tensor Ri_normal_ps,
const core::Tensor RjT_Ri_normal_ps,
const core::Tensor cgrid_idx_ps,
const core::Tensor cgrid_idx_qs,
const core::Tensor cgrid_ratio_qs,
const core::Tensor cgrid_ratio_ps,
int  i,
int  j,
int  n,
float  threshold 
)

◆ FillInSLACRegularizerTerm()

void cloudViewer::t::pipelines::kernel::FillInSLACRegularizerTerm ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor grid_idx,
const core::Tensor grid_nbs_idx,
const core::Tensor grid_nbs_mask,
const core::Tensor positions_init,
const core::Tensor positions_curr,
float  weight,
int  n,
int  anchor_idx 
)

◆ FillInSLACRegularizerTermCPU()

void cloudViewer::t::pipelines::kernel::FillInSLACRegularizerTermCPU ( core::Tensor AtA,
core::Tensor Atb,
core::Tensor residual,
const core::Tensor grid_idx,
const core::Tensor grid_nbs_idx,
const core::Tensor grid_nbs_mask,
const core::Tensor positions_init,
const core::Tensor positions_curr,
float  weight,
int  n,
int  anchor_idx 
)

◆ Get3x3SxyLinearSystem()

template<typename scalar_t >
static void cloudViewer::t::pipelines::kernel::Get3x3SxyLinearSystem ( const scalar_t *  source_points_ptr,
const scalar_t *  target_points_ptr,
const int64_t *  correspondence_indices,
const int &  n,
const core::Dtype dtype,
const core::Device device,
core::Tensor Sxy,
core::Tensor target_mean,
core::Tensor source_mean,
int &  inlier_count 
)
static

Definition at line 424 of file RegistrationCPU.cpp.

Referenced by ComputeRtPointToPointCPU().

◆ GetInformationJacobians() [1/3]

template bool cloudViewer::t::pipelines::kernel::GetInformationJacobians ( int64_t  workload_idx,
const double *  target_points_ptr,
const int64_t *  correspondence_indices,
double *  jacobian_x,
double *  jacobian_y,
double *  jacobian_z 
)

◆ GetInformationJacobians() [2/3]

template bool cloudViewer::t::pipelines::kernel::GetInformationJacobians ( int64_t  workload_idx,
const float *  target_points_ptr,
const int64_t *  correspondence_indices,
float *  jacobian_x,
float *  jacobian_y,
float *  jacobian_z 
)

◆ GetInformationJacobians() [3/3]

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool cloudViewer::t::pipelines::kernel::GetInformationJacobians ( int64_t  workload_idx,
const scalar_t *  target_points_ptr,
const int64_t *  correspondence_indices,
scalar_t *  jacobian_x,
scalar_t *  jacobian_y,
scalar_t *  jacobian_z 
)
inline

Definition at line 479 of file RegistrationImpl.h.

◆ GetJacobianColoredICP() [1/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianColoredICP ( const int64_t  workload_idx,
const double *  source_points_ptr,
const double *  source_colors_ptr,
const double *  target_points_ptr,
const double *  target_normals_ptr,
const double *  target_colors_ptr,
const double *  target_color_gradients_ptr,
const int64_t *  correspondence_indices,
const double &  sqrt_lambda_geometric,
const double &  sqrt_lambda_photometric,
double *  J_G,
double *  J_I,
double &  r_G,
double &  r_I 
)

◆ GetJacobianColoredICP() [2/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianColoredICP ( const int64_t  workload_idx,
const float *  source_points_ptr,
const float *  source_colors_ptr,
const float *  target_points_ptr,
const float *  target_normals_ptr,
const float *  target_colors_ptr,
const float *  target_color_gradients_ptr,
const int64_t *  correspondence_indices,
const float &  sqrt_lambda_geometric,
const float &  sqrt_lambda_photometric,
float *  J_G,
float *  J_I,
float &  r_G,
float &  r_I 
)

◆ GetJacobianColoredICP() [3/3]

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool cloudViewer::t::pipelines::kernel::GetJacobianColoredICP ( const int64_t  workload_idx,
const scalar_t *  source_points_ptr,
const scalar_t *  source_colors_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const scalar_t *  target_colors_ptr,
const scalar_t *  target_color_gradients_ptr,
const int64_t *  correspondence_indices,
const scalar_t &  sqrt_lambda_geometric,
const scalar_t &  sqrt_lambda_photometric,
scalar_t *  J_G,
scalar_t *  J_I,
scalar_t &  r_G,
scalar_t &  r_I 
)
inline

Definition at line 207 of file RegistrationImpl.h.

◆ GetJacobianDopplerICP() [1/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianDopplerICP ( const int64_t  workload_idx,
const double *  source_points_ptr,
const double *  source_dopplers_ptr,
const double *  source_directions_ptr,
const double *  target_points_ptr,
const double *  target_normals_ptr,
const int64_t *  correspondence_indices,
const double *  R_S_to_V,
const double *  r_v_to_s_in_V,
const double *  v_s_in_S,
const bool  reject_dynamic_outliers,
const double  doppler_outlier_threshold,
const double &  sqrt_lambda_geometric,
const double &  sqrt_lambda_doppler,
const double &  sqrt_lambda_doppler_by_dt,
double *  J_G,
double *  J_D,
double &  r_G,
double &  r_D 
)

◆ GetJacobianDopplerICP() [2/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianDopplerICP ( const int64_t  workload_idx,
const float *  source_points_ptr,
const float *  source_dopplers_ptr,
const float *  source_directions_ptr,
const float *  target_points_ptr,
const float *  target_normals_ptr,
const int64_t *  correspondence_indices,
const float *  R_S_to_V,
const float *  r_v_to_s_in_V,
const float *  v_s_in_S,
const bool  reject_dynamic_outliers,
const float  doppler_outlier_threshold,
const float &  sqrt_lambda_geometric,
const float &  sqrt_lambda_doppler,
const float &  sqrt_lambda_doppler_by_dt,
float *  J_G,
float *  J_D,
float &  r_G,
float &  r_D 
)

◆ GetJacobianDopplerICP() [3/3]

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool cloudViewer::t::pipelines::kernel::GetJacobianDopplerICP ( const int64_t  workload_idx,
const scalar_t *  source_points_ptr,
const scalar_t *  source_dopplers_ptr,
const scalar_t *  source_directions_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const int64_t *  correspondence_indices,
const scalar_t *  R_S_to_V,
const scalar_t *  r_v_to_s_in_V,
const scalar_t *  v_s_in_S,
const bool  reject_dynamic_outliers,
const scalar_t  doppler_outlier_threshold,
const scalar_t &  sqrt_lambda_geometric,
const scalar_t &  sqrt_lambda_doppler,
const scalar_t &  sqrt_lambda_doppler_by_dt,
scalar_t *  J_G,
scalar_t *  J_D,
scalar_t &  r_G,
scalar_t &  r_D 
)
inline

◆ GetJacobianPointToPlane() [1/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianPointToPlane ( int64_t  workload_idx,
const double *  source_points_ptr,
const double *  target_points_ptr,
const double *  target_normals_ptr,
const int64_t *  correspondence_indices,
double *  J_ij,
double &  r 
)

◆ GetJacobianPointToPlane() [2/3]

template bool cloudViewer::t::pipelines::kernel::GetJacobianPointToPlane ( int64_t  workload_idx,
const float *  source_points_ptr,
const float *  target_points_ptr,
const float *  target_normals_ptr,
const int64_t *  correspondence_indices,
float *  J_ij,
float &  r 
)

◆ GetJacobianPointToPlane() [3/3]

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE bool cloudViewer::t::pipelines::kernel::GetJacobianPointToPlane ( int64_t  workload_idx,
const scalar_t *  source_points_ptr,
const scalar_t *  target_points_ptr,
const scalar_t *  target_normals_ptr,
const int64_t *  correspondence_indices,
scalar_t *  J_ij,
scalar_t &  r 
)
inline

Definition at line 153 of file RegistrationImpl.h.

◆ PoseToTransformation()

◆ PoseToTransformationDevice()

template<typename scalar_t >
static void cloudViewer::t::pipelines::kernel::PoseToTransformationDevice ( core::Tensor transformation,
const core::Tensor pose,
const core::Device::DeviceType device_type 
)
static

◆ PoseToTransformationImpl()

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void cloudViewer::t::pipelines::kernel::PoseToTransformationImpl ( scalar_t *  transformation_ptr,
const scalar_t *  pose_ptr 
)
inline

Shared implementation for PoseToTransformation function.

Definition at line 23 of file TransformationConverterImpl.h.

◆ PreComputeForDopplerICP() [1/3]

template void cloudViewer::t::pipelines::kernel::PreComputeForDopplerICP ( const double *  R_S_to_V,
const double *  r_v_to_s_in_V,
const double *  w_v_in_V,
const double *  v_v_in_V,
double *  v_s_in_S 
)

◆ PreComputeForDopplerICP() [2/3]

template void cloudViewer::t::pipelines::kernel::PreComputeForDopplerICP ( const float *  R_S_to_V,
const float *  r_v_to_s_in_V,
const float *  w_v_in_V,
const float *  v_v_in_V,
float *  v_s_in_S 
)

◆ PreComputeForDopplerICP() [3/3]

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void cloudViewer::t::pipelines::kernel::PreComputeForDopplerICP ( const scalar_t *  R_S_to_V,
const scalar_t *  r_v_to_s_in_V,
const scalar_t *  w_v_in_V,
const scalar_t *  v_v_in_V,
scalar_t *  v_s_in_S 
)
inline

◆ PreComputeForDopplerICPKernelCPU()

template<typename scalar_t >
void cloudViewer::t::pipelines::kernel::PreComputeForDopplerICPKernelCPU ( const scalar_t *  R_S_to_V,
const scalar_t *  r_v_to_s_in_V,
const scalar_t *  w_v_in_V,
const scalar_t *  v_v_in_V,
scalar_t *  v_s_in_S 
)

Definition at line 345 of file RegistrationCPU.cpp.

References PreComputeForDopplerICP().

◆ RtToTransformation()

core::Tensor cloudViewer::t::pipelines::kernel::RtToTransformation ( const core::Tensor R,
const core::Tensor t 
)

Convert rotation and translation to the transformation matrix.

Parameters
RRotation, a tensor of shape {3, 3}.
tTranslation, a tensor of shape {3,}.
Returns
Transformation, a tensor of shape {4, 4}, dtype and device same as R and t.

Definition at line 25 of file TransformationConverter.cpp.

References AssertTensorDevice, AssertTensorDtype, AssertTensorDtypes, AssertTensorShape, cloudViewer::core::Float32, cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::Reshape(), cloudViewer::core::Tensor::SetItem(), cloudViewer::core::TensorKey::Slice(), and cloudViewer::core::Tensor::Zeros().

Referenced by cloudViewer::t::pipelines::registration::TransformationEstimationPointToPoint::ComputeTransformation().

◆ TransformationToPose()

core::Tensor cloudViewer::t::pipelines::kernel::TransformationToPose ( const core::Tensor transformation)

Convert transformation matrix to pose.

Parameters
transformation,atensor of shape {4, 4}, of dtype Float32
Returns
pose [alpha beta gamma, tx, ty, tz], a shape {6} tensor of dtype and device same as transformation, where alpha, beta, gamma are the Euler angles in the ZYX order.

Definition at line 119 of file TransformationConverter.cpp.

References AssertTensorDtypes, AssertTensorShape, cloudViewer::core::Tensor::Contiguous(), DISPATCH_FLOAT_DTYPE_TO_TEMPLATE, cloudViewer::core::Float32, cloudViewer::core::Float64, cloudViewer::core::Tensor::GetDevice(), cloudViewer::core::Tensor::GetDtype(), cloudViewer::core::Tensor::GetItem(), cloudViewer::core::Tensor::SetItem(), cloudViewer::core::TensorKey::Slice(), and cloudViewer::core::Tensor::Zeros().

Referenced by ComputePoseDopplerICP().

◆ TransformationToPoseDevice()

template<typename scalar_t >
static void cloudViewer::t::pipelines::kernel::TransformationToPoseDevice ( core::Tensor pose,
const core::Tensor transformation,
const core::Device::DeviceType device_type 
)
static

◆ TransformationToPoseImpl()

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void cloudViewer::t::pipelines::kernel::TransformationToPoseImpl ( scalar_t *  pose_ptr,
const scalar_t *  transformation_ptr 
)
inline

Shared implementation for TransformationToPose function. Reference method: utility::TransformMatrix4dToVector6d.

Definition at line 47 of file TransformationConverterImpl.h.

◆ UpdateSPFHFeature()

template<typename scalar_t >
CLOUDVIEWER_HOST_DEVICE void cloudViewer::t::pipelines::kernel::UpdateSPFHFeature ( const scalar_t *  feature,
int64_t  idx,
scalar_t  hist_incr,
scalar_t *  spfh 
)

Definition at line 88 of file FeatureImpl.h.

References cloudViewer::utility::floor(), M_PI, and max().