- Contents:
Version 2.3.2
- Contents:
Preamble
In contrast to our original plan, version 2.3.2 constitutes another patch release introducing only minor breaking changes (cf. below). Version 2.3.2 introduces significant new features and improvements for the modules StripAdjust, Segmentation, Translate and RadioCal. Please see below for a detailed list of changes.
We plan to release version 3.0 by the end of 2019. This major release will bring important new features (e.g. generic spatial neighbour definitions, multi raster band support, switch to Python 3, etc.) that will require adaptations of existing python and batch scripts.
New features
- Module StripAdjust :
- Introduction of simultaneous orientation of images and laser scans (hybrid adjustment). The images may either by loosely coupled to laser strips, in which case the images do not have to be captured concurrently with the lidar, or tightly coupled to the strips in case of synchronous acquisition of scans and images from the same platform. Details and examples can be found here.
- Support of stage-oriented, possibly distributed processing using new option group workflow
- Support of the application of a previously computed calibration onto different (not thinned out) strip data.
- (Possibly breaking) changes within hybrid laser and image orientation of Module StripAdjust :
- new parameters images.extOri.X0.sigmaApriori, images.extOri.Y0.sigmaApriori, images.extOri.Z0.sigmaApriori, images.extOri.omega.sigmaApriori, images.extOri.phi.sigmaApriori, images.extOri.kappa.sigmaApriori
- cameras.leverArm.X.value made optional, just like leverArm.Y, leverArm.Z, misalignment.omega, misalignment.phi, and misalignment.kappa. If any of these are unset for images tied to a trajectory, Module StripAdjust derives mean lever arms and misalignments from given image exterior orientations.
- all angles directly passed through the interface are now in units of degrees. Log and report files provide all angles in degrees.
- removed option strips.filter.onlyLastEchoes
- introduced option strips.filter.iFilter as replacement, with equivalent default value.
- a priori image orientation files (images.oriFile) must now contain all information for an image on a single line. Use the new option images.oriFormat to specify the file format using an OFD file.
- Module Segmentation :
- Alpha shapes for segments can be derived
- Module now provides programmatically access to segments incl. points after run (see example section for further details).
- Major revision of Module RadioCal :
- break of compatibility: parameter reflectivityFile removed
- support of multiple calibration constant estimation within single run added (parameter splitByAttribute)
- support of shape files added for defining calibration regions added
- module can now process multiple input and calibration region files at once
- filter wasn't applied in the actual calibration stage (originally it was only used in the calibration constant estimation stage)
- possibility of accessing detailed statistics from the calibration constant estimation stage via Python or C++ (see opals::CalibrationStats)
- simplified way of passing calibration constant(s) from estimation stage to calibration stage
- handling of CRS information added as in line with other modules
- Module Translate :
- 3D affine transformation of raster files
- Support of coordinate reference system (CRS) transformations via new parameter group crsTrafo (!!! currently in BETA state!!!)
- CRS transformation bases on the PROJ library (version 6.1.0), which supports custom transformation chains. Please refer to the module documentation for details.
- Module View :
- new color palette "classpal_las" to colorize point clouds classified according to the LAS standard
- automatic sub-menus for attributes, if the total number of attributes exceeds a user-defined size (setting of threshold in tools dialog window)
- new dialog to select attributes displayed in the "data cursor" list (DataCursor->Select attributes)
- Generic filter :
- new unary functions to convert between degrees or gradians and radians: deg2rad, grad2rad, rad2deg, and rad2grad.
- new statistical functions minAbsSigned and maxAbsSigned
- Explicitly clear/empty options of type opals::Vector on the command-line by giving its name without any values.
- Support Python 3.7, see Configuring an external Python installation
- New raster format supported for read and write access: JPEG 2000.
- Power Line Extraction from ALS Data is added under OPALS use cases.
Bug fixes
- Statistical operations :
- "minAbs and maxAbs" did not result in absolute values.
- correct handling of raster NODATA that is Not-a-Number
- Module AddInfo : interpolated grid values were incorrectly assigned, if a process filter was used
- Rename mpir.dll to mpir_geo.dll and mpfr.dll to mprf_geo.dll, to avoid conflicts with Matlab Compiler Runtime R2017b
- correct conversion of enumerators from Python to C++ when running an external Python 3 installation
- Module LineModeler : crash at the end of the run if no outFile was specified
- Module StripAdjust : consider iFormat when reading original trajectories for final export of adjusted trajectories.
Improvements
- Module ZColor : a second value can now be specified for interval to give a differing interval for legend annotations
- Update to Python 2.7.16
- Updated PyScripter to version 3.6.0
- Update to Matlab R2017b Compiler. Hence, Matlab dependent modules (opalsICP, opalsView, opalsStripAdjust ) require the R2017b Matlab Runtime.
- Updated GDAL/OGR library to version 2.3.2
- Module StripAdjust , Module ICP : to support .mat-files larger than 2GB, create them with '-v7.3'.
- Module StripAdjust :
- parallel processing
- new parameters adjustment.covariance and oFilter
- export of corresponding points as ESRI Shape files made faster
- export image orientations both in UTM and ECEF
- check if time stamps of images that are tied to a strip are within the range of time stamps of that strip
- estimate images.forwardIntersect.dExtOri.dX0.sigmaApriori as images.all.dExtOri.dX0.sigmaApriori, just like dY0, dZ0, dOmega, dPhi, and dKappa
- during the final transformation of strips, consider screenLogLevel
- example with coupled images added to the documentation
- Statistic names of generic filters and option type StatFeature unified (sigmaMAD -> stdDevMAD)
- Statistic feature functions corrected/changed (applies to Module Cell, Module PointStats and Module StatFilter):
- rms corrected. new:
old: 
- variance changed to sample variance. new
old: 
- rms corrected. new:
- Module StatFilter : now supports the feature stdDev and stdDevMAD
- Module PointStats : now supports the feature stdDev and stdDevMAD
- Module Cell : now supports the feature stdDev
- Module LineModeler :
- small improvements in get more smooth modeled lines (also see parameter spikeRemoval)
- debug output feature added for analysing the actual patch adjustment results (see parameter debugOutFile)
- Module Import : las import now supports a wider range of GEOTiff tags as coordinate reference systems (removes error message: 'cannot open 'pcs.csv' file. maybe your LAStools distribution...')
Version 2.3.1
- Contents:
Preamble
Version 2.3.1 brings a series of improvements and corrections compared to version 2.3.0. Please see below for a full list of changes.
OPALS 2.3.1 will be the last 2.x version. We plan to release version 3.0 by the end of 2018. This major release will bring important new features (e.g. generic spatial neighbour definitions, multi raster band support, switch to Python 3, etc.) that will require adaptations of existing python and batch scripts.
New features
- A full featured setup program for Windows is provided
- Displaying XML log file contents: Filtering of individual modules implemented
- Script
opalsQuality: new parameter -gridMask enabling additional user-defined exclusion areas (e.g. water bodies) for the analysis of masked strip differences - Module Translate now allows writing the data of one or more input files to separate output files based on specific attributer via splitByAttribute (use cases: extracting flight strips from tiled data, etc.).
- Module Diff : new parameter -noData allows defining the no data value for the output gird (as in /ref ModuleAlgebra).
Bug fixes
- Module Algebra : Structural identity and proper alignment of multiple input grids were not reliably detected.
- Module Cell : Support feature sigmaMAD.
- Module Export :
- String attributes where not written correctly to Shape DBF files (requires an OFD file).
- Module crashed when exporting polygons in conjunction with region filters.
- Specifying the same file for input and output is not allowed. However, this was not checked by the module and a misleading error message occurred. Additionally, the input ODM got cleared so that all geometries objects where removed.
- -helpHtml, -helpChm: support installation directories with blanks
- Module Cell : feature pcount in conjunction with odm output caused the module to hang or crash
- Module Info :
- overview matrix output for ODMs where shifted by 1/2 pixel (mainly used in qpals).
- the y pixel size of rasters were shown with a negative value (absolute value was corrected)
- Module StripAdjust : correct handling of parameter -oFormat if an OPALS Format Definition is given.
- export to LAS format: bring ScanAngle into the interval
by addition/subtraction of 
Improvements
- Large OPALS (xml) log files are now automatically saved/renamed to opalsLog.YYYMMTT-HHMMSS.xml once a certain file size is reached. The critical file size can be defined by the global parameter max_log_file_mb.
- Module Section : Negative overlap do now allow to specify section distances larger than the length/depth of the section.
- Module Import : The ODM tile size was estimated incorrectly while importing GDAL raster files, causing an automated re-importing run (performance issue)
- Module StripAdjust :
- for the import of strip, trajectory and reference cloud data, skip the conversion to .bin files, but import directly to .mat files.
- transforms strips in chunks, to lower memory consumption.
- changed defaults and allowed values:
- control.subsetRadius is unset by default, meaning that all control points shall be used.
- all members of sessions.all.scanner are set constant by default, except range.scale.
- correspondences.control2strip.selection.samplingDist may be 0.
- Module Segmentation : Comparison of the normal vector of the segment plane and the normal vector of a candidate point is added to the plane extraction method to improve the results.
- Classification script
clfTreeModelApplynow supports storing of probability values for each class. - Coordinate Reference Systems:
- new global parameter
–force_coord_ref_systo explicitly override the use of dataset CRS information. - Implementation of automatic CRS validation and soft fixing strategies (e.g. correction of parameter ordering).
- New script
_validateCRS.pyto validate and, as the case may be, fixing up CRS definitions.
- new global parameter
- Write opalsErrors.log only if an error has actually occurred.
- When the file size of opalsLog.xml exceeds the maximum size given by the new global parameter max_log_file_mb, rename it, integrating the current time into the new file name, and start a new one.
- Updated PyScripter to version 3.3.2
- PyPI now provides all needed builds of NumPy, SciPy, and matplotlib. Hence, updates are fetched automatically, and these will not be logged here any more.
Version 2.3.0
- Contents:
Preamble
Version 2.3.0 is a major release featuring the following release highlights:
- Multiple modules, introduced in the nightly builds of version 2.2.0, now available in the official release distribution
- First operative version of the rigorous, hybrid sensor adjustment (i.e. simultaneous orientation of laser scans and aerial photos)
- First version of supervised tree based point cloud classification
- Introduction of qpals - the interactive QGIS plug-in of OPALS
- Rigorous support of Coordinate Reference Systems throughout the entire OPALS software
- Major extensions of the OPALS software framework (logging, parameter specification, documentation)
- Re-organization of main doc page
New modules (now available in official release)
- Module StripAdjust :
- Improves the geo-referencing of ALS data and aerial images in a rigorous way combining strip adjustment and aerial triangulation.
- Module View :
- Provides an interactive 3d viewer for points (including arbitrary attributes) and lines.
- Module TerrainMask :
- Identifies open terrain parts of a DSM input raster using the volume based approach by Piltz et al. (2016).
- Module Segmentation :
- Provides methods for point cloud segmentation based on local homogeneity using either a generic region growing approach or an adapted region growing for plane extraction.
- Module DTM :
- Calculates a high quality Digital Terrain Model in hybrid grid structure (i.e. regular grid + structure lines).
- Module Isolines :
- Derives contour lines (isolines) from grid models and stores them as a vector dataset.
- Module FillGaps :
- Detects gaps (i.e. void pixels) in raster models and provides several interpolation methods to close them.
- Module LineTopology :
- Provides different line merging and topology correction tools for cleaning line networks derived via automatic edge detection.
- Module LineModeler :
- Models 3D structure lines based on a point cloud (ODM) and 2D line approximations.
New scripts
- The scripts clfTreeModelTrain.py and clfTreeModelApply.py provide a supervised tree based classification
New features
- qpals - the interactive QGIS plug-in of OPALS - introduced
- support of Random number generators in generic filters
- Module Algebra considers the new OPALS Global Parameter data_type_grid. Use it to create output rasters with a pixel data type different from opals::RasterDataType::float32.
- Full support for parsing option containers (opals::opts::IGroup, etc.) from configuration files.
- Logging support for scripts.
- Module Export supports OFD Shape files for exporting geometry objects including their attributes as ESRI Shape files.
- Module LineTopology now supports equidistant line vertex densification via parameter -lineVertexDist.
- Module FillGaps now supports triangulation as additional fill method and added a new parameter -maxArea to specify a maximum gap area to be filled.
- Module StripAdjust :
- Support the combined orientation and calibration of laser scans and photos.
- New options:
- adjustment.robustIter to make the first n iterations use a robust weighting function.
- correspondences.strip2strip.selection.maxRoughness and correspondences.control2strip.selection.maxRoughness to ignore points on rough surfaces even before correspondence matching.
- New values supported by option strips.scannerOrientation: opals::ScannerOrientation::rdf, opals::ScannerOrientation::ldb
- Documentation
- Make groups/vectors/arrays/leaves in parameter tables collapsible.
- Link options created with doxygen-custom-command opalsparam to the respective item in the parameter table.
- Rigorous support of Coordinate Reference Systems (CRS) throughout the entire processing pipeline added. For details please refer to the CRS documentation
- In addition to EPSG codes and WKT / PROJ.4 strings, OPALS Global Parameter coord_ref_sys now additionally supports paths to files that contain such strings (original parameter coord_system was declared deprecated).
Bug fixes
- Module LineTopology : weight factors for angles (wf.angle) were erroneously set from the general maxAngleDev parameter
- Module DSM : default file names for (intermediate) min and max model were interchanged.
- Module StripAdjust : resolved problem with log file and custom outDirectory
- Module View : avoid illegal struct element names resulting from attribute names read from LAS/LAZ and ODM files by replacing or removing illegal characters.
- Command line parser :
- Parsing of container types: support values interspersed with names and/or values belonging to other options, e.g. -infile a.txt -infile b.txt
- Support parsing of values for a child of the default-element, and then parsing values for the same child of an actual element.
- User limit definitions (parameter types opals::GridLimit and opals::MultiGridLimit, as e.g. used in Module Algebra) where not processed correctly if negative coordinates were specified.
Improvements
- Re-organization of main doc page:
- Reference documentation moved to a separate page. However, links to frequently used pages (e.g. filters) are still available on the main page.
- New top level menu structure featuring links to the list of module including short descriptions and the reference documentation
- Documentation of Licensing policy added
- Documentation of packages extended
- Documentation:
- Open XML log files with exclusive write, but shared read access.
- Use a monospace font for HTML display of log messages emitted in Matlab.
- Print 0.1 as "0.1" instead of as "0.10000000000000001", etc.
- Logging to screen :
- Format tables with left-aligned first columns, and right-aligned subsequent columns, with constant width of each column.
- Since by far most log records are of importance opals::LogLevel::info, do not print "info" after the time stamp for them, in order to save space.
- Command line parser :
- Print help, even if only -usageLevelMax has been specified.
- Specific help: support non-absolute, possibly abbreviated option paths.
- For top-level element of specific help:
- Disregard maxUsageLevel.
- Print the path, not only the name.
- The OPALS license file opals.key can be alternatively placed in the directory
$OPALS_ROOT/licence(beneficial when using OPALS within a Docker container). - Updated GDAL/OGR library to version 2.1.3, proj.4 to version 4.9.3, and GEOS to version 3.6.1.
- Updated LASlib to LAS_TOOLS_VERSION 170419.
- Python interpreter that comes with OPALS updated to Python 2.7.14.
- Updated OPALS Python AddOns to NumPy 1.13.3, SciPy 1.0.0 and matplotlib 2.0.2.
- Updated PyScripter to version 3.0.2
- Updated PyCharm to version 2017.2.4
- Improved the performance of gap detection in Module FillGaps with a new data structure for the handling of gaps.
- Improved error messages in conjunction with ODMs
- Python script qltStripDiff : Summary table of pairwise strip differences now includes sigma_MAD (median of absolute differences). sigmaMAD is a robust estimator of the (height deviation) dispersion.
- Module RadioCal : The availability of surface normal vector information is now checked before running the module
- Module ICP :
- check if 100 is a whole multiple of voxelSize
- Matlab implementation updated, with speedups.
- Module StripAdjust :
- Check if 100 is a whole multiple of voxelSize
- Matlab implementation updated, with speedups.
- For LS strips, hand only coordinates and time stamps over to Matlab, to save disk space. Afterwards, apply the transformation to the strips separately, preserving all attributes.
- Estimators removed for parameters with internal defaults
- strips.session: start indexing at zero, to be consistent within index into sessions
- DM license no more needed for import of ODM files.
- Module DirectGeoref : Rigorous handling of coordinate reference system information:
- Read possible CRS information from trajectory files
- Store CRS information in output file
Version 2.2.0
Preamble
Version 2.2.0 is a major release introducing a series of new modules and a major change of the software framework which now supports parameter grouping.
New modules
- Module DSM :
- Calculates a land cover dependent DSM raster model based on the approach of Hollaus et. al. (2010).
- Module EdgeDetect :
- Provides different raster based edge detection algorithms (e.g. Canny).
New scripts
New features
- new option mergePolygon added to opalsImport. Using '-mergePolygon fast' when importing complex nested polygons, import performance can be dramatically improved
- Module Translate now accepts GDAL raster files as input
- support Python 3.6, see Configuring an external Python installation
- Module Bounds supports grids / rasters as input, in addition to ODMs. New parameter -rasterType allows for explicit specification whether a pixel represents a point or an area.
- Module Grid and Module GridFeature now support the features slpDeg (steepest slope [deg]) and slpRad (steepest slope [rad])
- New demo dataset flyover.laz courtesy of Amt für Geoinformation, Vermessungs- und Katasterwesen, Mecklenburg-Vorpommern
Bug fixes
- Module Cell didn't not consider the default filename postfix for the features variance, minority and majority
- Module Openness : limits of output raster were not set correctly if the raster origin coordinates were not multipliers of the cell size.
- Module DirectGeoref crashed if the input file was an ODM.
- Module Info showed an incorrect estimation of the point density. Re-import of the ODM or processing the ODM with an OPALS module that opens the ODM in write mode (opalsNormals, opalsAddInfo, opalsPointStats, etc.) is required for obtaining corrected point density estimates.
- Module GridFeature : Parameter limit is now fully functional.
Improvements
- Switched to Matlab 2016b Compiler. Hence, Matlab dependent modules (opalsICP, opalsView, etc. ) require the 2016b Matlab Runtime
- Python interpreter that comes with OPALS updated to Python 2.7.14.
- Updated OPALS Python AddOns to NumPy 1.13.2, SciPy 0.19.1 and matplotlib 2.0.2.
- Python-binding, module parameters: get_*, set_*, and isSet_* methods removed. Parameters remain accessible as properties only.
- DM processor improved: Code basis for generic spatial search added
- To reduce processing stops caused by 'unable to load new data tiles' exeptions, the DM processor now temporarily suspends processing threads (if possible) to avoid the abortion of the module. If threads have been suspended, a warning will be output after processing, since a higher 'points_in_memory' value could lead to a better processing. Modules that benefit from the new functionality are Module AddInfo, Module Normals and Module PointStats
- opalsDirectGeoref now stops with an exception if GPSTime information is missing in the input file
- support non-alphanumeric characters in string attribute values specified in Generic filter strings.
- Module Grid :
- Multi-thread support for the Delaunay triangulation interpolation added
- Weight function IDW1/IDW2/IDM:n: Implementation changed to: 1/(1+(ad)^n), with a=shape factor, d=2D distance, n...power (IDW1: n=1, IDW2: n=2...). For more information please refer to the parameter description.
Version 2.1.6
Preamble
The OPALS team is happy to announce the first Linux version of OPALS. From the current version 2.1.6 on, binary distributions for both Linux and MS Windows can be downloaded from the OPALS website. Please note that some limitations for the different plattforms exist. The Linux distribution was tested on several platforms (e.g., Ubuntu 14.04, Ubuntu 16.04). For more information about installing and running OPALS under Linux can be found here. Your feedback is highly appreciated.
New modules
- Module Snellius :
- Performs range and refraction corrections of raw laser bathymetry measurements according to Snell's law.
- Module Vectorize :
- Performs raster-to-vector conversion and exports polyline geometries.
- Module Translate :
- Performs format conversion for vector data files with additional read support of GDAL rasters.
- Module Section :
- Extracts sections of user defined width/length along a specified reference axis from a point cloud (ODM).
New scripts
- forTopHeight.py script : Script for calculating the top height calculated from the 100 highest trees in a (1 ha) area
- proxy class for packages.python.forTopHeight
- Python script forDSM :
- proxy class for packages.python.forDSM
- Python script forDelineation :
- Derives forest boundaries from topographic models (DTM, DSM, ...) based on a specific forest definition.
- Python script forBiomass :
- forBiomass calculates and validates parameters that can be used for estimating forest biomass.
- Python script preCalcFootprint :
- proxy class for packages.python.preCalcFootprint
New features
- The OPALS distribution now also contains the command line executables and python scripts of the GDAL library (file path:
$OPALS_ROOT/addons/gdalUtils) - Module Cell : Multiple input ODM files support added (e.g. to compute overall point density of an entire flight block in a single program call)
- Module Grid : Multiple input ODM files support added (e.g. to compute the DEM of an entire flight block in a single program call)
- support Python 3.5, see Configuring an external Python installation
- Depending on their type and settings, Filters may now be able to tell if none of the data within in a certain bounding box, having certain attribute statistics would pass through. This may speed up processing considerably, because the OPALS Datamanager skips such data tiles entirely. Modules that profit from this new feature are: Module AddInfo, Module Cell, Module EchoRatio, Module Grid, Module Histo, Module Normals, Module PointStats, Module RadioCal, Module RobFilter, Module Snellius
- Filter types and their combination :
- Class: classifications may be specified by non-negative numbers in addition to textual descriptors.
- New filter Pass which allows for explicitly specifying that no filter shall be used.
- new statistical operator
countUnique - Generic filter leaves, operators, and functions :
- new syntax rule Self to make the geometry to be processed also accessible if different processing and neighbor filters are in use.
- User-defined attribute identifiers may be quoted. If quoted, they may contain white space.
- Logical filter operators now have aliases: !, &&, ||.
- opals Python modules may be initialized with parameter values.
- additionally export module parameters as Python properties.
- Module short examples introduced, to be shown in the offline documentation (see e.g. Grid Short Examples), on the usage screen using the new commandline-option -examples, and printed to the Python console using the new method examples of opals::IModuleBase's equivalent on the Python side ("opals.Base.Base").
- New common parameter deleteEmptyOutFile added (default value = false). Module Grid, Module Cell, Module Import and Module Export uniformly consider this parameter and delete (or not) empty output files. Note that this changes the original behaviour of always deleting empty files within Module Grid.
- Module AddInfo and Module EchoRatio now support two filters. The first selects the points for which attribute calculation is carried out (processing filter) and the second filter defines which points are used for the spatial query (neighbourhood filter)
- The OPALS documentation now features use case examples including a collection of typical command sequences.
Bug fixes
- Module Import : In case of multiple input files and a single trajectory file the trajectory information was not attached
- remove control characters from log messages before storing them in the XML file.
- OPALS Generic Format : consider to-internal conversion also for binary files.
- Assignments in Generic Filters now make sure that if assignments fail, geometries including their attributes and attribute statistics remain unchanged.
Improvements
- Updated OPALS Python AddOns to NumPy 1.11.1, SciPy 0.17.1, and matplotlib 1.5.2.
- global configuration (opals.cfg):
- Decimal precision for ESRI ASCII grid output increased (now using 8 digits)
- The output transformation parameters of Module ICP are now saved automatically to an xml parameter file by setting the 'outParamFile" option
- Generic filter leaves, operators, and functions : syntax rule NeighborBinary (functions Dist2D, etc.): provide proper error message upon parsing failure.
- Module Histo : Multi attribute support added. Hence, histogram and statistics for multiple attributes can be derived within one run.
- LAS Extra Bytes: support reading and writing documented extra bytes for all LAS versions.
- Module AddInfo logs the first few exceptions that its calculator has thrown.
- Module ICP
- now accepts the point cloud data in arbitrary data formats (las, (binary) xyz, shp, ...)
- now uses the new ModuleTranslate for pre-ICP preparation and post-ICP transformation of the point clouds
- Module StatFilter now supports:
- user defined output grid limits via parameter limit
- resampling of the output grid via parameter gridSize (cf. parameter type: opals::GridResolution )
- Module EchoRatio and ModuleAddInfo now support two filters: (1) processing filter, (2) neighbourhood filter.
- Integration of PyCharm as alternative high-end Python IDE available for Windows and Linux (details can be found here)
Version 2.1.5
- Contents:
New modules
- Module Rasterize :
- Performs vector-to-raster conversion for all types of simple feature geometries (points, lines, polygons).
New features
- Wild card support: Modules capable of dealing with multiple input datasets (i.e. Vector<Path>) now support wild cards (*,?). The following modules support wild card input: Module Import , Module Export , Module Algebra , Module AddInfo, Module Histo and Module ICP
- New OPALS Common Parameter lineBufferedScreenLog. If true, then the screen log stream (stdout) is flushed each time a log message has been emitted. This is useful for watching progress when stdout has been redirected to a file.
- ModuleGrid and Module Cell : Output of multiple features in a single multi-band raster file enabled (parameter multiband)
- Module Info : The module now also reports statistics about grid/raster data sets.
Bug fixes
- Module Histo : In case of multiple input grids an exception was thrown.
- Module Cell : Features
nminandnmaxwere not calculated correctly, butminandmaxwas erroneously returned instead. - Installation Guide : Example code for checking the integrity of the OPALS installation corrected
- Comparative Expressions of Generic filter : before comparing attributes of type float with real number constants, constants are down-casted to float. This makes such comparisons behave as expected, even if precision is lost during the conversion from double to float - which is the case for e.g. 0.1.
Improvements
- Module Export :
- Preserve file and layer information when exporting ODM(s) into a new ODM
- Automatic tile size adaptation (as in opalsImport) when exporting into a new ODM
- Extending the internal Python installation with Arbitrary Python Packages has been greatly simplified by usage of the Python package pip, which is shipped with Python since version 2.7.9.
- Region filter: throw an error if passed file contains no polygons
- Provide a more helpful error message if output parameters are specified on the command-line.
- Module Import :
- Automatic recognition of GDAL ASCII formats (eg. Arc/Info ASCII Grid)
- Support of GDAL driver name as iFormat parameter
Version 2.1.4
- Contents:
New modules
- Module GridFeature :
- Derives feature models (slope, curvature, roughness, etc.) from grid models based on the local grid neighbourhood defined by a kernel.
New features
- A full featured C++-API and python binding of the Datamanager added (see The C++ OPALS Datamanager Library and the examples section)
- Variable support for configuration files introduced (see Variable Support in Configuration Files)
- Option type opals::MultiGridLimit: Rounding of limit coordinates is now supported not only for explicitly defined limits but also when specified via: union|intersect|dataset:i
- Flexibility of the trajectory import increased (relevant for Module Import and Module DirectGeoref)
- Automatic detection and support of the format x,y,z,t,roll,pitch,yaw and t,x,y,z,roll,pitch,yaw (in binary and ascii mode)
- Parameter tFormat added allow specifying a generic OPALS format definition
- Module Import : So far the data import with trajectory add the beam vector (in the world coordinate system) as attribute to each point. The new parameter storeBeamInfo adds the possibility to append the range, the scan angle and the beam vector in the sensor coordinate system to the data.
- The OPALS format definition support transformation of values during import and export (e.g. for changing of units)
- Module Grid :
- Parameter weightFunc added allowing the specification of individual point weights for grid interpolation.
- Documentation updated
- GDAL/OGR library updated to version 1.10.1. Support of the geometry library GEOS (v 3.4.2) was added allowing to manipulate simple feature geometries via the python bindings of GDAL/OGR (eg. Buffer, Intersect, ....).
- Region Filter supports reading polygons directly from file
- Module Histo : User defined probabilities for quantile calculation can now be specified via probabilities as a vector of double values (0. <= p <= 1.). Please note probabilites are no longer expressed as percentiles (integer from 0-100%) but as floating point values between 0 and 1.
- Module PointStats : Features minority and majority have been added. An additional reference model zeroPlane introduced
- Module StatFilter : It is now possible to specify a bin width for the features minority and majority (So far the bin width was fixed to 1)
Bug fixes
- Module Algebra , Module StatFilter , Module Convolution, Module Openness : calculation of raster min-max-values corrected
- Classification was not read/written correctly from LAS files if ClassificationFlags were set.
- Classification > 31 was truncated to 5 bits upon read/write from/to LAS files with Point Data Record Format 6-10.
- Module Info : The given point density estimation was the inverse of the actual point density
- In case the an ODM was enriched with a big number of new attributes the file got corrupted
- Module Export : If an ODM contained polygons the export using a limit or a region filter didn't not work correctly
- Module Histo : Incorrect median values were calculated in case of data samples featuring unique values
Improvements
- Generic Filter's assignment operator: execute assignment for all data, regardless of the right-hand-side's validity; let all data pass through;
- Generic Filter's assignment operator: use the same data type names as in Opals Format Definitions
- Generic Filter's statistical operations: support
count(n), resulting in the number of supplied neighbor geometries, irrespective of their coordinates and attributes. - Updated the Python interpreter that comes with opals to Python 2.7.8. Updated OPALS Python AddOns to matplotlib 1.4.1, NumPy 1.9.0, SciPy 0.14.0
- Raster processing modules (e.g. Module Algebra , Module Histo , Module AddInfo ...): NaN values are now considered and excluded from processing (i.e. they are treated as nodata pixels)
- Progress bars: The appearance of raster processing progress bars (e.g. Module Algebra , Module StatFilter , etc.) has been homogenized to conform with other OPALS modules (e.g. Module Grid ). Furthermore, progress bars can now be consequently suppressed by setting an appropriate log level (warning, error, none)
Version 2.1.3
- Contents:
New features
- Module AddInfo : Nearest neighbour points can now be considered for attribute calculation. By analogy to raster layers, the nearest neighbour points are accessed via n[i] in the attribute formula. For more details please refer to the documentation.
- Module PointStats : The module now supports 2D (infinite cylinder), 2.5D (finite cylinder) and 3D (sphere) point selection queries.
- Module Grid :
- New Delaunay Triangulation interpolator added
- New curvature grid features (kmin, kmax, kmean, kgauss) added (Moving Paraboloid only)
- new statistical features (opals::StatFeature): "sum"
- Available in Module Module StatFilter, Module PointStats and opalsCell .
- Generic filters support neighbour geometries. All statistical operators hitherto available for rasters can now also be applied to neighbour coordinates/attributes. Moreover, neighbour coordinates/attributes can be queried separately, and neighbours can be used in binary neighbour functions.
- Module Overlap : Shape file output of the area covered by all strips (-borderFile) and the strip overlap boundaries (-overlapFile) added.
- Base: default overall vector format (oformat_vector) changed to ESRI shape (.shp)
- opalsAlgebra : Major performance improvement especially when using opalsAlgebra for mosaicing purposes. In case, that input rasters are not referenced directly via their respective indices (e.g. r[10]) only those rasters are considered which effectively contain data at a certain position. This way not the entire stack of input rasters ones but only the relevant rasters is processed. The decision to omit void parts of input rasters is made automatically based on the formula string but can explicitly be controlled via the parameter skipVoidAreas.
Bug fixes
- Module Contouring : Reported number of polygons corrected
- Generic filters: Mean(r) and MeanAbs(r) did not calculate the correct values but returned 0.0 in any case instead.
- Module Grid : Moving planes interpolator: Grid points were accepted as valid for a minimum number of 3 control points (i.e., well defined tilted plane system). This resulted in potentially infinite sigmaZ and sigma0 values causing problems in follow up applications (e.g. opalsHisto). The original behaviour requiring at least 4 control points for a valid movingPlanes grid points was re-established.
Improvements
- Module Bounds : memory consumption has been considerably reduced
- Module Import : robustness increased to avoid crashes in case of totally wrong 2d coordinates
Version 2.1.2.SP1
- Contents:
Bug fixes
- If OPALS modules that change or add ODM attributes (opalsNormals, opalsAddInfo, etc.) were used in conjunction with filters, crashes often occurred or at least arbitrary attribute information was destroyed (without filters the modules are working fine). Hence, it is highly recommended to update from version 2.1.2 to 2.1.2.SP1
- In certain cases modules failed to run with an 'Access denied' error message, in case upper level directories of the input data did not have read access to the current user (the error occurred in a path conversion function resolving relative paths).
Version 2.1.2
- Contents:
New modules
- Module PointStats :
- Derives and stores statistical parameters describing the local distribution of a point attribute for each point of an ODM.
New features
- Using options -iFormat and -oFormat, paths to OPALS Format Definition files can be specified. If these paths consist of file names only, then in addition to the current working directory, they are now also searched in
$OPALS_ROOT/addons/formatdef - The same accounts for Module ZColor, option -palFile, and
$OPALS_ROOT/addons/pal, resp. - Attributes can now be specified case-insensitive in any situations within OPALS (the exception of case-sensitivity for user-defined attribute in generic filters was removed)
- relevant for Python-/DLL-bindings:
- ODM files that have been opened with write access cannot be opened by other module instances at the same time.
- opals._Base.run() (Python) or opals::IModuleBase::run() (C++), resp., has been augmented with the optional argument
reset, which defaults tofalse. Iftrue, then that module instance calls opals::IModuleBase::reset() on its own right after the module run, resulting in all options being reset, and any open (file-) handles being closed.
- new Filter PointSeq2Echo that assigns the attributes EchoNumber and NrOfEchos to points based on their time stamp.
- Filter Remove now optionally allows for removing specific attributes instead of all attributes.
- OPALS DataManager (ODM) file format was adapted to detect corrupt ODM files. The changes are upwards compatible, which means that old ODMs are implicitly converted to the new format if opened with write access. Old OPALS versions (2.1.1 or older), however, can not access ODM files in the new format.
- Module Grid and Module Cell : Please note, that the estimation rule for output file names has been changed slightly. Now, the specified attribute, or the default "z" attribute, are consequently appended to the base file name (derived from the input file name). The new output file name construction rule for both modules is: Base + "_" + Attribute + "_" + Feature + Extension
- Scientific thesis license: The terms and conditions for obtaining a free OPALS license for the duration of a Bachelor / Master / PhD thesis have been defined. For further information see: Frequently asked questions
Bug fixes
- Module Convolution : extrapolation of pixel values at the border of the raster dataset (i.e. -edgeHandling trend ) corrected
- Module Morph : circular kernels were erroneously considered as diamonds
- Module AddInfo :
- raster datasets were not closed correctly, resulting in a Python script crash when using a single AddInfo module instance multiple times.
- using multiple raster sources in a single AddInfo run yielded an error (exception occurred: Raster band(s) not properly initialized..)
- Module Import : in case of import with trajectory, points with gpstime equal the lowest trajectory entry were considered to be outside the trajectory time range.
- Module Algebra : with line oriented input formats the internal cache size for raster values was set too small resulting in bad performance.
- Module Shade :
- using the nodata value for heights internally also for slopes erroneously led to nodata (background) pixel values within shadings (typically only with inconvenient nodata values such as 0) in rare cases.
- output format was always GTiff regardless of the specified format.
- Module ZColor : output format was always GTiff regardless of the specified format.
- Module Histo : raster datasets: specification of a certain raster band (number) via the -attribute parameter enabled (already stated in the help text of earlier versions but not yet functional)
- All modules writing grids/rasters in SCOP data format:
- All nodata values were written to the output file resulting in unnecessary big files.
- Determination of GeoTransform has been changed from dynamic extents to static extents.
- Module Export : in case of many input files memory problems arose.
Version 2.1.1
- Contents:
New features
- LASLib is now provided as DLL (dynamic link library).
- OPALS Python AddOns now come with full TCL support - thus, enabling graphics output with matplotlib.
Bug fixes
- Module Import :
- The import of ODM files failed when importing with trajectory information
- half-pixel displacement of GDAL rasters corrected
- Module Normals :
- Storage order of eigenvalues were handled differently depending on the estimation method (now always descending: lambda 1 > lambda 2 > lambda 3)
- Module AddInfo , Module Algebra ... (Nearest neighbour resampling)
- determination of nearest neighbour grid point index corrected
- behaviour at pixel borders adapted to correspond to Module Cell (i.e., left and upper cell border included, right/lower border excluded)
- Documentation: broken links corrected
- Generic filters: Attribute "Reflectance" was not evaluated correctly
Version 2.1.0
- Contents:
New modules
- Module Info :
- Extracts and reports header information of a vector or raster file (ODM, GDAL).
New features
- OPALS shell:
- OPALS now provides a command shell customized for immediate use of OPALS after unzipping the distribution archive (no additional environment settings necessary). Furthermore, the OPALS shell is set up for direct use with the built-in portable Python (2.7) version and provides additional command aliases (import -> opalsImport, grid -> opalsGrid...). Please refer to the Installation Guide for further details.
- LAS IO :
- user definable coordinate resolution via OPALS Format Definition (OFD) XML File
- extra byte attributes: offset and scaling supported for better compression (via OFD Files)
- OPALS packages
- Package scripts have become fully parameterized: instead of values hard-coded in the script code, the scripts now use additional command-line options:
- -s,–subScripts
- -x,–skipIfExists
- -m,–mosaic
- -k,–mask
- Package script configuration files: each script by default now uses only 1 configuration file where the parameters of all subscripts are specified.
- Package scripts have become fully parameterized: instead of values hard-coded in the script code, the scripts now use additional command-line options:
- data type opals::CellFeature renamed to opals::StatFeature
- new statistical features (opals::StatFeature): "entropy", "minority", "majority", "quantile" and "range":
- Entropy is calculated based on a histogram of the data samples as :

