Release notes

These are the stable releases of Pix4Dengine SDK. They follow semantic versioning.

Version 1.4.1

What’s new

  • Improved radiometric processing of data taken with MicaSense cameras.
  • Added more camera models to the camera database.

Version 1.4.0

What’s new

  • Added support for radiometric correction of DJI P4 Multispectral data.
  • Added single token login functionality (all necessary login information contained in one token).
  • Improved performance of point cloud densfication algorithm, particularly for large data sets.
  • Added option to set the DSM generation method.
  • Various documentation improvements.

API changes

  • Added option pix4dengine.algo.ortho.OrthoAlgoOption.DSM_METHOD to set raster DSM creation method. The valid options are "InverseDistanceWeighting" (default) and "Triangulation".
  • The token-based login system has been modified to work with a single, self-contained token. Note: this is a backwards incompatible change, introduced to this version exceptionally as a security and usability improvement (see Compatibility Issues below).
    • gen_session_token generates a self-contained token from the required login information (credentials, license key).
    • login_with_token accepts a single, self-contained token, as generated by gen_session_token.

Compatibility issues

The token based login has been modified to deal with a single, self-contained token, and hide implementation details of the authentication method from the user. This change, motivaded by security and usability considerations, results in the following backwards-incompatible changes:

  • pix4dengine.get_auth_token has been replaced by the more generic gen_session_token, which generates a self-contained token from the required login information (credentials, license key).
  • login_with_token has been modified to accept a single, self-contained token, as generated by gen_session_token.

Bug fixes

  • Fixed software version number in quality report. Pix4Dengine SDK version is now reported.
  • Fixed issue where certain image band names caused processing to fail during index calculation.

Version 1.3.0

What’s new

  • Automatic GCP detection with automarking, an external Pix4D Python module (more information in the automarking documentation).
  • Added re-optimization algorithm (more information here).
  • Standard photogrammetry algorithms are available as stand-alone callable objects and are grouped with the options used to configure them in dedicated modules (more information here).
  • Callable objects can be passed in the list of algorithms used to initialize pipelines.
  • A revised pipeline API that enforces coherency between the algorithms included in the pipeline with respect to the input data (projects) they use and allows executing the same pipeline for different sets of input data.
  • Support for checkpoints (more information here).
  • Enhanced point cloud quality through noise reduction in the point cloud densification algorithm.
  • Various documentation improvements.

API changes

  • Added pix4dengine.algo module for standard photogrammetry algorithms and their configuration options.
  • pix4dengine.options module API:
    • AlgoOption.CameraCalibration.REMATCH_STRATEGY is removed as broken in favour of using solely AlgoOption.CameraCalibration.REMATCH;
    • AlgoOption.CameraCalibration is deprecated in favour of pix4dengine.algo.calib.AlgoOption;
    • AlgoOption.Densification is deprecated in favour of pix4dengine.algo.dense.AlgoOption;
    • AlgoOption.Mesh is deprecated in favour of pix4dengine.algo.mesh.AlgoOption;
    • AlgoOption.Ortho is deprecated in favour of pix4dengine.algo.ortho.OrthoAlgoOption;
    • AlgoOption.Index is deprecated in favour of pix4dengine.algo.ortho.IndexAlgoOption;
    • ExportOption.CameraCalibration is deprecated in favour of pix4dengine.algo.calib.ExportOption;
    • ExportOption.Densification is deprecated in favour of pix4dengine.algo.dense.ExportOption;
    • ExportOption.Mesh is deprecated in favour of pix4dengine.algo.mesh.ExportOption;
    • ExportOption.Ortho is deprecated in favour of pix4dengine.algo.ortho.OrthoExportOption;
    • ExportOption.Index is deprecated in favour of pix4dengine.algo.ortho.IndexExportOption;
    • StandardExport.Report is deprecated in favour of pix4dengine.exports.ReportFormat;
    • StandardExport.CameraCalibration is deprecated in favour of pix4dengine.exports.CameraCalibParam.
  • pix4dengine.pipeline module API:
    • Argument project in Pipeline() is made optional and deprecated;
    • Argument project is added to Pipeline.run();
    • Argument project in pipeline_from_template() is deprecated;
    • Argument project in EngineTask() is made optional and deprecated;
    • Argument project is added to EngineTask.run().
  • Argument project is added to pix4dengine.task.Task.run().

