These functions are made to be used in segment_shapes. They implement algorithms for local neighborhood shape estimation.
shp_plane(th1 = 25, th2 = 6, k = 8)shp_hplane(th1 = 25, th2 = 6, th3 = 0.98, k = 8)
shp_line(th1 = 10, k = 8)
numeric. Threshold values (see details)
integer. Number of neighbours used to estimate the neighborhood.
In the following, \(a1, a2, a3\) denote the eigenvalues of the covariance matrix of the neighbouring
points in ascending order. \(th1, th2, th3\) denote a set of threshold values. Points are labelled
TRUE
if they meet the following criteria. FALSE
otherwise.
Detection of plans based on criteria defined by Limberger & Oliveira (2015) (see references). A point is labelled TRUE if the neighborhood is approximately planar, that is: $$a2 > (th1*a1) and (th2*a2) > a3$$
The same as 'plane' but with an extra test on the orientation of the Z vector of the principal components to test the horizontality of the surface. $$a2 > (th1*a1) and (th2*a2) > a3 and |Z| > th3$$ In theory |Z| should be exactly equal to 1. In practice 0.98 or 0.99 should be fine
Detection of lines inspired by the Limberger & Oliveira (2015) criterion. A point is labelled TRUE if the neighborhood is approximately linear, that is: $$th1*a2 < a3 and th1*a1 < a3$$
Limberger, F. A., & Oliveira, M. M. (2015). Real-time detection of planar regions in unorganized point clouds. Pattern Recognition, 48(6), 2043<U+2013>2053. https://doi.org/10.1016/j.patcog.2014.12.020