- Range means the difference between maximum and minimum
- Available in Module Module StatFilter and opalsCell .
- Entropy is calculated based on a histogram of the data samples as :
- Module Import :
- reading raster data (in GDAL readable format) into the ODM
- Module Export :
- export of multiple ODM files into a single vector data file
- Module AddInfo :
- implementation of full functionality
- new parameter "attribute" for arbitrary attribute assignments (generic filter syntax)
- new parameter "resampling" [nearestNeighbour|bilinear]
- Module Histo :
- The general filter syntax is now also supported for grid/raster datasets. Therefore, grid masks are no longer supported.
- Module Cell :
- support for opals::StatFeature "entropy", "minority", "majority", "quantile" and "range" added
- Module StatFilter :
- support for opals::StatFeature "range" and "pdens" added
- Module Algebra :
- formulas can now additionally be specified in generic filter syntax (better performance).
- major performance improvement by directly reading input grid pixels if they are aligned to the output grid (instead of re-sampling the input grids)
- Module GeorefApprox :
- new parameter "convThreshold" to specify the convergence threshold for the strip adjustment
- parameter "sigmaShift" now allow negative values indicating artificial Zero-observations of the shifts of all strips
- Generic filter :
- support statistical functions (e.g. min, max, sum, mean, median, ..) for raster datasets. More info.
- provide a generic way of setting attributes as invalid by the respective "invalid" keyword (e.g. _myIntensity=invalid).
- Module Convolution : now returns a nodata pixel if all kernel pixels are invalid (i.e. no data)
Bug fixes
- General: ODM attributes with predefined semantics starting with "X","Y" or "Z" have not been identified correctly (eg. "YawAngle".
- Module StatFilter : "minority", "majority" and "median" calculation corrected
- Module Export : progress counter in conjunction with export filters corrected
- read/read-write access validation of ODM files corrected.
Version 2.0.0
- Contents:
New OPALS Data Manager (ODM)
With OPALS 2.0.0 a new OPALS Data Manager (ODM) structure is introduced. The main features are:
- I/O Performance improvement (2-3x faster I/O)
- Joining the previously two ODM files (.dat/.idx) into a single file (.odm)
- Attribute statistics (list of all attributes with additional summary for each attribute: min, max, mean, std.dev.)
Please note, that the new OPALS Data Manager files are incompatible to prior versions! To convert data (coordinates and attributes) please use Module Export v. 1.1.0 (arbitrary binary) to export and Module Import 2.0.0 to re-import the data in the new ODM structure.
LAS 1.4 support
OPALS 2.0.0 supports the latest LAS version 1.4. With LAS 1.4 a standardized way of describing arbitrary point attributes was introduced via the "Extra Bytes" Variable Length Record (VLR). That way, it is now possible to export ODM contents (points and attributes) to LAS as well as to import the entire contents of LAS 1.4 files (potentially containing Extra Bytes) into an ODM. Furthermore, the LAZ file format (losslessly compressed twin of LAS) is supported. Please refer to the LAS Format Definition documentation for further details.
Embedded Python installation
Starting from 2.0.0 OPALS distributions contain a portable version of Python 2.7. This has become necessary as some OPALS components (framework, Module Algebra) internally use the Python Interpreter. Up to now, it was possible to run OPALS stand alone (i.e without Python installation using the Python shared library delivered with OPALS) with only a few limitations. However, to exploit the full functionality of OPALS a full Python installation is required.
The portable version of Python 2.7 is part of the OPALS distribution (self extracting exe) and is located in the directory $OPALS_ROOT/opals. Beyond the basic Python installation, additional Python packages (numpy, scipy, GDAL/OGR, ...) can be downloaded from the OPALS web site. Further more, to ease the development of OPALS Python scripts, the OPALS distribution also contains the open source Python development environment PyScripter. For more details, please refer to the installation manual.
Extended filter features
The filter concept for selecting and manipulating input data was substantially extended and supports assignment of attribute values as well as the definition of new user defined attributes. More details can be found here.
OPALS documentation with search capabilities
The OPALS documentation is now available in HTML and Windows Help File (.chm) format. The latter provides the contents in a tree structure, features an automatic index and enables full text search within the documentation pages. To run the Windows Help version of the OPALS documentation simply double-click on opals.chm (within the documentation folder).
New modules
- Module TIN :
- Creates a TIN surface from ODM vector data based on a 2D constrained Delaunay triangulation.
Bug fixes
- Module Histo :
- min/max values in case of a user defined
sampleRangecorrected.
- min/max values in case of a user defined
- Module Import :
- Corrupt ODM files when importing data with user defined filters corrected
- Module ZColor :
- avoid crash in case of
scaleByRange min==max
- avoid crash in case of
New features
- Logging of ODM statistics (coordinates and attributes) was unified
- LAS IO :
- OPALS Format Definitions (OFD) have been extended to allow import/export of LAS 1.4 files with user defined attributes stored in LAS Extra Byte Records. The LAS OFD (xml file) controls which attributes to import/export from/to LAS.
- Module Import :
- New parameter
-tileSizeallowing the specification of a user defined ODM tile size
- New parameter
- Module Export :
- New parameter
-limitsallowing to export data within a user defined window.
- New parameter
- Module Grid :
- New parameter
-tileSize(user defined computing unit size).
- New parameter
- Module Normals :
- New parameter
selMode, controls the nearest neighbour point selection (nearest/quadrant/octant)
- New parameter
- Module Shade :
- Type of parameter
inFilechanged tovector<opals::Path>and - New parameter
feature(data type:vector<opals::GridFeature>. - General remark: opalsShade now accepts either one height grid or two slope grids (normalx/normaly or slope/exposition) as input. Calculating hill shadings from slope data sources potentially reduces necessary on-the-fly re-sampling operations resulting sharper images. More details.
- Type of parameter
- Module Overlap :
- Check for doubly specified file names added
- update to GDAL 1.8.1:
- supporting XYZ ASCII export of grid/raster data.
Version 1.1.0
- Contents:
New installation structure
The file structure of the OPALS installation was significantly changed. All binary files (*.exe, *.pyd, *.dll) are now located in a single directory ($OPALS_ROOT/opals/) in order to ensure that the correct dlls are loaded. The main code of an OPALS module is now contained in the respective DLL only. The command line executables and the python modules internally use the respective DLL, thus, the size of both, *.exe and *.pyd was decreased significantly.
Changes in Python bindings
The OPALS Python bindings have been revised fundamentally. A global namespace "opals" was introduced. As a consequence:
- the statement: "import opals" is necessary to access the OPALS modules
- the common "opals" prefix was removed (old: opalsImport –> new opals.Import). All OPALS specific data types including all common types (e.g. LogLevel) are now contained in the global opals scope and no longer at module level. Please refer to the documentation for further details.
64-bit version
From version 1.1.0 on, OPALS is available as a 64-bit application. For the time being, both, 32- and 64bit versions are provided. However, the 32 bit versions will only be maintained for a limited period of time (approx. end 2012). Please keep in mind, that when using the Python bindings of OPALS mixing of the bit platforms is not allowed. In other words, a 64-bit OPALS version strictly requires a 64-bit Python version.
New modules
- Module AddInfo : The aim of Module AddInfo is to derive additional ODM attributes by algebraic combination of existing attributes. Optionally, grid models can be incorporated enabling to define complex formulae. !!! Caution !!! Please note that, at the moment, the module only supports the calculation of normalized heights (Input: ALS points (-inFile) and DTM model (-gridFile)). Since this operation is of crucial importance for a series of applications, Module AddInfo was included in the release although the module has not yet reached its final state.
- Module Fullwave : The aim of the module is the decomposition of the full waveform signal. At the moment, Module Fullwave only supports Riegl SDF files from LMS-Q560 scanners as input. The output (x,y,z: in scanner own coordinate system + full waveform attributes: amplitude, echo width, echo number, nr. of echoes) is written either in the internal MB/SOCS or in Riegl SDC format, which can be further processed with Module DirectGeoref to obtain a georeferenced point cloud with additional attributes in the project coordinate system.
- Module Openness : The aim of Module Openness is to provide a raster map of local view sheds (i.e. openness) based on a grid DTM.
- Module Simplify : The aim of Module Simplify is to professionally thin out regular or hybrid grid models based on a user defined maximum height tolerance and maximum point distance resulting in an approximating TIN surface.
Bug fixes
- Module Cell :
- dataset statistics (min, max, mean, std) corrected
- Module Fullwave :
- check for insufficient write permissions
- Module Histo :
- min-max range of attribute data considered correctly
- Module Simplify :
- Mirrored output of grid posts corrected
- Module ZColor :
- erroneous class counters corrected
- memory leak corrected
New features
- Module Algebra :
- processing of very large grids enabled
- Module Cell :
- x and y coordinates can be used as attribute
- Module Import / Module Export :
- now supports arbitrary binary format (c.f. OPALS Generic Format documentation for further details)
- Module Export :
- support of a specific 'invalid-value-marker' added ('min', 'max', 'NaN', 'Inf')
- Module Grid :
- new interpolation method: movingParaboloid (2nd order polynomial)
- experimental movingRobustPlane interpolation removed (will come in opalsRobustFilter)
- movingPlanes interpolation: check for extrapolation (in vertical direction) added
- additional measures for empty grids (grid file trunk deleted, appropriate error message)
- Module Histo :
- new parameter -limit (pre-selection of data)
- computation of additional (robust) parameter: sigma_mad (median of absolute differences)
- overflow/underflow bins are now drawn in red
- creation of a scalable vector graphics plot file can now be suppressed with: -plotfile off
- multiple inputs (grids/ODM files) enabled
- Module Import :
- extended logging information (eg. point index statistics)
- single input format for multiple input files enabled
- Module LSM :
- new parameter: -robFactor (user defined factor for robust parameter estimation)
- Module Normals :
- new parameter: -direction (allows for specifying in which direction the normals shall point)
- new interpolation method: Fast Minimum Covariance Determination (FMCD, very robust estimator)
- Module Overlap :
- new parameter: -minArea (allows for relative and absolute overlap specification)
- Module GeorefApprox :
- now provides a -maxIter parameter allowing control over the number of iterations
- Module Shade :
- estimation of local slope improved yielding more detailed (less smoothed) hill shadings.
- parameter -resampling removed
- Module Simplify :
- Generic Panorama TIN Format added
- Module ZColor :
- parameter '-nClasses 0' allows using a palette with its natural number of entries
Remarks
Please note that ODM files produced with version 1.0.2 are not compatible with version 1.1.0. To maintain the processed data (especially the point attributes), export the ODM with version 1.0.2 using a user defined xml format definition (c.f. OPALS Generic Format for details) and re-import the resulting file with version 1.1.0. We apologize for the inconvenience.