Compatibility issues

  • New requirements on structure of scripts that use Pix4Dengine SDK (more information here).
  • The broken REMATCH_STRATEGY calibration option is removed in favour of using solely the REMATCH option.

Bug fixes

  • Fixed an issue with Python interpreter termination during memory-intensive processing.
  • Fixed a memory leak that affected long-running processing sessions.
  • The automatic image re-matching strategy applied through the REMATCH_STRATEGY calibration option was supposed to disable re-matching for data sets with more than 500 images but failed to do so. To simplify the logic, the REMATCH_STRATEGY option is removed in favour of explicit re-matching configuration through the REMATCH option.
  • Fixed the issue with inconsistent default DTM export configuration: the DTM_TIFF_MERGED option was enabled by default while the DTM_TIFF option was disabled. Both options are disabled by default now.
  • Fixed the issue with unreadable mesh texture files when a large number of mesh triangles (greater than the default value) was configured (the MAX_TRIANGLES mesh option).
  • Fixed the issue with processing area calculation when input image names contained spaces.
  • Fixed the issue with blurry and incomplete orthomosaic and incomplete DSM when a custom coordinate system is used.

Version 1.2.0

What’s new

  • User-defined camera configurations can now be set on project creation (more information here).
  • Added support for LOD mesh exports in SLPK and OSGB format.
  • Added support for token-based login (more information here and here).
  • Various documentation improvements.

API changes

  • Added optional parameter camera_config to pix4dengine.create_project. This can be used to set a camera configuration on the project.
  • Added options ExportOption.Mesh.LOD_SLPK and ExportOption.Mesh.LOD_OSGB to generate SLPK and PSGB mesh LOD exports respectively.
  • Added options AlgoOption.Mesh.LOD_NUM_LEVELS and AlgoOption.Mesh.LOD_TEXTURE_QUALITY to set number of LOD levels and mesh texture quality respectively.
  • Added pix4dengine.get_auth_token and pix4dengine.login_with_token functions to generate an authorization token and use it to login respectively.

Compatibility issues

  • The redundant option AlgoOption.Mesh.GEN_3D_TEXT has been removed.

Bug fixes

  • Login without specifying a license results in an error when the user has more than one valid license. The error message lists the valid license keys, so the user can decide which one to use. Previously, one of the licenses was selected silently.
  • The option AlgoOption.Mesh.GEN_3D_TEXT has been removed. It had no effect.

Version 1.1.1

What’s new

  • Added CUDA support (more information here).
  • Added support for creating pipelines from pre-defined templates (more information here).
  • Added support for specifying image geo-tags without need of an external geo-location file (more infomation here).
  • Added support for user-defined cameras (more information here).
  • Various documentation improvements.

API changes

  • Added pix4dengine.project.Project.logfile_path property with path of processing core log file.
  • Added pix4dengine.pipeline.pipeline_from_template() function.
  • Added pix4dengine.geotag module.
    • Class pix4dengine.geotag.Geotag. This can be used in pix4dengine.create_project() to geo-reference images in a project.
    • Classes ExternalGeolocationFormat and pix4dengine.geotag.ExternalGeolocation. These supersede the deprecated pix4dengine.constants.ExternalGeolocationFormat and pix4dengine.constants.ExternalGeolocation respectively.
  • Added pix4dengine.camera module for camera and camera DB access and manipulation.
  • pix4dengine.options module API:
    • New options AlgoOption.Ortho.MOSAIC_RELATIVE_RESOLUTION and AlgoOption.Ortho.MOSAIC_ABSOLUTE_RESOLUTION (added in 1.0.0 but omitted from the release notes).

