Purpose

PCLClusterStatistics extracts statistical information about clusters from incoming point cloud. On an XYZINormal point cloud for each point it

  • determines a cluster index from a selected point member by rounding it to the next cardinal number and

  • calculates for each cluster index all point magnitude and phase values:

    • average
    • average of absolute values
    • sum
    • absolute sum
    • median
    • center of gravity
    • Eigenvalues (ordered largest first, smallest last)
    • Eigenvectors (ordered according their eigenvalues)
    • oriented min/max values
    • intersections of the user plane with a line from center of gravity of the cluster in direction of its largest eigenvalue
    • flags indicating whether the plane intersection values are valid.

The cluster results are listed in descending order regarding the number of cluster points. Most outputs are multiple fields containing as many values as clusters have been found and analyzed.

Windows

Default Panel

../../../Projects/MLPCLClusterStatistics/Modules/mhelp/Images/Screenshots/PCLClusterStatistics._default.png

Input Fields

inputPCLObject0

name: inputPCLObject0, type: MLBase

The point cloud from which cluster information shall be extracted. It must be of XYZINormal type; all other point clouds will not be recognized.

Output Fields

outputStatistics

name: outputStatistics, type: MLBase

Connector to the internally used module which provides access to the current statistical information via getClusterStatistics().

Parameter Fields

Visible Fields

Status

name: status, type: String, persistent: no

see PCLModule.status

Cluster Index Member

name: clusterIndexMember, type: Enum, default: x / data[0]

The point member from which the cluster index value shall be extracted; for possible settings see Magnitude Member.

Values:

Title Name
x / data[0] x / data[0]
y / data[1] y / data[1]
z / data[2] z / data[2]
data[3] data[3]
normal x / data n[0] normal_x / data_n[0]
normal y / data n[1] normal_y / data_n[1]
normal z / data n[2] normal_z / data_n[2]
data n[3] data_n[3]
curvature curvature
intensity intensity
intensity Replacement intensityReplacement

Magnitude Member

name: magnitudeMember, type: Enum, default: x / data[0]

The point member from which the magnitude value shall be extracted.

Values:

Title Name Description
x / data[0] x / data[0] The x (also called data[0]) member of the point is taken as magnitude input.
y / data[1] y / data[1] The y (also called data[1]) member of the point is taken as magnitude input.
z / data[2] z / data[2] The z (also called data[2]) member of the point is taken as magnitude input.
data[3] data[3] The data[3] member of the point is taken as magnitude input.
normal x / data n[0] normal_x / data_n[0] The normal_x (also called data_n[0]) member of the point is taken as magnitude input.
normal y / data n[1] normal_y / data_n[1] The normal_y (also called data_n[1]) value is taken as magnitude input.
normal z / data n[2] normal_z / data_n[2] The normal_z (also called data_n[2]) member of the point is taken as magnitude input.
data n[3] data_n[3] The data_n[3] member of the point is taken as magnitude input.
curvature curvature The curvature member of the point is taken as magnitude input.
intensity intensity The intensity member of the point is taken as magnitude input.
intensity Replacement intensityReplacement  

Phase Member

name: phaseMember, type: Enum, default: x / data[0]

The point member from which the phase value shall be extracted; for possible settings see Magnitude Member.

Values:

Title Name
intensity Replacement intensityReplacement

Plane Point

name: planePoint, type: Vector3, default: 0 0 0

For each cluster: a line with the center of gravity as reference point and the strongest Eigenvector is intersected with the plane defined with Plane Point and Plane Normal; the result is displayed in Intersections. If for any numerical reason such an intersection point is not well defined then the corresponding value in Ok is 0, otherwise it is 1.

Plane Normal

name: planeNormal, type: Vector3, default: 0 1 0

See Plane Point.

# Clusters

name: numClusters, type: Integer, persistent: no

The number of detected clusters (which means the number of different found cluster indices).

# Points

name: clusterNumPoints, type: String, persistent: no

For each cluster the number of points found in it; the field contains as many values as displayed in # Clusters.

Sums (clusterMagnitudeSums)

name: clusterMagnitudeSums, type: String, persistent: no

For each cluster the sum of all point magnitude values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Sums Absolute (clusterMagnitudeSumsAbsolute)

name: clusterMagnitudeSumsAbsolute, type: String, persistent: no

For each cluster the sum of all absolute point magnitude values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Averages (clusterMagnitudeAverages)

name: clusterMagnitudeAverages, type: String, persistent: no

For each cluster the average of all point magnitude values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Averages Absolute (clusterMagnitudeAveragesAbsolute)

name: clusterMagnitudeAveragesAbsolute, type: String, persistent: no

For each cluster the average of all absolute point magnitude values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Medians (clusterMagnitudeMedians)

name: clusterMagnitudeMedians, type: String, persistent: no

For each cluster the median of all point magnitude values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Sums (clusterPhaseSums)

name: clusterPhaseSums, type: String, persistent: no

For each cluster the sum of all point phase values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Sums Absolute (clusterPhaseSumsAbsolute)

name: clusterPhaseSumsAbsolute, type: String, persistent: no

For each cluster the sum of all absolute point phase values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Averages (clusterPhaseAverages)

name: clusterPhaseAverages, type: String, persistent: no

For each cluster the average of all point phase values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Averages Absolute (clusterPhaseAveragesAbsolute)

name: clusterPhaseAveragesAbsolute, type: String, persistent: no

For each cluster the average of all absolute point phase values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Medians (clusterPhaseMedians)

name: clusterPhaseMedians, type: String, persistent: no

For each cluster the median of all point phase values; the field contains as many values as displayed in # Clusters. The value for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Center Of Gravities

name: clusterCenterOfGravities, type: String, persistent: no

Multi-field containing a triple for each found cluster which represents the center of gravity. The triple for the cluster with most points is listed first, the value for the cluster with least points is listed last.

Eigen Values

name: clusterEigenValues, type: String, persistent: no

Multi-field containing a triple for each found cluster which represents the eigenvalues, ordered from largest to smallest. The three eigenvalues for the cluster with most points are listed first, the three eigenvalues for the cluster with least points are listed last. In each triple of eigenvalues the first one indicates the largest extent of a cluster, the third one the least extent of the cluster.

Eigen Vectors

name: clusterEigenVectors, type: String, persistent: no

Multi-field containing three triples (nine values) for each found cluster which represent the three eigenvectors of each cluster, ordered corresponding to their respective eigenvalues.

Oriented Extents

name: clusterOrientedExtents, type: String, persistent: no

Multi-field containing three minimum/maximum pairs for each found cluster which represent the extent ranges of the projected cluster, ordered corresponding to their respective eigenvalues. In other words: the first six values are the (xMin, xMax, yMin, yMax, zMin, zMax) extents of the cluster with the largest number of points after its transformation such that its largest extent is in x-direction, the medium extent in y-direction, and the smallest in z-direction and its center of gravity is located at (0,0,0). These values can be used for example, to determine an oriented bounding box around the cluster, or to draw an axis cross in the cluster with has the extents of the cluster.

Intersections

name: clusterPlaneIntersections, type: String, persistent: no

See Plane Point.

Ok

name: clusterPlaneIntersectionsOk, type: String, persistent: no

See Plane Point.