Table of Contents
- See Also
- opals::IStripAdjust
Aim of module
Improves the geo-referencing of ALS data and aerial images in a rigorous way combining strip adjustment and aerial triangulation.
Requirements for usage of opalsStripAdjust
This module requires the installation of the Matlab runtime.
General description
Rigorous strip adjustment re-calibrates the ALS multisensor system taking into account original scanner and trajectory measurements. Using the redundancy in the overlapping area of two or more strips, systematic errors in the measurement process are corrected. The impact of these errors can be identified as discrepancies between two overlapping ALS strips or between an ALS strip and a control point cloud. It is furthermore possible to integrate images into the adjustment, i.e. combine ALS strip adjustment and aerial triangulation.
For the determination of discrepancies, a framework similar to Module ICP is adopted. Correspondences are established directly between the point clouds in object space to exploit the full resolution. For the distances, a point-to plane metric is used, i.e. instead of the Euclidean distance between two points its component in the direction of the surface normal is considered.
The decisive difference of rigorous strip adjustment compared to the ICP algorithm is that rather than estimating transformation parameters in object space, correction parameters for the original ALS observations are determined and the direct georeferencing of the point clouds is iteratively improved. That means Module StripAdjust is specialized in ALS data and is not applicable to any arbitrary point cloud.
Note that Module StripAdjust strictly uses the degree (full circle=360°) as angular unit in its parameter interface. This applies to values as well as to standard deviations. Alike, angular values are logged, reported, and exported to files in degrees. Following the general rule of OPALS, angles are stored in radians internally, however. Hence, for angles read from file (trajectories and exterior image orientations), the conversion factor to radians must be provided in the respective OPALS Format Definition file (toInternal).
In the following subsection (Strip adjustment workflow) the basic procedure of Module StripAdjust is outlined. A more detailed description is provided in (Glira et al., 2015).
Strip adjustment workflow
Import of input data: Since ALS is a multisensor system, three different types of input data are required (c.f. Module DirectGeoref):
- ALS point clouds in the laser scanner's own coordinate system (SOCS)
. - Mounting shift and rotation denoted as lever arm
and boresight misalignment parametrized through three Euler angles
. - Trajectory position
and orientation
. The three angles correspond to roll (
), pitch (
) and yaw (
) of the aircraft.
Further optional inputs are possible for datum definition or a combined adjustment of ALS and image data:
- Ground-truth data: Control point clouds in object space. If no control point clouds are available, the datum of the block can alternatively be defined by fixing the trajectory of one or more strips.
- Image orientation: Initial interior orientation and lens distortion parameters (camera-wise) as well as exterior orientation parameter for each image.
- Image tie point observations: Image tie points have to be detected using external software and are introduced to Module StripAdjust via text files (c.f. Strip adjustment & Aerotriangulation).
- Ground Control Points: Ground Control Points for the Aerotriangulation in object space. The GCPs are linked to image measurements via corresponding IDs.
Direct georeferencing: For further processing of the ALS point clouds they are georeferenced, i.e. the point coordinates in object space are derived from the SOCS coordinates, trajectory and mounting parameters. In the first iteration, the initial values are used. During the following loops, these are updated in the adjustment step. The relation between a point in the laser scanner's coordinate system (
) and the point in a global reference system (
) is formulated in the direct georeferencing equation:

