<a id="e3d-obj-features"></a>

# Object Features

This section presents the various features that pertain to a 3D object.

<a id="e3d-obj-units"></a>

## Units

Both the [`E3DObjectExtractor`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) parameters and the [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) features are expressed in metric units.

* For example: if the resolution of the input [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html) is expressed in mm / pixel, the length parameter is expressed in mm.
* Use the [`EZMap::GetResolution`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html#a6e379dbe03b83369132fba090b8a6ac8) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html#a4c62144e1a9c26401f8a33af6a8bb117) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html#aaf611d4f2e2a92af5903aba47cbac22c) and [`EZMap::SetResolution`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html#a5642c614e0885206e7c0e8cb4b4a1ab5) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html#ac67797521aa15207065b151b14cef7c6) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html#a20ed6e2a7c0ea090f28ed698bc95bfca) accessors of the [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html) to query and change its resolution.

All angles are expressed in degrees.

<a id="e3d-obj-planes"></a>

## Object Plane and Base Plane

The [`E3DObjectExtractor`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) fits a plane to the pixels of each [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) output:

* Use [`E3DObject::GetPlane`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#ac5031b902c177ecf952f079db3a4a03a) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#af644f2aff5f0dfde3765ba6a3cc788b5) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#adf3e29ab63a392e221c5cc3013417d3a) to access this plane.

The [`E3DObjectExtractor`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html) also tries to fit a plane to the pixels surrounding an [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html)

* This plane is called the *base plane*.
* It is an estimation of the local background around the object.
* If there are too many undefined pixels in this area, the base plane is equal to the reference plane of the input [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html).

![image](assets/images/easy3d/easy3dobject/setting_objects_01.webp)

<a id="e3d-obj-bounding-box"></a>

## Bounding Box

The *bounding box* is the minimal enclosing rectangle for all the object positions.

* It is oriented in the XY plane of the ZMap space (rotation around the Z axis of the ZMap).
* Its rotation is used as the orientation of the object (see [`E3DObject::GetOrientation`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#a2bc0f30ad5600f91a3fd5a6e659b7a4a) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#a48e63e96dbcb58ce41dacb617eccb281) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#a687c2ce8d0300277adf166210dcf3c43)).
* Its X and Y sizes are the object length and width (see [`E3DObject::GetLength`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#a0a81b3485c5fecd9f389576ba5bd94e7) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#ae27328320c10594cce8829b76964b277) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#a081b370d892a971360a946378db7283f) and [`E3DObject::GetWidth`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html#a77fb6c7190edeea42a14f21a92460630) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html#a427a8f60d220219b720b3094aa5ed2da) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html#a4425f246c5dfbeab4adfbc8038e08698)).
* Its Z size is always in the Z axis of the ZMap direction.

![image](assets/images/easy3d/easy3dobject/setting_objects_02.webp)

<a id="e3d-obj-length-width"></a>

## Length and Width

The *length* of an object is the largest dimension on the XY plane in the ZMap space. It is the same as the size of the major axis of the bounding box.

The *width* of an object is the smallest dimension on the XY plane in the ZMap space. It is the same as the size of the minor axis of the bounding box.

Use the [`E3DObjectExtractor::SetLengthRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a76f254b353c20d095e294fe807496c6a) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a59973c5efe7c8b95a269429fce4663aa) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aa1e6cbc8294da13bb77f93c124da58cf) and the [`E3DObjectExtractor::SetWidthRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#adbdde56b7ad0dd87f6b894f75ea53226) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a18d8b1fc2fb76e3712a98ce257cd7d08) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a0b6b8fe27c46d436b2245399d399af2b) accessors to set the ranges of allowed values for the length and the width.

![Length and width of 3D objects in a ZMap.](assets/images/easy3d/easy3dobject/setting_objects_03.webp)![Length and width of 3D objects in a point cloud.](assets/images/easy3d/easy3dobject/setting_objects_04.webp)

<a id="e3d-obj-heights"></a>

## Local and Reference Top Positions and Heights

The *local top position* of an object is the position (3D coordinates) of the point in the [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) that is the furthest from the base plane.

The *local height* of an object is the distance between the local top position and the base plane.

The *reference top position* of an object is the position (3D coordinates) of the point in the [`E3DObject`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObject.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObject.html) that is the furthest from the reference plane.

The *reference height* of an object is the distance between the reference top position and the reference plane.

![](assets/images/easy3d/easy3dobject/setting_objects_06.webp)![](assets/images/easy3d/easy3dobject/setting_objects_05.webp)

If there are too many undefined pixels in the object surroundings:

* The base plane is equal to the reference plane of the input [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html).
* The local top position is equal to the reference top position.
* The local height is equal to the reference height.

Use the [`E3DObjectExtractor::SetLocalHeightRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a74a5f92573336145f8cdcf4cb3a73a8b) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#ad3b8d8d7e886b5f67f2b529d50c8bb49) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a57aa36fd9929739b9f77fdd73769be17) and the [`E3DObjectExtractor::SetReferenceHeightRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a4f998d6e0e996db0c24533d9d5b405b8) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aa6d9b69d5b38f699b483a8eefdde5eb6) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#ae57b903954872c9d5a535fa5339f3e37) accessors to set the ranges of allowed values for the local and the reference height.

<a id="e3d-obj-average-position"></a>

## Average Position

The *average position* is the arithmetic mean of the 3D positions of the object, also known as the barycenter.

![image](assets/images/easy3d/easy3dobject/setting_objects_07.webp)

<a id="e3d-obj-aspect-ratio"></a>

## Aspect Ratio

The *aspect ratio* is the width (the smallest dimension on the XY plane) divided by the length (the largest dimension).

* It lies between 0 and 1.
* The smaller the ratio, the more elongated the object is.
* A square has an aspect ratio of 1.

Use the [`E3DObjectExtractor::SetAspectRatioRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a853e2dc0e8f84827640285738e588658) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a94a8c7282aa56a8d39be145d648c806a) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#afbeb2da664e9ce14eb7f761d867faa79) accessor to set the range of allowed values for the aspect ratio.

![image](assets/images/easy3d/easy3dobject/setting_objects_08.webp)

<a id="e3d-obj-orientation"></a>

## Orientation Angle

The *orientation angle* is the angle between the X axis of the [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html) and the longest axis (the length) of the object.

* The angle is measured in the clockwise direction.
* The value must lie between $-90°$ and $+90°$.

Use the [`E3DObjectExtractor::SetOrientationRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a88c1b7058e6835c24a5312f34b97d513) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a6f9145f71df7f242e3cd18b292146e6b) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a9b4a21d579c1aa680bacb4404745045b) accessor to set the range of allowed values for the orientation angle.

![image](assets/images/easy3d/easy3dobject/setting_objects_09.webp)

<a id="e3d-obj-tilt"></a>

## Local and Reference Tilt Angles

The *local tilt angle* is the angle between the base plane and the object plane.

* A value of 0 means that the object top surface is parallel to its base.
* The value must lie between $0°$ and $+90°$.

The *reference tilt angle* is the angle between the object plane and ZMap XY plane.

* A value of 0 means that the object top surface is parallel to its base.
* The value must lie between $0°$ and $+90°$.

Use the [`E3DObjectExtractor::SetLocalTiltRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aa988f2a74b5e386901c0ad1596ac84d1) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aae0fe4085aa00eee66fe7846696d455c) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#ad8ea8a3b90904047ca8e6c49c5599742) and the [`E3DObjectExtractor::SetReferenceTiltRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a64e89894628bc76e66d2e7266eb96195) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a3d108654ecf0e560fedfc97a6b479563) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a5f4d33ee741508d169d33ac411a0033b) accessors to set the range of allowed values for the tilt angles.

![Local tilt.](assets/images/easy3d/easy3dobject/setting_objects_10.webp)![Reference tilt.](assets/images/easy3d/easy3dobject/setting_objects_11.webp)

<a id="e3d-obj-area"></a>

## Area

The object *area* is the area of the top surface of the object projected on the reference plane of the [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html).

* It is equal to the number of pixels in the object × the x-resolution of the [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html) × the y-resolution of the [`EZMap`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EZMap.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EZMap.html).

Use the [`E3DObjectExtractor::SetAreaRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a5e442277167963725a627b0334596580) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aa084f9a231f2b24811aff58aab6143af) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#aea7d48af7c4479542403fca7e132b89e) accessor to set the range of allowed values for the area.

![image](assets/images/easy3d/easy3dobject/setting_objects_12.webp)

<a id="e3d-obj-volume"></a>

## Volume

The object *volume* is the volume that lies between the top surface and the base plane of the object.

Use the [`E3DObjectExtractor::SetVolumeRange`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#ade22196830df5c237a81a4c59bf7b171) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#ac31284aa91ade19dfafd8fc6a130b255) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DObjectExtractor.html#a7080ec8ae7f0b7914ea68eb7318b4c18) accessor to set the range of allowed values for the volume.

![image](assets/images/easy3d/easy3dobject/setting_objects_13.webp)

<a id="e3d-obj-sphere"></a>

## Sphere

This feature is disabled by default.

When enabled, a sphere is an object [`E3DSphere`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1E3DSphere.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1E3DSphere.html) that represents the sphere that best fits the object (calculated according to the least squares).