Compatibility issues

  • The field pix4dengine.utils.gcp.Mark.scale has been deprecated and removed from examples and documentation.
  • pix4dengine.constants.ExternalGeolocationFormat and pix4dengine.constants.ExternalGeolocation have been deprecated. Use pix4dengine.geotag.ExternalGeolocationFormat and pix4dengine.geotag.ExternalGeolocation respectively.

Bug fixes

  • Fix geo-referencing of LAS and LAZ point clouds.
  • Fix unintended creation of mesh export files when none of the pic4dengine.options.ExportOption.Mesh options are set.
  • Fix issue which impeded obtaining output names of spit LAS files.
  • Fix issue where transparent otrho mosaic TIFF output was generated but not listed by pix4dengine.exports.get_output().

Version 1.0.0

What’s new

  • Windows support is added.
  • Project names can contain all unicode characters except those forbidden for file names by any of POSIX and Win32.
  • Projects with images in multiple directories can be created.
  • Images directories can be searched for images recursively at project creation.
  • Users holding both an ENGINE-SERVER and an ENGINE-CLOUD license are now allowed to login by specifying a license key when calling pix4dengine.login_seat().
  • Added support for radiometric indices with pix4dengine.options.AlgoOption.Index.INDICES.
  • Extended multispectral processing support with additional algorithmic and export options.
  • Additions, removals, and other changes to algorithmic options that improve coherency of the configuration given to the photogrammetry pipeline. Changes incompatible with the previous release are listed in the “API changes” section.
  • A new concept of processing templates. Templates are now defined in terms of Engine SDK options. They are applied to processing pipelines rather than projects. XML templates (.tmpl files) are not supported any more.
  • A revised coordsys API. The changes incompatible with the previous release are listed in the “API changes” section.

API changes

  • pix4dengine.create_project() function:
    • Argument images_dir is renamed to image_dirs. You have to adapt only if you use the keyword argument;
    • Argument processing_proxy is removed;
    • Argument template is removed;
    • Argument callbacks is replaced by on_start and on_success;
    • Argument recursive_input_search is added.
  • The pix4dengine.processingproxy module is removed:
    • The ProcessingProxy class is removed and an object of it cannot be passed to create_project(), login_seat(), logout_seat(), Pipeline() and EngineTask() anymore;
    • The Pipeline and the EngineTask classes moved to the pix4dengine.pipeline module.
  • pix4dengine.constants.processing.ProcessingTemplates is removed. The templates it defined are superseded by those in pix4dengine.pipeline.templates.
  • pix4dengine.utils.processingproxy.Callbacks and pix4dengine.task.Task.Callbacks are removed. Functions taking a Callbacks object have to be now given the on_start, on_success and on_error callables directly.
  • pix4dengine.pipeline.EngineTask.append_config() is renamed to update_config().
  • pix4dengine.process_project() is removed. Project processing must be done exclusively through the more general task pipeline mechanism, using pix4dengine.pipeline.
  • pix4dengine.Project.set_options() is removed. Options must be set exclusively through processing tasks.
  • pix4dengine.options module API:
    • AlgoOption.Ortho.MOSAIC_RELATIVE_RESOLUTION and AlgoOption.Ortho.MOSAIC_ABSOLUTE_RESOLUTION options are added;
    • AlgoOption.Ortho.DTM_RESOLUTION is replaced by AlgoOption.Ortho.DTM_RELATIVE_RESOLUTION and AlgoOption.Ortho.DTM_ABSOLUTE_RESOLUTION;
    • AlgoOption.Index.RESOLUTION is replaced by AlgoOption.Index.RELATIVE_RESOLUTION and AlgoOption.Index.ABSOLUTE_RESOLUTION;
    • AlgoOption.CameraCalibration.MATCH_TIME_MULTI_CAMERA changed type from int to bool, its meaning is the same;
    • AlgoOption.Densification.PCL_IMAGE_SCALE changed its type and allowed values to make them consistent with their meaning;
    • AlgoOption.CameraCalibration.MATCH_STRATEGY is removed. The equivalent pipeline configurations can be set using the new AerialCalibMatch and FreeFlightCalibMatch templates;
    • AlgoOption.Mesh.RESOLUTION option is removed. The equivalent pipeline configurations can be set using the new MeshNormalRes, MeshHighRes and MeshLowRes templates;
    • AlgoOption.CameraCalibration.SKY_SEGMENTATION is obsolete and removed.
  • pix4dengine.coordsys module API:
    • wkt_to_projected_cs() is renamed to wkt_to_cs_name();
    • projected_cs_to_wkt() is renamed to cs_name_to_wkt();
    • get_unit_from_projected_cs() is renamed to unit_from_cs_name();
    • get_unit_from_wkt() is renamed to unit_from_wkt();
    • CoordSys.get_cs() is replaced by CoordSys.get_cs_name() and CoordSys.get_cs_wkt();
    • CoordSys.set_cs() is replaced by CoordSys.set_cs_from_name() and CoordSys.set_cs_from_wkt();
    • CoordSys.is_in_meter(), CoordSys.is_in_foot() and CoordSys.is_in_us_survey_foot() are replaced by CoordSys.get_length_unit().
  • pix4dengine.exports.get_expected_ouput() and pix4dengine.exports.get_available_output() are replaced by get_output().