The four different appearing coordinate systems are the scanner coordinate system (s, blue in figure 2), the INS (or "body") coordinate system (i, red), the navigation coordinate system (n, left out in figure 2) and the Earth-Centered, Earth-Fixed (ECEF) coordinate system (e, purple). The rotation matrix from navigation to ECEF system
is not observed but depends on latitude and longitude corresponding to the actual
. Both, the establishment of correspondences and the adjustment step are performed in the ECEF system. If image data are specified, the tie points are forward intersected to object space.
Find overlaps: For each point cloud, a voxel structure is built up represented by the voxel centers of all voxels containing points of the respective point cloud. If the number of common voxels between two point clouds is higher than the specified value (-correspondences.{strip2strip,control2strip,image2strip}.overlap), the point clouds are assumed to be overlapping. In the most general case, overlaps are checked between three point cloud types:
- Georeferenced ALS point clouds
- Control point clouds (if specified)
- Image tie points in object space (if image data are specified)
In the following steps, correspondences are established between either of these point cloud types.
Correspondence Selection & Subsets: Potential correspondences are selected for each point cloud pair. The available strategies are the same as in Module ICP and are shortly summarized here (ordered by growing complexity):
- Uniform Sampling (US): Uniform selection of the points in object space based on a voxel structure.
- Normal Space Sampling (NSS): Class-wise sampling in angular space aiming at a uniform distribution of normal vectors (slope & aspect).
- Maximum Leverage Sampling (MLS): Selection of the points with highest leverage providing the strongest constraints for parameter estimation.
Note that in Module StripAdjust the sampling strategies are applied hierarchically. First, uniform sampling is used and then the selected potential correspondences can be further subselected with NSS and MLS. The optimal strategy depends on the amount and characteristics of ALS data in combination with the computational resources but also on the topography of the scanned objects/landscapes.
After the selection of potential correspondences, these are used to reduce the number of points for further processing. Subsets containing points in a certain radius (-{strips,control}.subsetRadius) around the potential correspondences are used instead of the full point clouds. Furthermore, the remaining points can be thinned out to be below the point density specified by -{strips,control}.maxPointDensity, which is recommended for densities above 10 points per square meter. Subsets are created before the first iteration and are not modified during further processing. Therefore, the radius has to be chosen large enough that establishing correspondences and estimating normals is still possible and meaningful (no extrapolation), even if the point clouds move in object space due to updated parameters (e.g. mounting). On the other hand, a too large subset radius makes the operation more memory intensive than necessary.
For large projects, the recommendation is to use a small subblock (2 strips) with a large subset radius for estimating the mounting parameters and to introduce these parameters as an input for the adjustment of the entire block. Since this minimizes the expected movement of the point clouds, a smaller value for the subset radius can be chosen.
Matching of the potential correspondences. For each selected point, its nearest neighbour in the overlapping point clouds is found as correspondence candidates.
Rejection of false correspondences: A correspondence is defined as a pair of points (c.f. Matching) from two different point clouds along with their respective normal vectors.
- Plane roughness as a measure of the normal vector reliability.
- Angle between the normal vectors to indicate if the points are on the same plane.
- Distance between the points
- Point-to-plane distance in relation to the a priori assumptions.
Weighting: Correspondences are weighted based on the roughness and the angle between the respective surface normals.
Least-squares adjustment: Point-to-plane distances between corresponding points are minimized by estimating the following parameter groups:
- Scanner calibration parameters (c.f. Scanner and mounting calibration)
- Mounting calibration parameters (c.f. Scanner and mounting calibration)
- Trajectory correction parameters (c.f. Trajectory correction parameters)
- Image exterior and interior orientation parameters including distortions (+ camera mounting, c.f. Strip adjustment & Aerotriangulation)
The objective of the adjustment is to minimize the weighted sum of point-to-plane distances.
with 
The stochastic model is given by the weights
and the functional model by the point-to-plane distances
;
and
are the corresponding points of the
-th correspondence as determined by the direct georeferencing equation;
is the unit normal vector in point
.
Until the specified number of iterations is reached, the iteration starts again with direct georeferencing using the updated parameters. Otherwise, the final parameters are found. A final direct georeferencing step provides the adjusted point clouds. In case that images were included in the adjustment, these images can be undistorted using the estimated distortion parameters. The final interior and exterior image orientations are provided in separate files.
Scanner and mounting calibration
To compensate for systematic errors occuring in the scanner measurement process, scanner calibration parameters are estimated in the adjustment step (on-the-job calibration). Every point
in the scanner coordinate system is assumed to be the result of one range and two angle measurements, i.e. as a function of the three polar coordinates
,
and
:

The polar coordinates are determined using the initial values (
,
,
) given by the input data
and two estimated calibration parameters each: One offset (
,
,
) and one scale (
,
,
) parameter making a total of six scanner calibration parameters.



