Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question about CS Campus3D #3

Open
mramezani64 opened this issue Jul 30, 2024 · 7 comments
Open

Question about CS Campus3D #3

mramezani64 opened this issue Jul 30, 2024 · 7 comments

Comments

@mramezani64
Copy link

Thank you for providing the dataset. I have a question regarding Campus3D: it appears that ground points are present in the downsampled submaps in both aerial and ground scans. However, the paper mentions that ground points were removed. Can you clarify if the results in the paper are based on submaps without ground points? If so, could you please release the original point clouds so that we can remove the ground points and downsample them to 4096 ourselves?

@rayguan97
Copy link
Owner

There might be some ground points that are not filtered out, but most of the ground surface points should be removed. The released data is what we used for experimentations.

@mramezani64
Copy link
Author

mramezani64 commented Jul 31, 2024

Thank you, @rayguan97, for the reply. I believe, about 50% of points for ground sub-maps are on the ground and about 30% for aerial sub-maps. Can you please let us know how you removed ground points?

Screenshot from 2024-07-31 12-29-41

@rayguan97
Copy link
Owner

For the ground lidar data, we simply set a threshold along Z axis to remove the ground points.
For the aerial points, we used semantic labels provided by the state website (https://imap.maryland.gov/pages/lidar-download). We remove the points that are labeled as "ground", even though it might not be very exhaustive/accurate. We tried many ground point removal methods, or setting a threshold, but most of them would remove too many points or did not remove the ground points well across all aerial patches.

Could you explain what is on the left and on the right side? Are the one on the left the point cloud after your processing?

@Grifent
Copy link

Grifent commented Jul 31, 2024

Hi @rayguan97. In reference to the image posted by @mramezani64 above, we tried using a Cloth Simulation Filter (CSF) for ground point removal on the post-processed submaps that are available from the link provided in the CrossLoc3D repo. The left column shows CS_Campus3D submaps after ground point removal, and the right is before ground point removal.
It seems that there are many ground and aerial submaps that still contain ground points (seems most noticeable on aerial submaps), so we wanted to confirm that this is the same data used for the results in your paper. Below are a few more examples.
ground_aerial_orig_v_filt_1

@rayguan97
Copy link
Owner

I see. The released data is what we used for experimentations. It seems that the ground points are not completely removed for some scans. For fairness, I would still recommend use the original data to compare.

The current issue you have is that after you remove the ground points, the number of points would be less than 4096?

Could you share the code snippet you used for ground removal? Let's see if I can integrate in the processing scripts and update it in the future.

@Grifent
Copy link

Grifent commented Jul 31, 2024

Thanks for the quick response.

Yes, currently this approach means that there are much less than 4096 points after ground point removal.

Below is a snippet of how ground points can be removed with CSF:

import numpy as np
import CSF
CSF_RIGIDNESS = 2
CSF_THRESHOLD = 1.0       # distance from cloth to classify as ground
CSF_RESOLUTION = 1.0      # resolution of cloth simulation
CSF_BSLOOPSMOOTH = True

csf = CSF.CSF()
csf.params.bSloopSmooth = CSF_BSLOOPSMOOTH
csf.params.cloth_resolution = CSF_RESOLUTION
csf.params.rigidness = CSF_RIGIDNESS
csf.params.threshold = CSF_THRESHOLD

pts = np.random.rand(10000, 3)   # replace pts with real submap in (N, 3) ndarray format
csf.setPointCloud(pts)
ground = CSF.VecInt()       # index of ground points
non_ground = CSF.VecInt()   # index of non-ground points
csf.do_filtering(ground, non_ground, exportCloth=False)  # NOTE: ensure exportCloth=False

if len(np.array(non_ground)) > 0:
    filtered_pts = pts[np.array(non_ground)] # extract non-ground points
else:
    filtered_pts = np.array([])  # handle case where all pts are ground

One thing to note with CSF is that it seems to have precision issues if operating on a normalised point cloud in [-1, 1] range, but the above settings will work fine for point clouds pre-normalisation. To make this work on the normalised point clouds in CS_Campus3D I simply rescaled points into [-50, 50] range, then undid the rescaling after filtering.

Thanks again for providing this great dataset and taking note of this issue!

@mramezani64
Copy link
Author

From what I can tell, @rayguan97, you might have only removed points from one type of ground label. That's why there are still many points on the ground for aerial submaps, and because the collected data environment is almost flat, these points are uninformative from the deep learning perspective. It would be great if you updated the dataset by having 4096 points on non-ground areas for both aerial and ground submaps. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants