Hello Jake,
The below works, but I have a new tools set, demo data and training material for an improved process. Here's the link to it, it requires ArcGIS Pro 2.0, Spatial Analyst and 3D Anaylst:
http://esriurl.com/3DMappingWithLidar
First question is what is the spacing of your lidar? If it's less than 3ft, you should be able to extract buildings from it. They will not be perfect. If you buildings are classified with a class code of 6 for buildings, I would suggest this process assuming your data is in feet. Some of the below is from Clayton Crawford on the 3D Team.
1. LASPointStatisticsAsRaster (LAS layer filter set to class code 6, building,
points)
2. RasterToPolygon (no simplification)
3. RegularizeBuildingFootprint:
a. Run Regularize Building Footprint as Circle with a tolerance of 8 and minimum
radius of 0.1/max radius 100000 and export those with a status of 0 and area
over 275 sq. meters to Large Circles.
b. Run Regularize Building Footprint as Circle with a tolerance of 3 and minimum
radius of 0.1/max radius 100000 and export those with a status of 0 and area
over 25 sq. meters and under 275 sq meters to Small Circles.
c. Combine those circles and use select by location to remove those polygons from
processing.
d. The rest divide into three groups: Large, Medium and Small buildings.
Large: "Shape_Area" >= 2300 Medium: "Shape_Area" >= 464 AND "Shape_Area" < 2300 Small: "Shape_Area"< 464
Large run Regularize Building Footprint as Right Angles and Diagonals with tolerance 4, densification 4,
Precision 0.25, Diagonal Penalty of 1.5.
Medium run Regularize Building Footprint as Right Angles and Diagonals with tolerance 3, densification 3, Precision 0.25, Diagonal Penalty of 1.5.
Small run Regularize Building Footprint as Right Angles with tolerance 2, densification 2, Precision 0.25
One approach with buildings not classified:
Classify LAS Ground
ClassifyLASBuilding (Pro 1.3) or the 3D Samples tools for Classify Rooftop if you don't have access to 1.3 (might want to wait).
LAS Point Statistics As Raster (LAS layer filter set to class code 6, building, points)
RasterToPolygon (no simplification)
Regularize Building Footprint (see above)
If you have parcels, you can do a union on them with the output polygons and select out those with a -1 for fid for the parcel before running Regularize Building Footprint. This will help with dividing lidar buildings to individual buildings in downtown areas and divide joined buildings (vegetation) between properties where the buildings are close. I have also found doing a negative buffer, mulitpart to singlepart and then a positive buffer to help get rid of trees next to buildings that get captured. Sometime I run a statistics function on the output of the LASPointStatisticsAsRaster and then a eliminate polygon part after the Raster to Polygon to get rid of interior parts that are not desired.
Thanks, hope this helps.
Arthur Crawford - Content Team - Living Atlas