The mounting calibration parameters describe the rotation from the scanner system to the INS system (misalignment) and the translation between the scanner system and the GNSS antenna (lever arm). In total, six parameters are estimated, namely three misalignment angles (
,
,
) and three lever arm components (
,
,
). Usually, these parameters are known in advance, but unless they are completely reliable and up-to-date, a re-estimation during the adjustment is reasonable. This particularly concerns the misalignment angles since the impact of a respective error grows with
and thus can become rather large for typical ALS settings.
Trajectory correction parameters
The aircraft trajectory is given by a 3-by-1 position vector
and three orientation angles roll
, pitch
and yaw
. The initial values as measured by the GNSS/IMU system are given by
and
,
,
. In contrast to scanner and mounting calibration parameters, where no short-term changes are expected, trajectory data quality may vary significantly during short time periods due to different external influences. Therefore, trajectory correction parameters have to be separately etimated for each strip. In case of very unstable trajectory accuracy, time-dependent trajectory correction parameters are necessary. Module StripAdjust offers three different trajectory correction models (listed in order of growing complexity):
Bias trajectory correction model (BTCM): The simplest approach relies on the assumption that the trajectory error does not change significantly within one strip. In this case, a stripwise set of six correction parameters (
,
,
,
,
,
) for the six trajectory parameters is sufficient:






The index
stands for the
-th strip. The total number of parameters is
with
being the number of strips. With reference on the analogy for the other trajectory parameters, the following two models will be desribed only using the example of
.
Linear trajectory correction model (LTCM): A linear correction model is still rather simple allowing to compensate for a parameter drift. For each orientation angle or vector component (and each strip), two correction parameters
,
are estimated:

