Acquisition Overview

Data types:


A Frame represents an image taken by a camera. In this kind of 3D acquisition, the images correspond to the projection of the laser on the object to be digitized.

A common camera - laser setup configuration can be seen in the next figure.

Example of a projection of the laser on an object.

An example of how the laser stripe shape varies as a function of the object's height can be seen in the following figure.

Example of a frame captured by the camera.


A Profile contains the information of the laser position within a Frame.

Single frame profile capture example: a) A frame with the detected profile overlay; b) Profile coordinates as obtained from the frame where coordinate g represents the position of the peak within the frame


A RangeMap is defined as the composition of a surface consisting of several consecutive Profiles,

acquired by equally spaced displacements of the part under the laser. Equivalently, the part could be static while the camera - laser set moves.

The following figures describe the process of building a RangeMap. For each Frame from the camera, a Profile contains the pixel coordinates of each laser stripe. The accumulation of different Profiles (moving the scanned part under the laser) results in a RangeMap, containing 3D information of scanned part's surface.

Generation of the RangeMap from Profiles: a) Coordinates in the peak position in the current frame, b) Current profile in (u, v, g) coordinates, and c) Set of consecutive profiles

Any RangeMap can be represented as a bidimensional image encoding the g coordinate as gray level values (see the following figure). Each column of the image represents data from a single Profile.

Depending on the acquisition technique or the 3D camera used, the profiles will be arranged in rows, instead of columns.

A part's RangeMap acquisition example, represented as a gray level image. Each column correspond to one single profile, rows correspond to the camera pixel y-dimension, while gray level correspond to the depth information. Alternatively, the row-column roles can be switched, depending on the acquisition approach.


A COP consists on a set of organized 3D points. Unlike the rangemaps, the cop values correspond to metric coordinates. COP Object consists on three planes, one for each metric coordinate (x, y and, z). Each COP plane consists on a bidimensional grid. The COP object assumes that neighbours on the grid are neighbours on the 3D Space. So, if two points are neighbours in the COP structure, there exists a triangle that connects them in the 3D space.

Obtaining a COP from range maps

Although no linear relation exists between pixels on a range map, and 3D points on a COP, an approximation can be done to generate COP without any calibration.

See the section Rough calibration by using 3 linear factors for more information how to configure an acquisition system with 3 factors

The cop coordinate Xcop depends on the range map coordinate Y instead of X. Similar with Ycop (see the following picture).

Coordinate modification during rangeMap to COP transformation

This linear assumption is not useful to get accurate reconstructions. In that case, the Metric calibration is recommended.

3DExpress provides tools for the correction of projective distortion. See section Calibration of the rangemap data for more information.


The ZMap consists on a planar projection of COP onto the z plane. 3DExpress transforms each COP element to the ZMap using the following relation:

Creating a Z map from a COP
ZMap axes naming does not correspond directly to 3D coordinate axes. Y ZMap axis is related to the vertical axis, that axis corresponds to the X-axis on the 3D coordinate system, so, the motion axis.


A ZMap object internally contains a list of factors:

Although the ZMap only contains metric information of the z-coordinate, metric information along x, and y axis can be extracted using ZMapFactors as follows:

Ratio Pixel/Metric units

One characteristic of the ZMap is the constant ratio pixel/metric units. So, the metric distance between consecutive pixels along a main axis is always constant.

This constant ratio can be computed from the ZMapFactors:

Advantages of ZMap

The ZMap has several advantages compared with the typical range map:

The following figure displays the same object in 3 different formats: a typical Range Map, a ZMap, and a ZMap after forcing the top plane parallel to plane Z.

Range MapDirect ZMapZMap after COP orientation

The range map is affected by several reasons: different acquisition resolution on X and Y axis, projective distortion, and the acquisition of the object not being aligned parallel to the camera sensor. With all this deformations it is difficult to compute metric distances over the range map.

The ZMap solves all these deformations. Metric coordinates of each pixel can be determined by using the ZMapFactors.

In addition, if before the ZMap generation, the COP is correctly oriented, it is possible to generate a ZMap aligned with a reference plane. After that, 3D measures can be computed over the ZMap by using standard 2D libraries (like region growing, diameter computation, etc). The right image displays a ZMap where holes are perfectly rounded regardless of the camera orientation. Using this image, it is easy to compute the metric diameter of the hole. It is only required to multiply this value with the metric ratio. (see Forcing an equal metric ratio in both axes and Ratio Pixel/Metric units sections for more information).

In case of laser tilted it is recommended to use the Fast mode, as the COP can contain artifial triangles. Alternative, user can filter these triangles before ZMap creating using the function sal3d::COP::filterTrianglePerimeter.

Undefined lines on the ZMap

In case of Fast ZMap generation, during the creation of the ZMap from a COP, the ZMap could present some black lines (see following picture). These lines correspond to a set of undefined points. This problem appears when no point of the COP object is mapped on those ZMap pixel positions. These undefined points are represented as NaN values on the ZMap. In general, when these empty points appears on the ZMap it means that we are asking for more resolution than the resolution present on the COP.

a) ZMap with undefined lines, b) ZMap without undefined lines

These lines can be avoided by reducing the resolution of the ZMap, i.e., by choosing a smaller height and width in the ZMapFactors (see previous figure b).

Forcing an equal metric ratio in both axes

In addition, the ZMap proportions depends on its factors. As the predefined values depends on the resolution on x and y axis during the acquisition, not always both axis have the same proportions. So, ZMaps could appear different scaled in both axis.

In order to get a ZMap with the same ratio pixels/metric units on both axis, user must take care on the following equation:

(xmax - xmin) * (width - 1) = (ymax - ymin)*(height - 1)

left) ZMap by default, right) ZMap forcing equal ratio pixels/metric


Structure defining a surface composed of vertices and triangles.

Despite in SAL3D there are not a lof of functions to process Mesh data, it can be used as input and/our output objects.

It is possible to create Meshes from a single COP, or for multiple COPs (using the SAL3D integrator tool).

In addition, using the Mesh Import tool is possible to create COPs and ZMaps from a given Mesh object.