Compatibility issues

  • pix4dengine.utils.gcp.Mark now references an image by its absolute path rather than by its file name.

Bug fixes

  • Geotags of Mavic2 drones were read incorrectly.
  • Processing hung after finishing if a non-pix4d user account was logged in.
  • Creating a GCP mark for an image added the mark to all images whose file names were substrings of the image file name the mark was created for.

Version 0.2.0

Pix4Dengine Server SDK 0.2.0 is a beta release. Forward and backward compatibility are not guaranteed.

What’s new

Algorithmic improvements

  • Radiometry: software compensation of sensor drift in images from FLIR cameras. This improves the quality of orthomosaic images produced. Note that these improvements only apply to merged outputs, not tiled ones.
  • Point cloud and mesh: a point cloud outlier filter is provided. Removing noise from the point cloud can reduce or eliminate mesh artifacts.

Other improvements

  • The Pix4Dengine Server SDK no longer relies on the Pix4Dmapper application.
  • The SDK is provided as a Debian package that includes the Pix4D photogrammetry runtime.

Bug fixes

  • The high resolution mesh could be blurry while the medium resolution was sharp
  • The mesh texture could be incorrectly generated on Ubuntu
  • The contour .dxf exports could have missing contour lines

Compatibility issues

  • The function pix4dengine.create_split_projects() is removed.
  • The class pix4dengine.enginewrapper.EngineWrapper() is removed. Related to this:
    • Login and logout are managed by the pix4dengine.login_seat and pix4dengine.logout_seat functions
    • Setting the maximum number of CPU cores to use is done when instantiating a Pipeline
    • The pix4dengine.settings sub-module is removed: calls to set_exe_path() and get_exe_path() functions must be removed from your code

Version 0.1.0

Pix4Dengine server is our new SDK for customers that want to scale, automate and integrate photogrammetry into their business processes.

Features

  • Highly configurable processing pipeline that supports custom plugins
  • Access to the Pix4D photogrammetry algorithms

Remarks

  • Projects from older Pix4Dmapper versions can be processed and will be automatically converted to the mapper version in used by Pix4Dengine SDK.
  • Pipelines are a particularly new feature, their functionality and interface should be expected to change in the future.