where
is the start time of strip
. The total number of parameters amounts to
.
Spline trajectory correction model (STCM, Glira et al., 2016): For highest flexibility of the trajectory correction, this model works with natural cubic splines. Each strip is divided into segments of equal length
and for each segment, the time-dependent correction is estimated as a cubic polynomial. For the
-th segment of the
-th strip the time dependent correction of the roll angle
has the form
![$\Delta\phi_{[j,k]}(t) = a_{0[j,k]}^{(\phi)} + a_{1[j,k]}^{(\phi)}\cdot(t-t_{s[j,k]}) + a_{2[j,k]}^{(\phi)}\cdot(t-t_{s[j,k]})^2 + a_{3[j,k]}^{(\phi)}\cdot(t-t_{s[j,k]})^3$](form_269.png)
where
is the start time of the segment. For each segment, four parameters
to
are estimated. The total number of parameters depends on the number of strips
and on the number of segments in each strip
(factor 6 considers the three orientation angles and the position vector components)
.
To ensure a continuous and smooth correction function throughout the whole strip, additional constraints are introduced for each junction requiring continuity of the function value as well as its first and second derivative. Furthermore, the first and second derivative can be optionally set to zero at the beginning and at the end of each strip.
Reducing the segment lenght
, a nearly arbitrary flexibility of the correction function can be reached. However, too short segments imply the risk of overfitting or block deformations and require a dense and homogeneous distribution of correspondences to estimate the high number of parameters with sufficient redundancy. Therefore, it its recommended to use control point clouds in case that a STCM is applied.
Strip adjustment & Aerotriangulation
As already outlined in the General description, it is also possible to perform a "hybrid" adjustment of ALS and photogrammetric data. Therefore, ALS strip adjustment and a bundle block adjustment of the image block are combined. Like in ALS strip adjustment, point-to-plane distances between all respective point clouds in object space are minimized. Furthermore, ground control points (GCP) for the images can be introduced. These are given by their 3D coordinates in UTM along with an id (attribute _pointID) linking them to image measurements (c.f. observation text file).
The following parameter types related to the image data can be estimated:
- Interior orientation: Corrections for the interior orientation parameters (
) are estimated camera-wise. Furthermore, two radial (
) and two tangential (
) lens distortion parameters can be estimated and used to undistort the images. If it is not sure whether the given image distortions can be compensated by these parameters, it is recommended to undistort the images before the adjustment using external software. - Camera mounting: Like for Laser Scanners, lever arm and misalignment can be estimated for each camera w.r.t. the trajectory.
- Exterior orientation: Corrections for camera position (
) and orientation (
) can also be estimated for each image (
) separately. - Tie point coordinates: The adjusted tie points in object space are provided as SHP files.
Initial values for the interior orientation parameters are expected in pixels. The assumed image coordinate system has the origin in the upper left image corner with the axes pointing right (x) and up (y) resulting in exclusively negative y-coordinates. Image timestamps and / or a priori exterior orientations must be given in a file (images.images.oriFile) whose structure is to be specified by an according OFD file (images.images.oriFormat), with timestamp entries as GPSTime, and exterior orientations as X0, Y0, Z0, OmegaAngle, PhiAngle, and KappaAngle, with angles in radians. Since several images may share the same timestamp / EOR file, each image needs to be matched with a single file record. This is done via the entry PointLabel, which needs to be identical to the respective image file name.
Due to their high number, tie point image observations are expected in a separate text file for each image (images.images.obsFile).
Since Module StripAdjust does not measure image tie points, this has to be done in advance using external software. For each image, the respective text file has to hold a point id and image coordinates (x,y) of all tie points observed in the image:
Potentially included further columns in this file (e.g. quality measures) will be ignored.
Parameter description
Remarks: default=stripAdjust
Store the final processing results within this folder.
Remarks: mandatory
Temporary data is stored within the directory <outDirectory>/temp. If true, clear this directory at the beginning and delete it at the end of the run. If unset, assume yes if all workflow stages are to be processed.
Remarks: mandatory
Zone numbers range from 1 to 60; the zone depends on the longitude of the project area
Remarks: mandatory
Possible values: north ... Northern hemisphere south ... Southern hemisphere
Choose the hemisphere within the UTM zone
Remarks: default=10
The edge length of each voxel used to find overlaps between point clouds in object space. 100 must be a whole multiple of it: fmod(100,x) == 0.
Remarks: default=5
The number of iterations through the Strip Adjustment workflow.
Remarks: default=0
Remarks: default=0
Estimate and assign standard deviations of parameters a posteriori, and log their highest correlations.
Remarks: mandatory
The ALS strips are expected as separate files.The points have to be in the scanner's coordinate system with GPSTime.
Remarks: default=auto
Explicitly specify the input file format.
Estimation rule: auto: the file content is used to recognise the file format.
Remarks: mandatory
Explicitly specify the output directory or file path. If given path ends in a directory separator, it is considered a directory. In that case, the file name is adopted from input.
Estimation rule: <outDirectory>/strips/<inFile-basename>.<oFormat-extension>
Remarks: default=auto
Explicitly specify the output file format.
Estimation rule: auto: In general, the same format will be used for input and output. For formats not allowing to store potentially large project coordinates with sufficient precision, a suitable substitute is used instead (e.g., sdc->sdw).
Remarks: mandatory
Possible values: frd ... front/right/down dfr ... down/front/right dbl ... down/back/left ulb ... up/left/back urf ... up/right/front rdf ... right/down/front ldb ... left/down/back
The approximate mounting of the scanner on the platform.
Remarks: default=0
ALS strips can be assigned to different sessions. A typical application would be the processing of data from multiple acquisition epochs. Scanner and mounting calibration parameters are estimated separately for each session. Note that indexing starts at 0. For setting e.g. the trajectory of the strips assigned to the first session, use -sessions[0].trajectory.inFile .
Remarks: optional
A grid mask can be used to exclude areas that are unsuitable for establishing correspondences, e.g. unstable terrain or water bodies. Only points that fall into pixels with value 1 will be candidates for correspondences.
Remarks: default=Echo[Last]
See the syntax described in the manual, chapter 'Filters'.
Remarks: default=linear
Possible values: bias ..... Offsets of position and rotation. Polynomial degree: 0 linear ... Offsets and scales of position and rotation. Polynomial degree: 1 spline ... Cubic spline. Polynomial degree: 3
This parameter defines the model used for trajectory correction (c.f. section 'Trajectory correction parameters').
Remarks: default=10
This parameter defines the length of the time segments for which separate trajectory correction functions are estimated. The value of this parameter is only considered in case that a spline trajectory correction model is used. In case of a bias or linear correction model, strips are not split into segments, and the sampling interval length is ignored.
Remarks: default=0
Remarks: default=0
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=2
For estimating the normal vector in one point, all neighbouring points within the search radius are used to fit a plane. The resulting normal vector is necessary for calculating point-to-plane distances. Additionally it is used (along with the roughness value) for rejection of false correspondences.
Remarks: default=8
Lower limit for the number of neighbours to result in a reliable plane fit.
Remarks: estimable
Selecting subsets is necessary for many ALS flight blocks since typically, the full amount of data can't be loaded into memory simultaneously. Therefore, only smaller subsets around the correspondences are loaded (c.f. 'Correspondence Selection & Subsets' in the Workflow description). Estimation rule: 2 * normals.searchRadius
Remarks: optional
Unit: [points per square unit length (e.g. meter)]. Limiting the point density can for example be useful in case of UAV-borne laserscanning where possibly tremendous point densities occur.
Remarks: default=
Note that wildcard characters (*,?) can be used for the selection of multiple files at once (e.g. controlPointClouds/cpc*.xyz)
Remarks: default=auto
Explicitly specify the file format - either 1 format for all files, or 1 for each of them.
Estimation rule: auto: the file content is used to recognise the file format.
Remarks: default=3
Remarks: default=5
Remarks: optional
If unset, use an inifinite radius i.e. use all points of the control point cloud(s).
Remarks: optional
Unit: [points per square unit length (e.g. meter)].
Remarks: default=auto
Explicitly specify the file format.
Estimation rule: auto: the file content is used to recognise the file format.
Remarks: default=0.005
Introduce a direct observation of the X coordinate with sigmaApriori as standard deviation a priori (ECEF).
Remarks: default=0.005
Introduce a direct observation of the Y coordinate with sigmaApriori as standard deviation a priori (ECEF).
Remarks: default=0.005
Introduce a direct observation of the Z coordinate with sigmaApriori as standard deviation a priori (ECEF).
Remarks: mandatory
Image files are used for optional undistortion. Tie points have to be measured in advance using external software (c.f. obsFile).
Remarks: default=0
Analogous to sessions, interior orientations are estimated camera-wise. With this parameter, images can be assigned to different cameras.
Remarks: optional
Tie this image to the trajectory of the given strip. If unset, compute an independent image exterior orientation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: mandatory
If image is tied to a strip, then this file must contain the image's timestamp [GPSTime].
Otherwise, initial values for exterior image orientation parameters [X0 Y0 Z0 OmegaAngle PhiAngle KappaAngle].
If both are given and the camera mouting calibration is unset, then it is derived from them.
In any case, a PointLabel must be specified for each record in this file, and one of them must match this image's file name.
Angles are expected in radians.
Remarks: mandatory
Image coordinates of tie point observations in the current image as provided by external software. Each line contains at least three columns with [tiePointID imgCoordX imgCoordY] separated by whitespace. Further columns are ignored.
Remarks: default=0
If this parameter is set to true, the original images are undistorted using the estimated distortion parameters.
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dX0.sigmaApriori
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dY0.sigmaApriori
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dZ0.sigmaApriori
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dOmega.sigmaApriori
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dPhi.sigmaApriori
Remarks: estimable
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Estimation rule: use images.images.all.dExtOri.dKappa.sigmaApriori
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.5
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.5
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.5
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.01
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=15
Maximum Euclidean distance in image space [px] between projected and observed point.
Since data acquisition of different sessions typically is done in different epochs, one trajectory file is expected for each session. Note that anyway, trajectory correction parameters are estimated strip-wise! The trajectory coordinates have to be in UTM.
Remarks: default=auto
Explicitly specify the trajectory file format.
Estimation rule: auto. The file content is used to recognise the file format.
Remarks: default=0
The time lag is added to the trajectory time stamps in order to compensate a synchronisation error between scanner and trajectory time stamps. Please note that the time offset specified in a Riegl RPP file has to be used with opposite sign.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=1
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=1
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=1
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=0
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: mandatory
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: mandatory
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: mandatory
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=3000
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean lever arm.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean lever arm.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean lever arm.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean misalignment.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean misalignment.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: optional
If left unset, then image EORs must be given for this camera, and they will be used to derive a mean misalignment.
Remarks: default=-1
If > 0, introduce a direct observation with sigmaApriori as standard deviation a priori. If 0, treat value as constant. If < 0, estimate value without a direct observation.
Remarks: default=0.5
Remarks: default=0.5
Remarks: default=10
Two point clouds are only considered as overlapping if the number of overlapping voxels is larger than or equal to this value. Setting the number high enough avoids pairs with minor overlaps where hardly enough correspondences can be found.
Remarks: default=10
This value corresponds to the approximate distance between two selected points after uniform sampling.
Remarks: default=0
If > 0, normal space sampling is executed with this percentage of points generated by the preceding uniform sampling.
Remarks: default=0
If > 0, maximum leverage sampling is executed with this percentage of points generated by the preceding uniform sampling.
Remarks: default=0.05
This value is used to restrict the establishment of correspondences to smooth surfaces.
Remarks: default=1
A valid correspondence is given if the two points lie on the same surface. This is more likely for points with similar normal vector directions, i.e. a small delta angle. Therefore these correspondences are assigned a higher weight if this option is activated.
Remarks: default=1
The smoother the terrain the more reliable is the normal vector and therefore also the point to plane distance. Consequently, correspondences on smooth surfaces are assigned a higher weight than those on rough ones.
Remarks: default=2
If the prerequisite of a good initial orientation is met, it can be assumed that the distance between corresponding points doesn't exceed a certain value. Thus, a high distance is an indicator for a wrong correspondence, e.g. one point is on the vegetation canopy or a roof top, the other one on the ground. Another possibility is where one point cloud is very sparse and corresponding points can only be found far away from a point.
Remarks: default=4.5
If two points have very different normal vectors, they are likely to lie on different surfaces, therefore not forming a valid correspondence.
Remarks: default=3
Possible wrong correspondences can also be identified regarding the statistical distribution of point-to-plane distances. This factor defines a tolerance window around the median of all point-to-plane distances. Correspondences with point-to-plane distances outside this window are rejected.
Remarks: estimable
Using this value, correpondences on too rough surfaces are eliminated.
Estimation rule: use strip2strip.selection.maxRoughness
Remarks: default=1
Remarks: estimable
Estimation rule: use strip2strip.selection.samplingDist
Remarks: estimable
Estimation rule: use strip2strip.selection.normalSpaceSampling
Remarks: estimable
Estimation rule: use strip2strip.selection.maxLeverageSampling
Remarks: estimable
Estimation rule: use strip2strip.selection.maxRoughness
Remarks: default=0
Remarks: default=0
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxDist
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxAngleDev
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxSigmaMAD
Remarks: estimable
Estimation rule: use control2strip.selection.maxRoughness
Remarks: default=0.05
Remarks: default=3
Remarks: estimable
Estimation rule: use strip2strip.selection.samplingDist
Remarks: default=1
Remarks: estimable
Estimation rule: use strip2strip.selection.samplingDist
Remarks: default=0
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxDist
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxSigmaMAD
Remarks: estimable
Estimation rule: use strip2strip.rejection.maxRoughness
Remarks: default=0.05
Remarks: default=importData
Possible values: importData ..... Import strip data. preprocess ..... Preprocess data. adjust ......... Do the actual adjustment. postprocess .... Postprocess the adjusted data. exportData ..... Export the adjusted data. exportStrips ... Export the adjusted strips.
If modifications from the previous program run do not affect the first stages, then skip them using this parameter to save time.
Remarks: default=exportStrips
Possible values: importData ..... Import strip data. preprocess ..... Preprocess data. adjust ......... Do the actual adjustment. postprocess .... Postprocess the adjusted data. exportData ..... Export the adjusted data. exportStrips ... Export the adjusted strips.
Must be equal to or greater than 'first'. Use this option to only run the first few stages.
Remarks: estimable
Only considered during stages importData, exportData, and exportStrips. Estimation rule: process all strips.
Remarks: estimable
Only considered during stages importData and exportData. Estimation rule: process all control point clouds.
Remarks: estimable
Only considered during stages importData and exportData. Estimation rule: process all images.
Examples
The data used in the following examples can be found in the $OPALS_ROOT/demo/ directory.
Example 1: Laser scanning strip adjustment
This example demonstrates rigorous laser scanning strip adjustment based on 2 pairs of cross-wise overlapping flight strips (i.e. subsets of 4 strips in total). The datum is defined by fixing the second strip (index 1).
Since this command involves many options, it may be more convenient to specify them in a configuration file:
The command then reduces to the specification of the path to that file, which is stored in $OPALS_ROOT/demo/melkStripAdjust_ALS.cfg. Given that its parent directory is the current working directory, it may be used as:
Alternatively, the same may be done in Python:
This script is stored in $OPALS_ROOT/demo/melkStripAdjust_ALS.py. Given that its parent directory is the current working directory, it may be executed with:
After the first iteration, the standard deviation of point-to-plane differences is still larger than 5cm, as can be seen in the log:
while after the last one, it has been reduced to only 2cm:
Furthermore, the number of used correspondences nearly doubles as a result of the improved orientation. The reduction of strip differences is also demonstrated graphically in Figure 8.
Example 2: Hybrid laser/image orientation with loose images
This example calls Module StripAdjust to execute a rigorous adjustment of 2 pairs of cross-wise overlapping flight strips (i.e. subsets of 4 strips in total) plus six aerial images. The orientation of images in object space is independent of strips and trajectories, and the given image timestamps are ignored. Note that the provided images are downsampled overviews and cannot be used in combination with the given interior orientation (e.g. for image matching).
As in example 1, a configuration file or a python script can be used alternatively. The respective files are $OPALS_ROOT/demo/melkStripAdjust_Hybrid.cfg and $OPALS_ROOT/demo/melkStripAdjust_Hybrid.py. Given that the parent directory is the current working directory, these can be executed analogous to example 1:
And in Python:
Example 3: Hybrid laser/image orientation with coupled images
While the data used in this example is the same as above, we tie the images to the flight trajectory here. Just like scanners, cameras then relate to the body coordinate system by a resp. mounting calibration consisting of a lever arm and a misalignment. The assignment of an image to a strip ties this image to the strip's trajectory. Apart from these assignments, the only additional input needed with respect to the previous example are image time stamps, which are used to interpolate the position and attitude from the flight trajectory. These time stamps need to be specified in the image orientation files (as GPSTime). The initial forward intersection of tie points requires relatively good estimates of the camera mounting calibration parameters (lever arm and misalignment angles). If not set, these are automatically estimated by Module StripAdjust, if exterior image orientations are provided.
Due to the small size of the data set, the image-specific exterior orientation correction parameters, i.e. residual image shifts and rotations optimizing the image bundle block on top of direct georeferencing provided (trajectory and camera mounting), must be set constant to achieve meaningful scanner and camera mounting calibrations and trajectory corrections.
The following command reuses the cfg-file for the hybrid adjustment with loose images and adds the few additional parameters on the command-line:
The following Figure 9 shows the improved relative strip differences compared the laser-only case (cf Figure 8, right).
References
Glira, P., Pfeifer, N., Briese, C., Ressl, C., 2015: Rigorous strip adjustment of airborne laserscanning data based on the ICP algorithm. In: ISPRS Annals of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Volume II-3/W5, 73-80.
Glira, P., Pfeifer, N., Mandlburger, G., 2016: Rigorous Strip adjustment of UAV-based laserscanning data including time-dependent correction of trajectory errors. Photogrammetric Engineering & Remote Sensing 82 (12), 945-954.
Glira, P., Pfeifer, N., Mandlburger, G., 2019: Hybrid orientation of airborne lidar point clouds and aerial images. In: ISPRS Annals of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Geospatial Week 2019, Enschede, NL (in press).
- Date
- 24.03.2017
