Skip to content
This repository has been archived by the owner on Jun 3, 2020. It is now read-only.

Latest commit

 

History

History
241 lines (157 loc) · 8.35 KB

features.md

File metadata and controls

241 lines (157 loc) · 8.35 KB

Geometric features

Raw features

3D data are first characterized with their relative positioning into the global point cloud. This positioning is expressed as three basic coordinates into the Cartesian coordinate system, along x-, y- and z-axis.

See Wikipedia for more details on this coordinate system.

By considering a local neighborhood with respect to a point within the point cloud, one can compute the set covariance matrix over the three dimensions x, y and z. Some of the following sets of features are defined with the covariance matrix eigenvalues $\lambda_i$, $\forall i \in {1, 2, 3}$, and their normalized version $e_i$, where $e_i=\frac{\lambda_i}{\sum_{j\in{1, 2, 3}}{\lambda_j}}$, $\forall i \in {1, 2, 3}$.

As a remark, PCA software outputs correspond to singular values $s_i$, with $\lambda_i = s_i^2$ (ex sklearn in Python).

Barycentric coordinates

The importance of these features was first highlighted by Brodu et al (2011).

$\alpha$ and $\beta$ denotes the barycentric coordinates of normalized eigenvalues. Some theoretical elements on the conversion between Cartesian and barycentric coordinates are detailed on Wikipedia.

By assuming that pca represents the output of a principle component analysis over the point local neighborhood, one can compute such features by doing:

geo3dfeatures.features.triangle_variance_space(pca)

3D properties

Given the nb_neighbors the number of neighbors, neighbor_z the z coordinates of neighboring points, the distances dist between the point of interest and its neighbors and pca the resulting PCA of the neighboring set, one can compute a set of 3D properties that are detailed below.

geo3dfeatures.features.val_range(neighbor_z)
geo3dfeatures.features.std_deviation(neighbor_z)
geo3dfeatures.features.radius_3D(dist)
geo3dfeatures.features.density_3D(radius3D, nb_neighbors)
geo3dfeatures.features.verticality_coefficient(pca)

See Weinmann et al (2015) for theoretical details.

z range

$\Delta_{z,k}$ is the vertical range of height values within the neighborhood

z standard deviation

$\sigma_{z,k}$ is the standard deviation of height values within the neighborhood

radius

$r_k$ represents the radius of the spherical neighborhood encapsulating the $k$ closest neighbors

density

$D$ denotes local point density within the neighborhood

verticality

$V$ is derived from the vertical component of the normal vector, provides the vertical trend of the local neighborhood.

3D features

Given the covariance matrix eigenvalues lambda, and their normalized version e, one can compute the feature set with:

geo3dfeatures.features.curvature_change(e)
geo3dfeatures.features.linearity(e)
geo3dfeatures.features.planarity(e)
geo3dfeatures.features.omnivariance(e)
geo3dfeatures.features.anisotropy(e)
geo3dfeatures.features.eigenentropy(e)
geo3dfeatures.features.curvature_change(e)
geo3dfeatures.features.val_sum(lambda)

It returns a list with the features detailed below.

For more theoretical details, see Weinmann et al (2015) citing West et al. (2004) and Pauly et al. (2003).

curvature_change

$C_{\lambda} = \frac{\lambda_3}{\sum_i^3 \lamdba_i}$

équivalent à

$C_{\lambda} = e_3$

linearity

$L_{\lambda} = \frac{e_1-e_2}{e_1}$

planarity

$P_{\lambda} = \frac{e_2-e_3}{e_1}$

scattering

$S_{\lambda} = \frac{e_3}{e_1}$

omnivariance

$O_{\lambda} = \sqrt[3]{e_1*e_2*e_3}$

anisotropy

$C_{\lambda} = \frac{e_1-e_3}{e_1}$

eigenentropy

$E_{\lambda} = - \sum_{i=1}^{3}{e_i*\ln{e_i}}$

sum of eigenvalues

$\Sigma_{\lambda} = \lambda_1 + \lambda_2 + \lambda_3$

2D properties

If focusing on man-made structure, there may be some symmetric and orthogonal patterns into the point cloud. In this way, considering the point cloud 2D projection may highlight new elements. Radius and density are computed on the same manner than for the 3D point cloud.

See Weinmann et al (2015) for further explanations.

Considering point the 2D coordinates of the point of interest, neighbors the 2D coordinates of neighboring points, and nb_neighbors the number of neighbors, one gets the 2D properties with following functions:

geo3dfeature.features.radius_2D(point, neighbors)
geo3dfeature.features.density_2D(radius2D, nb_neighbors)

radius

$r_{k, 2D}$ represents the radius of the spherical neighborhood encapsulating the $k$ closest neighbors in the 2D space.

density

$D_{2D}$ denotes local point density within the neighborhood in the 2D space.

2D features

Weinmann et al (2015) propose two additional 2D features built on the model of 3D features: the sum and the ratio of eigenvalues computed over 2D data.

Given the covariance matrix eigenvalues lambdas, computed on 2D data projection, one can compute the feature set with:

geo3dfeatures.features.val_sum(lambdas)
geo3dfeatures.features.eigenvalue_ratio_2D(lambdas)

sum of eigenvalues

$\Sigma_{\lambda, 2D} = \lambda_1 + \lambda_2$

ratio of eigenvalues

$R_{\lambda, 2D} = \frac{e_2}{e_1}$

Accumulation features

The accumulation features are 2D-based features, as they are based on an alternative neighborhood definition. Instead of considering the $k$ nearest neighborhood (kNN), one has to design bins of fixed size, and to sort each point into its corresponding bin regarding the 2D projection of the point cloud.

This neighborhood definition has been used in and Monnier et al. (2012) Weinmann et al (2015), for instance.

In order to compute this set of features, one has to assign each point to its corresponding bin with:

geo3dfeatures.features.accumulation_2d_neighborhood(point_cloud, bin_size, buf)

where point_cloud represents the point 3D coordinates into the point cloud, bin the bin size (expressed in the same unity than those of the point cloud) and buf a buffer that helps managing the extrem points in the point cloud. As this method returns a DataFrame with accumulated density, z-range and z-standard-deviation associated to each point in the cloud, accessing the feature value is straightforward.

accumulation density

$M$ is the number of points that lies into the point bin.

accumulated z range

$\Delta_{z}$ represents the maximum height difference within the point bin.

accumulated z standard deviation

$\sigma_{z}$ is the standard deviation of height values within the point bin.

Color features

In order to manage color differences and improve automatic point classification algorithms we store red, green and blue pixel components.

References