Skip to content

murtiad/M_HERACLES

Repository files navigation

M_HERACLES

HERitAge by point CLoud procESsing for Matlab

(c) by Arnadi Murtiyoso
Photogrammetry and Geomatics Group, ICube UMR 7357 INSA Strasbourg Contact: arnadi.murtiyoso@insa-strasbourg.fr https://github.com/murtiad

A toolbox with functions for processing point cloud data in the context of cultural heritage documentation.

GIS-based segmentation

Architectural element segmentation1

Architectural element segmentation2

Region growing

The code was developped with the Matlab Computer Vision Toolbox installed (2018a), as well as third party dependencies. I have uploaded them in the 02_ThirdParty folder. Before working with M_HERACLES, please dezip all of them and run the 'setup.m' file. List of third party dependencies:

Available functions (16/12/2020):

  • shapeseg.m : function to use (polygonal) ESRI shapefiles (.shp) to delimit ("cookie cutter" style) 3D point cloud area to be then cleaned using the pcsegdist function. This function generates separate segmented point clouds for each object, with their attributes as per the description in the shapefile
  • clustering.m : function to create individual point clouds in Matlab structure from an original point cloud segmented using the pcsegdist function
  • shpload.m : Loads a polygonal ESRI .shp file and convert it into a struct called 'Shape'. 'Shape' will contain as fields the individual objects in the file. Each field will contain a struct with information available in the .dbf file attached to the .shp file, as well as object type and geometry, both in the form of a list of vertex coordinates and in native Matlab polyshape object type
  • wallSeg.m : automatic 3D modelling function to detect walls in a building point cloud, then segment them, fit a 3D plane, and generate the (therefore simplified) 3D surface of the walls. In development
  • slices.m : function to create multiple vertical slices of a given point cloud
  • atticsegment.m : function to separate a building's attic (space under the roof) from its body
  • supportdetect.m : function to detect structural supports (columns or piers) from a building body
  • regiongrowingnormals.m : an implementation of PCL's greedy region growing method, based on normal angles and curvatures. See also theoretical primer as explained in https://pcl.readthedocs.io/projects/tutorials/en/latest/region_growing_segmentation.html
  • regiongrowingnormalsOct.m : region growing based on smoothness constraints (normals and angles) that work much faster by implementing octree sub-divisions
  • dispNormals.m : simple function to display the directional arrows of point cloud normals
  • axedetect.m : detects axes in a (more or less) planar point cloud using (2D) Hough Transform. Useful to determine, for example, if a wooden beam is L-shaped.
  • beamSeg.m : use this for a wooden beam frame structure. The function segments the point cloud automatically into individual beams. Could be useful for HBIM users.
  • detectRoof.m : funtion to detect roof vertices from an aerial point cloud, useful for 3D modeling for mapping stuffs. Output is simplified 3D mesh.
  • meshParallelSimp.m : simplifies the vertices belonging to the same parallel line in a given mesh. I developed this as a support function to detectRoof, to generate lighter 3D models.
  • meshSnap.m: snaps vertices belonging to different meshes when they are located within a set radius.
  • intersectMultPlanes.m : finds the intersection point between multiple 3D planes using least squares.
  • ptCloudCenter.m : translates point clouds to a new coordinate system (no rotation, conformal). Useful when dealing with large projected coordinates.
  • ptCloudRecenter.m : basically the inverse of ptCloudCenter, the function returns the input point cloud to the original coordinate system (usually at the end of operations).