VoxelBlockGrid GetUniqueBlockCoordinates from point cloud, rather than depth image.
- Dominant language
- C++
- Stars
- 14k
- Forks
- 2.6k
- Avg merge
- 5d 18h
- Merged PRs (30d)
- 6
Description
### Checklist
- [X] I have searched for [similar issues](https://github.com/isl-org/Open3D/issues).
- [X] For Python issues, I have tested with the [latest development wheel](http://www.open3d.org/docs/latest/getting_started.html#development-version-pip).
- [X] I have checked the [release documentation](http://www.open3d.org/docs/release/) and the [latest documentation](http://www.open3d.org/docs/latest/) (for `master` branch).
### My Question
I have been playing around and modified example file OnlineSLAMUtil.h for better tracking and integration results.
I have found that use of the function VoxelBlockGrid::GetUniqueBlockCoordinates(const **PointCloud &pcd**, ...) is giving me better overall integration results, than if I use the example original VoxelBlockGrid::GetUniqueBlockCoordinates(const **Image &depth**, ...)
It looks like the GetUniqueBlockCoordinates function that takes a point cloud as argument, is never used any where in the Open3D source or examples. I like it so please don't delete it!
Integrating point clouds seem just as fast as integrating RGBD-Images when running the OnlineSLAMRGBD example, but the point cloud version( all images converted to point clouds using geometry::CreateFromRGBDImage) seems to give a little better integration result when looking at the extracted scene.ply.
I also tried running a fast no downsampling 2x iterations tICP on each point cloud before integration, where the target cloud is the previous integrated cloud. This clearly improved some RGBD odometry errors, seen by just looking at the final scene.ply.
q1: Should I for some reason not use GetUniqueBlockCoordinates with point cloud as argument?
q2: When calling geometry::CreateFromRGBDImage I need to convert depth image from FLOAT64 to FLOAT32, because the OnlineSLAMRGBD example is using FLOAT64. can below code be optimized/modified to use the same FLOAT64 format?
rgbd_input.depth_.To(core::Dtype::Float32);
pointcloud = t::geometry::PointCloud::CreateFromRGBDImage(
rgbd_input, intrinsic, extrinsic.To(device_).To(core::Float32),
depth_scale, prop_values_.depth_max, 1, true);
Test with device CUDA:
Adjusted params for both tests: voxel_size=4, trunc_multiplier= 5.686
Extracted scene clouds:
RGBD-integration: my labtop, about 40fps

Pointcloud-integration + tICP, my labtop about 20fps

Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.