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

Issues with dormers #16

Closed Bloemendaal closed 1 year ago

Bloemendaal commented 1 year ago

Hi! 👋

Recently, I've been experimenting with updating our local data (downloaded from 3dbag.nl) to the latest AHN4 data with your tool. However, it seems that most dormers are not recognized with the default settings:

Scherm­afbeelding 2023-01-16 om 14 23 03 Scherm­afbeelding 2023-01-16 om 14 22 13

I'd say this is not the expected behaviour, since another paper stated that the difference between AHN3 and AHN4 is mostly in the details. AHN3 vs AHN4

I generated this object file from our neighbourhood data: 559_472.obj.zip

The original data can be downloaded here, since it's too big to upload to GitHub: https://drive.google.com/drive/folders/1x8TEAS-T6MSPgVDdE3CnpzW5BJ3OhWX6?usp=share_link

Perhaps it's possible to add a little explanation for each weight you can tweak in the program? Maybe the issue is in there? I just don't understand why the results are significantly less detailed than on 3dbag.nl with AHN3, see https://3dbag.nl/en/viewer?rdx=196074.4345800773&rdy=496756.50010483485&ox=-0.00000283297777059488&oy=625.2703415562623&oz=0.006116235588706331

You're looking at this tile: https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_orthoHR/EPSG:28992/10/559/472.jpeg

yidahuang commented 1 year ago

Thanks for your feedback, actually, we follow a different pipeline with 3DBAG. More specifically, we are trying to detect the dormer regions from a 2d generated height map. Currently, we use a canny detector, and it might lose a few small details. A more robust edge detection method can definitely improve the accuracy. But in your case, I think it's mainly due to unreasonable setting parameters. In contrast to #4, maybe you can try using a smaller threshold for edge detection and regularization. for example, like this, it might not be optimal. method/ reconstruction.cpp line559 int low_threshold = (2.0) 255 / (max_height - ht); --> int low_threshold = (1.5) 255 / (max_height - ht); method/otr2_edge_simplify.cpp line195 dbscan.Run(&point_data, 4, 1.2f, 1, dist_fun); -->dbscan.Run(&point_data, 4, 1.0f, 1, dist_fun); also, use a smaller number for plane detection and a smaller density.

Bloemendaal commented 1 year ago

Alright, cool! Thanks for the fast response :) I'll give it a try