I am capturing the area of roof tops of buildings from a DSM (derived from LiDAR data) which has not been much of a problem. I can then also derive angle, hillshade and aspect but it is only per-pixel.

What I need to do is create the actual roof planes (either as raster or polygons) and I just don't know how to do it.

I've read a lot about cluster analysis, using nearest neighbour etc. I've also read creating a TIN from the raw points, would this work? and if so, would this need to be created instead/before a raster of the DSM?

Creating planar surfaces of roofs, just not sure.


2 Answers 2


I think you can use some segmentation techniques to create objects and than select roofs and non-roofs. You can find a good material about segmentation techniques and some open source softwares here.

PS 1: You have also some packages in R to perform image segmentation: there are EBImage and biOps. The EBImage manual is a good way to start.


id take this approach.

get roof polygons.

extract your lidar points from the polygons.

i would filter the points for one return only

then build the tins (youll need a handful of points per roof minimum).

lastools can do it as a one step process

  • yeah, i can see how that might work but i dont want to use roof polygons in the 1st place. I want to create new surface planes from groups of TINs or pixels that share common properties, ie they have the same aspect and angle so are obviously the same bit of roof. I know it can be done because there are a lot of papers on it but they use very complicated algorithms. Surely it can be done in ArcGIS
    – Sam
    Aug 1, 2013 at 18:14
  • Good idea. Sensors is open to all and this paper mdpi.com/1424-8220/9/7/5241 has a nice flow chart and this one ncbi.nlm.nih.gov/pmc/articles/PMC3355426 has it in Arcgis terminology
    – user17614
    Aug 2, 2013 at 23:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.