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)

th1, th2, th3

numeric. Threshold values (see details)

k

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.

- shp_plane
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$$

- shp_hplane
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

- shp_line
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