Dear Daniel,
I'm classifying a photogrammetric derived point cloud that represents a forested environment with a few buildings. I built the classifier using manually classified ground points and non-ground points from a part of the entire PC. The non-ground sample contained point corresponding to vegetation as well as buildings. I used a range of scales varying from 0.05 (avg resolution of PC) to 15m (maximum dimension of the building). Balanced accuracy and fdr for the built classifier were 97.9% and 9.80, respectively.
qCANUPO did very well in removing vegetation points, but didn't remove the roofs (flat as well as sloping) of the buildings. Please see attached figure in which red points indicate incorrectly classified non-ground points and yellow rectangles enclose building roofs. What could be the possible reason here?
Please note that the sample non-ground PC used for training the classifier had a good amount of building points and the scales used were appropriate to the building size.
Regards,
Asghar.
Building extraction using qCANUPO
Building extraction using qCANUPO
- Attachments
-
- CANUPO error.jpg (163.83 KiB) Viewed 12189 times
Re: Building extraction using qCANUPO
Hi Ashgar,
Dimitri Lague would be the best one to answer these questions ;)
My bet is that the roofs are not that 'flat' compared to the ground? (I mean they have different parts with different slopes, chimneys, etc.).
Have you tried to use the qCSF plugin to remove the ground first by the way? (as it's dedicated for this particular job). Maybe it would be easier then to separate roofs from vegetation?
Dimitri Lague would be the best one to answer these questions ;)
My bet is that the roofs are not that 'flat' compared to the ground? (I mean they have different parts with different slopes, chimneys, etc.).
Have you tried to use the qCSF plugin to remove the ground first by the way? (as it's dedicated for this particular job). Maybe it would be easier then to separate roofs from vegetation?
Daniel, CloudCompare admin
Re: Building extraction using qCANUPO
Hi Ashgar,
Canupo use geometric characteristics that do not consider the orientation with respect to the vertical direction. Hence, with the classifier you used, a roof is very similar to ground: it's flat ! Building walls would be also flat.
To resolve this I see 2 paths:
. do not use Canupo, but use qCSF which is really tailored for what you want to do (and will be WAYYYYYY much faster...using scales up to 15 m must the calculation super long in CANUPO ;-)
. use your Canupo results, but then compute the local slope at a scale of ~ 2-3 m (first compute the normals, then turn then into dip/dip degree), and filter the "non vegetation" data according to the local surface angle (if you don't have steep terrain, it should work). Actually, in the original command line version of Brodu and Lague, 2012, the surface slope at the largest scale was computed in the process and could be used to filter out horizontal and tilted surfaces (maybe we could add this in qCanupo, this would be very simple as it simply uses the ACP results).
In general, CANUPO is nice for complex cases (very steep terrain, specific vegetation etc...) that traditional ground filtering approach (terrasolid, lastools, MCC, CSF) cannot handle efficiently...but we're working on a version that would be more generic, faster and multiclass...just wait another year ;-)
Dimitri
Canupo use geometric characteristics that do not consider the orientation with respect to the vertical direction. Hence, with the classifier you used, a roof is very similar to ground: it's flat ! Building walls would be also flat.
To resolve this I see 2 paths:
. do not use Canupo, but use qCSF which is really tailored for what you want to do (and will be WAYYYYYY much faster...using scales up to 15 m must the calculation super long in CANUPO ;-)
. use your Canupo results, but then compute the local slope at a scale of ~ 2-3 m (first compute the normals, then turn then into dip/dip degree), and filter the "non vegetation" data according to the local surface angle (if you don't have steep terrain, it should work). Actually, in the original command line version of Brodu and Lague, 2012, the surface slope at the largest scale was computed in the process and could be used to filter out horizontal and tilted surfaces (maybe we could add this in qCanupo, this would be very simple as it simply uses the ACP results).
In general, CANUPO is nice for complex cases (very steep terrain, specific vegetation etc...) that traditional ground filtering approach (terrasolid, lastools, MCC, CSF) cannot handle efficiently...but we're working on a version that would be more generic, faster and multiclass...just wait another year ;-)
Dimitri
Re: Building extraction using qCANUPO
Thanks Dimitri and Daniel. The pblm is that this site involves very steep slopes (40 to 60 degrees), so I guess the second option wouldn't work either.
Now I must admit CANUPO has done a tremendous job on slopes in general and specially on steep and rough/eroded surfaces with erosion gullies.
I'm experiencing the same problem with CSF. Because this site involves slopes varying from 5 to 70 degrees, I have to use a higher cloth resolution which can't filter out the roofs. Decreasing the resolution does the job but then it suffers on slopes. Same for MCC, Kraus & Pfier and others.
Regards,
Asghar
Now I must admit CANUPO has done a tremendous job on slopes in general and specially on steep and rough/eroded surfaces with erosion gullies.
I'm experiencing the same problem with CSF. Because this site involves slopes varying from 5 to 70 degrees, I have to use a higher cloth resolution which can't filter out the roofs. Decreasing the resolution does the job but then it suffers on slopes. Same for MCC, Kraus & Pfier and others.
Regards,
Asghar
Re: Building extraction using qCANUPO
have you tried filtering out the ground from the building using the RGB info ?
Otherwise, try again to create a new classifier in CANUPO to separate ground from buildings that encompasses scales larger than your buildings...but it won't be perfect...
Another way that I'm using from time to time :
. create a scalar of the elevation (once you have removed the vegetation)
. compute the gradient of this scalar (edit->scalar->gradient)
. it should highlight the building boundaries (very sharp elevation change)
. filter out these boundaries
. if you have a dense enough photogrammetric cloud of the ground and relatively high building, do a Connected Component segmentation with an octree level that is smaller than the height of your buildings...hopefully this should create 3-4 big chunks of ground (if the cloud is dense enough) that you merge to create your ground point cloud.
Cheers
Dimitri
Otherwise, try again to create a new classifier in CANUPO to separate ground from buildings that encompasses scales larger than your buildings...but it won't be perfect...
Another way that I'm using from time to time :
. create a scalar of the elevation (once you have removed the vegetation)
. compute the gradient of this scalar (edit->scalar->gradient)
. it should highlight the building boundaries (very sharp elevation change)
. filter out these boundaries
. if you have a dense enough photogrammetric cloud of the ground and relatively high building, do a Connected Component segmentation with an octree level that is smaller than the height of your buildings...hopefully this should create 3-4 big chunks of ground (if the cloud is dense enough) that you merge to create your ground point cloud.
Cheers
Dimitri
Re: Building extraction using qCANUPO
Dear Dimitri,
I haven't tried RGB based filtering but the problem is that the color of the roofs (grey) is very similar to other features (e.g. roads) which might cause pblms.
Filtering based on gradient sounds interesting. I'll try it soon and will come back to you. And my point cloud is very dense (or even ultra dense) as its average point spacing in 4cm.
Regards,
Umair.
I haven't tried RGB based filtering but the problem is that the color of the roofs (grey) is very similar to other features (e.g. roads) which might cause pblms.
Filtering based on gradient sounds interesting. I'll try it soon and will come back to you. And my point cloud is very dense (or even ultra dense) as its average point spacing in 4cm.
Regards,
Umair.
Re: Building extraction using qCANUPO
Also, I have built 5 different classifiers based on ground points and non-ground points taken from different parts of the site (non-ground data included 2 to 3 houses), but the pblm persists.
Asghar.
Asghar.