tudelft3d / City3D

Large-scale LoD2 Building Reconstruction from Airborne LiDAR Point Clouds
https://github.com/tudelft3d/City3D
GNU General Public License v3.0
223 stars 36 forks source link

Not clear description of available parameters #18

Closed raitisx closed 1 year ago

raitisx commented 1 year ago

Hello,

I have a point cloud of multiple overlapping flightlines, resulting in ~300p/m2, and there are a lot of details, but regardless of how I tune parameters, the result looks almost the same. Attached is one example - one face of the top pyramid always generates either wrong or not at all. Also, perimeter planes are connected to inner ones, although their heights differ. Tried to clean up, or thin points - same result. Could you please confirm or describe more the parameters you have in GUI and write which values worked for you in example below?

Fitting - how well the final model fits the point cloud. Is this a hard limit? (when faces do not fit, they are merged with nearby ones?) Height - minimum height difference between nearby planes? Complexity - noise suppressing, 0 as less detailed, 1 as max detail without filtering? Number - maximum number of faces of building per footprint? Density - average distance between points in meters? Ground - absolute height of model lower plane.

With setup below, it takes very long to generate results - this building takes around 3min, but one block consisting of 10 buildings is around 1h or sometimes just freezes if I select parameters that are a bit more detailed.

Ubuntu, CLion, SCIP, as Gurobi didn't send me license, CGAL v5.4-1, OpenCV v4.5.4 64core Threadripper, 200GB RAM, nvme, 2x3080ti

single_building.zip

yidahuang commented 1 year ago

Hi, thank you for your feedback. Parameter tuning is essential for different datasets. For the data you provided, it's crucial to ensure that the face you want to reconstruct is detected during the plane detection stage. I tuned the parameters of the region-growing algorithm, but the values I used might not be optimal. Point_set_region_growing.cpp line 50-51 , const FT max_distance_to_plane = FT(50) / FT(100); -->const FT max_distance_to_plane = FT(15) / FT(100); const FT max_accepted_angle = FT(30); --> const FT max_accepted_angle = FT(20); More details about the effect of the parameters can be found in the paper. The result I got is like this, I think overall it should be good.

CleanShot 2023-03-21 at 13 37 37@2x

Usually, I just tune the "Number" parameter in the GUI, which is the minimum number of points required for each plane during plane detection. Setting a smaller number can lead to more faces being detected, but as we mentioned in the paper, too many planes can cause the optimization to get stuck. As a result, larger "Number" values may be used for more complex buildings to generate fewer planes. Considering that you are using scip solver, the scale it can handle should be smaller. One potential solution is to cluster building point clouds based on their complexity (or the number of pre-detected planes) and use different parameters for each cluster.

Vlad-Fliahin commented 10 months ago

Hi, but you didn't confirm or correct the description of the available parameters. Could you please describe them in more detail? Because they are misleading in some way.

Vlad-Fliahin commented 10 months ago

@LiangliangNan @yidahuang