Release notes

pix4dvortex releases follow semantic versioning.

Release 2026.10 - semantic version 2.21.1

What’s new

  • Handling no data values via a new dsm.Settings.no_data_value parameter in dsm.gen_tiled_dsm and dsm.gen_tiled_dtm processing functions.

Bug fixes

  • io.geotiff.Settings is now handled correctly by io.geotiff.write_geotiff.

Internal release 2.21.0

What’s new

Thermal image processing

Radiometric thermal images can be processed to a thermal orthomosaic for nadir / 2D only captures (guidelines, Limitations and known issues apply). DJI radiometric JPEG processing now requires the DJI Thermal SDK.

Supported formats

  • Radiometric JPEG (R-JPG) — JPEG with radiometric temperature information in the metadata (FLIR and DJI).

  • TIFF temperature-linear data, with radiometric parameters set at capture.

Supported thermal cameras

  • DJI Mavic 3 Thermal (Mavic 3T) Enterprise

  • DJI Mavic 2 Enterprise Advanced

  • DJI Matrice 30T

  • DJI Matrice 4T

  • DJI Zenmuse H20T

  • DJI Zenmuse H20N

  • DJI Zenmuse H30T

  • DJI Zenmuse XT

  • DJI Zenmuse XT2

  • DJI Zenmuse XT S

  • Skydio X10 (VT300-Z and VT300-L)

  • FLIR-manufactured thermal cameras, provided the camera and image metadata have not been modified by a third party.

Processing options

  • Processing the Thermal IR images along with the RGB images is available.

  • New type dmodel.ThermalParameter. Optional thermal_parameter on cameras.make_input_cameras().

  • New function ortho.get_sensor_layouts() listing available sensor layouts for dedicated ortho generation runs. Applicable to ortho.gen_orthomosaic / ortho.gen_tiled_orthomosaic and the fastalgo equivalents.

  • Filter dense.camera_filter.HighestMegapixel to select the sensor with highest megapixel for densification.

Quality report

  • Thermal Parameters table when the project has a thermal sensor.

Documentation

  • User Guide >> Core Processing segment includes update and additions related to thermal image and multispectral processing.

  • Reference catalog has now new chapters Capture practices and Starter settings.

Miscellaneous

  • Selection of the optical radiometric correction types can now be done also manually by the user (experimental).

Changes

  • Python upgraded to v3.14 (Ubuntu and Windows).

  • Ubuntu Linux OS upgraded to 26.04.

  • The optical radiometric correction types dmodel.OpticalRadiometricCorrectionType are now public.

Internal release 2.20.0

What’s new

Settings and templates

  • ortho.Settings.TEMPLATES with NADIR, DEGHOST, and OBLIQUE recommended settings for orthomosaic generation.

DSM/DTM/orthomosaic functions

  • gsplat.RasterSettings.interpolate_dsm option to interpolate no-data values in the DSM.

  • io.geotiff.write_geotiff_view to copy or hard link the underlying files of a GeoTIFF view to another location.

Mesh

  • io.fbx.write_mesh, function to export scalable mesh outputs to FBX.

  • io.fbx.export_levels_face_count reports the number of faces that will be exported for each LOD.

Gaussian splatting

  • _project.ProjectWriter / _project.ProjectReader (OPF) support gsplat.GaussianSplatting via add_item_composite / load_obj. Sources follow Matic-style OPF linkage (scene_reference_frame, plus input_cameras / calibration when already stored).

Documentation

  • New top-level Reference catalog section with a Processing templates, Stats messages, and with moved Supported Geoid Models pages.

Quality report

  • _qr.make_constraints_section() optional scale-constraints table.

  • _qr.make_image_accuracy_section() optional image location accuracy histogram.

  • Project CRS field shows geoid model name or constant geoid height.

  • _qr.make_settings_section() accepts proc.Resources.

  • Multispectral camera-parameter headers annotate the primary band.

Miscellaneous

  • session.login() accepts now optional name and hostname keyword arguments that are attached to billing records.

Changes

  • Some ortho error messages have been changed to better reflect the root causes.

Bug fixes

  • Length unit names are normalized before looking up the short name for the quality report.

  • The quality report no longer fails when image files listed in camera_list are missing. Catch RTK plot / device table skip those images and emit a stdout warning per image.

  • mesh.ScalableSettings.from_preset(…, deghost=True) now sets deghost correctly (it previously passed the flag as preview).

  • dmodel.OmegaPhiKappa now requires a non-empty crs at construction and raises ValueError immediately if it is missing or empty.

Internal release 2.19.0

What’s new

  • ortho._gen_orthomosaic renamed to ortho.gen_orthomosaic and added a new parameter to specify the scene reference frame of the calibrated cameras.

  • gsplat.gen_gs_dsm() function to generate a DSM raster from a Gaussian model at a given pixel size.

  • calib.Settings.OptimIntStrategy and calibration_int_param_strategy on calib.Settings and calib.ReoptSettings, to control when camera internals are optimized during calibration.

  • Improved performance of features extraction and matching when running on CPU.

  • Added calibration_metrics and sensor_metrics to the mixpanel event of calibration.

Internal release 2.18.0

What’s new

Quality report

  • New joint tie point calculated projected coordinates table for manual tie points (MTPs) and manual check points (MCPs).

  • HTML files now include standard render-complete notifications for external HTML-to-PDF conversion tools: window.printReady is set to true and a pix4d-html2pdf-ready browser event is dispatched once pagination has finished. This requires no changes to _qr.dump_html() or other SDK APIs when exporting HTML only.

Callbacks

  • progress_callback and stop_function callbacks were extended to processing functions in the autogcp, depth, dsm, io.las, io.geotiff, mesh, ortho, and skyseg modules

  • progress_callback reports a single 0-100% progress.

  • stop_function can be used to interrupt processing at any time.

New collection of DSM/DTM/orthomosaic functions

  • The functions are dsm.gen_dsm, dsm.gen_dtm, ortho._gen_orthomosaic, fastalgo.gen_orthomosaic. These functions differ from the existing ones with the _tiled_ infix in that they produce a single GeoTIFF file as output.

  • New data model object dmodel._GeotiffView that holds a reference to a GeoTIFF and allows reading arbitrary rectangles. This is the object type returned by the dsm.gen_dsm and dsm.gen_dtm functions.

  • New function io.geotiff._open_geotiff_view to open a GeoTIFF file as a dmodel._GeotiffView object.

  • New overload of io.geotiff.to_cog for dmodel._GeotiffView.

  • ortho.gen_orthomosaic can only consume height models from dsm.gen_dsm and dsm.gen_dtm and the tile size used is decoupled from the DSM/DTM tile size.

  • New ortho.Settings.tile_size property. This setting is only used by the new function ortho._gen_orthomosaic, fastalgo.gen_orthomosaic, fastalgo.get_tiled_orthomosaic and is ignored by ortho.get_tiled_orthomosaic.

  • New function fastalgo.gen_orthomosaic to generate an orthomosaic in a single GeoTIFF from a ground mesh model.

  • gsplat._gen_gs_rasters() function to generate a DSM and RGBA (ortho) rasters from a Gaussian model at a given pixel size.

  • gsplat.RasterSettings class representing raster generation configurations.

Geoid models

  • S-JTSK / Krovak grid file, which is applied in transformations from ETRS89 when used with Baltic 1957 height (geoid model CR-2005).

  • Geoid model GCG05 for DHHN92 height for Germany.

Documentation

  • User Guide > Utilities was enriched to summarize progress_callback and stop_function callbacks.

Changes

  • cameras.make_input_cameras() skips duplicate, corrupted, inaccessible or unreadable images with a warning when possible; it still raises ValueError when no captures can be created.

  • progress_callback step names were aligned to consistent, user-facing display names.

  • The SBOM file is now the single reference for the dependencies (licenses, descriptions, etc.) used in the PIX4Dengine SDK.

Bug fixes

  • Multiple PIX4Dcatch datasets can now be combined and processed together without losing sky masks.

  • constraints parameters accept None as an argument.

  • CGP/CKP/MTP/MCP coordinates on the Quality report are now correctly rounded.

  • Fixed densification crash when filenames included ‘%’ characters.

  • Fixed issue resulting in the message: “More than 90% of projections from camera (declared as visible) to seed point are invalid”.

Release 2026.05 - semantic version 2.17.0

What’s new

Calibration and Matching

  • Setting pipeline_strategy in calib.Settings, to choose if a pipeline more robust to inaccurate geotags and/or hard to match images has to be used. It applies only to CalibrationType.TrustedLocationOrientation.

  • calib.Settings.PipelineStrategy type to set the calib.Settings.pipeline_strategy.

  • calib.Settings.ReMatchingAlgorithm type to choose the rematching algorithm.

  • calib.Settings.MatchingAlgorithm.Auto option to automatically choose the matching algorithm.

  • calib.calibrate() and calib.reoptimize() functions support scale constraints.

  • dmodel.Constraints and dmodel.ScaleConstraint data model types for scale-constrained calibration.

Gaussian splatting

  • gsplat.GaussianSplatting class representing the Gaussian splatting model, a composite of GLTF and scene reference frame OPF types.

  • gsplat.gen_gs function to generate a Gaussian splatting model from a calibrated scene and a point cloud.

  • gsplat.Presets type and gsplat.Settings.TEMPLATES, with gsplat.Settings.from_preset(), for recommended Gaussian splatting configurations.

  • io.ply.write_gsplat function to export a gsplat.GaussianSplatting model to a PLY file.

Region of interest

  • geom.Roi3D class which can constrain gaussian splatting and scalable mesh generation.

  • geom.make_roi helper that computes a region of interest from the given points, for example, projected camera positions.

  • geom.Box class for 3D axis-aligned bounding boxes.

Miscellaneous

  • Module APIs are now explicitly defined using __all__ variables.

  • Progress and cancellation callbacks are available in all supported functions in the autogcp, depth, dsm, io, mesh, ortho, and skyseg modules.

Changes

  • pix4dvortex.__version__ is removed. Use the pix4dvortex.version module instead (__version__, __version_tuple__, and __commit_id__ when available).

  • geom.Box is the canonical type for 3D bounding boxes. pcl.PointCloud.Box remains available as a backwards-compatible alias.

  • calib.Settings.rematch setting now can take either a boolean or calib.Settings.ReMatchingAlgorithm

  • calib.Settings.TEMPLATES.CATCH is updated with improved defaults to get better results in the case of partial or absent RTK signal.

  • Calibration supports OPF version 1.2.

  • calib.Settings.TEMPLATES.FLAT is updated to be less susceptible to camera pose bending and more robust against IMU value bias.

  • Calibration image pair generation now correctly applies the CRS-to-meters conversion factor.

  • 3D region-of-interest validation checks intersection instead of overlap.

  • On Linux, the SDK is distributed as two wheels: the core package and a Gaussian splatting extension package.

Bug fixes

  • mesh.gen_mesh respects thread resource limits.

  • File names containing percent signs are handled properly.

  • Sky mask generation handles correctly duplicate image file names.

Internal release 2.16.1

Fixed

  • CUDA libraries missing from the Linux wheel are added back.

Internal release 2.16.0

What’s new

  • The recommended maximum resources for densification can be found via dense.MAX_RAM and dense.MAX_GPU_MEM.

  • calib.Settings.OptimExtType.NoOptim option for calibrating cameras with very accurate initial poses.

  • Applications can provide a name and version for the quality report.

  • Progress and cancellation callbacks can be provided to all algorithmic functions that support them.

  • coordsys module’s version can now be discovered programmatically.

  • Support for new camera models:

    • Wingtra INSPE

    • Wingtra MAP61

    • Wingtra RX1RX2

    • Wingtra SUR61

    • SONY DSC-RX1RM3

    • SONY ILX-LR1 with 85mm lens

    • Share S20 LIDAR

    • DJI Mini 4 Pro

    • DJI AIR 3S

    • Fujifilm GFX100SII

  • Handling of digital zoom is improved.

  • Skydio-specific GPS accuracy is now read for generic cameras.

  • A minimum GPS accuracy is enforced for DJI camera models.

  • Fast calibration now returns a sparse point cloud in addition to the ground model.

  • Fast calibration now optimizes camera internals for improved rig alignment when input internals are insufficient.

  • Fast calibration supports larger areas captured by multiple drones and RGB/multispectral images from the same drone.

  • Fast calibration is faster on machines with supported GPUs.

Changes

  • dense.Settings.TEMPLATES are updated with improved defaults for better quality.

  • Setting pcl_scale in dsm.Settings.IDW is now optional; for the recommended workflow, leave this parameter unset to allow gen_tiled_dsm() to automatically calculate the optimal value for your data.

  • Orthomosaic generation falls back to CPU when GPU cannot be configured.

  • AutoGCP can be configured to run on CPU only.

Bug fixes

  • The Mixpanel metric calibrated_image_percentage is computed from the number of input cameras instead of captures.

  • Fixed an issue in mesh.gen_mesh that could result in non painted triangles at mesh tile boundaries.

  • Fixed an issue in mesh.gen_mesh that could result in the mesh not being correctly sliced.

  • Holes no longer appear between tiles in DSMs generated with the triangulation method.

  • Stitching on Intel Arc series GPUs no longer results in mosaic-like orthomosaics.

  • Certain timeouts during hardware-accelerated orthomosaic generation are resolved.

  • Unexpected aborts during hardware-accelerated orthomosaic generation no longer occur.

  • Matches are read correctly when loading a calibrated scene from an OPF project with removed images.

  • Densifying with mixed-resolution images no longer crashes.

  • DSM generation at certain resolutions no longer produces tiles with off-by-one pixel errors. These would cause failure in orthomosaic generation.

Internal release 2.15.3

What’s new

  • Geoid models:

    • Svalbard_EGG2015_2024, for EPSG:10999 “SVD2024 height”.

    • BONGEO2004, for EPSG:10763 “Bonaire height”.

  • Stability improvements to GPU-accelerated orthomosaic generation.

Changes

  • FastCalib discards incomplete captures.

Bug fixes

  • Fixed a stitching issue that could lead to mosaic-like artifacts in orthomosaics processed using an Intel Arc series GPU.

Internal release 2.15.2

Changes

  • Python types are exported with module-local scope.

  • cameras.WeatherCondition aliases now public dmodel.WeatherCondition.

Bug fixes

  • Fixed an issue in mesh.gen_mesh that could result in non painted triangles at mesh tile boundaries.

  • Fixed an issue in mesh.gen_mesh that could result in the mesh not being correctly sliced.

Internal release 2.15.1

Changes

  • Point cloud partitioning supports an optional sorting attribute.

Internal release 2.15.0

What’s new

  • Geoid models:

    • FIN2023N2000 from Finland.

  • fastalgo.calibrate includes the sparse point cloud in the scene’s calibration.

Changes

  • Improved generated dense point cloud completeness for datasets mixing high and low resolution images

  • Improved dense point cloud generation speed without GPU-acceleration up to 5%-10% on some datasets

  • Extended CRS support for SLPK exports:

    • The CRS doesn’t have to be compound any more.

    • ESRI systems are also accepted. In the case of systems deprecated by an EPSG equivalent, the EPSG code will be used in the output.

  • Camera support:

    • Changed DJI Matrice 3D 12.3 5280x3956 to default to ellipsoidal vertical CRS.

Bug fixes

  • Unusable reflectance targets with missing reflectance factors in cameras.make_input_cameras() are checked for in the ortho generation.

Release 2025.05 - semantic version 2.14.0

What’s new

  • New Utilities/Logging section in HTML documentation user quide.

  • Added new scalable mesh algorithm:

    • Function mesh.gen_mesh produces a new LOD mesh with out-of-core storage. The function condenses the work previously done by the combination of mesh.gen_mesh_geometry, mesh.gen_mesh_texture, and mesh.gen_textured_lod_mesh in a single function call, producing a superiour quality output, at the cost of increased processing time. The output mesh can be exported to Cesium and SLPK.

    • Configuration class mesh.ScalableSettings, with various processing templates defined in mesh.SCALABLE_MESH_TEMPLATES.

  • Added support for projected geolocation and initial orientation in omega-phi-kappa, both from Exif and from externally provided geotags.

  • Support processing of images without Exif, specifically, also without maker, model, acquisition time, focal length, or pixel size tags.

  • Support for new camera models:

    • Wide and Narrow camera of all Skydio X10 payloads.

    • GPS accuracy of Skydio drones.

  • Module fastalgo with fast calibration and orthomosaic functions calibrate and gen_tiled_orthomosaic respectively. The calibration produces a specific type of calibrated scene, which can be used directly with the orthomosaic function.

  • Support partitioning of pointclouds with a custom minimum point count per node and LoD node chunk target size.

  • Utility functions to create a new SpatialReference from an instance’s horizontal or vertical component.

Changes

  • Simplified logging in processing and export functions: logger parameter is now a simple Callable[[int, str], None], making the mechanism independent from non-public module _pyvtx.logging.

  • User guide PIX4Dengine SDK data model and API Reference sections extended, now including references to OPF and its public documentation, as well as improved module and class documentation cross-referencing.

  • More permissive handling of invalid rig configurations or missing rig information: instead of being rejected, images are used as stand-alone captures and the rig discarded. A warning is issued instead of an error.

  • Change shutter type for the following cameras from “Global” to “Rolling”:

    • ILX-LR1 (all lenses).

    • ILCE-7RM4.

    • Wingtra RGB61.

  • Updated internal parameters for ILX-LR1 camera, 24, 35, 50 and 70 mm lenses.

  • cameras.GeoTag.__repr__ changed to reflect the new internal representation, which uses dmodel classes. This affects the output of str() and repr() when applied to cameras.GeoTag objects.

  • Added dmodel.OmegaPhiKappa for initial orientation in omega-phi-kappa.

  • cameras.GeoTag can be initialized with dmodel.OmegaPhiKappa as an alternative to dmodel.YawPitchRoll.

  • Added cameras.GeoTag.geolocation and cameras.GeoTag.orientation properties to access geotag information.

  • Deprecated cameras.GeoCoordinates, cameras.GeoRotation, cameras.LatLonAlt, and cameras.YawPitchRoll.

  • In cameras.GeoTag, deprecated the horizontal_srs_code, vertical_srs_code, geo_position, and geo_rotation properties.

  • Added min_points_per_node and lod_node_chunk_size arguments to pcl.PointCloud.partition.

Bug Fixes

  • Broken function parameter and return type cross-reference links fixed for data model types and Python built-ins.

Internal release 2.13.0

  • Geoid models:

    • Japanese JPGEO2024 for EPSG:6695 “JGD2011 (vertical) height”.

Internal release 2.12.1

What’s new

  • Geoid models:

    • Greek GR_HEPOS2011 for EPSG:5716 “Piraeus height”.

    • Hungarian Geoid2014 for EPSG:5787 “EOMA 1980 height”.

  • Transformation from ETRS89 to GGRS87 with a grid file from HEPOS, Greece.

  • Support for new camera models:

    • Sony ILX-LR1 9504x6336 with 35mm lens for Freefly.

    • Sentera 6x Multispectral rig.

    • Sentera 6x Thermal rig.

    • DJI Mini 3 6.7 4000x3000.

    • DJI Matrice 4T wide angle lens RGB camera 6.7 4032x3024.

    • IMU data from Skydio drones.

  • Support for area-based billing.

  • New module indexmap for index map calculations.

  • Settings for camera creation with radiometric corrections cameras.Settings.Radiometry.

  • New quality metrics calculator class calib.analytics.SceneStats, containing equivalents of all calib.analytics preserved for backwards compatobility. Users are recommended to use the new, more efficient class methods. The list of available SceneStats public methods is the following:

    • compute_gsd().

    • compute_gsd_per_sensor().

    • number_of_cameras().

    • number_of_calibrated_cameras().

    • number_of_geolocated_cameras().

    • number_of_geolocated_calibrated_cameras().

Bug Fixes

  • Disregard rig reference camera Exif tag of MicaSense RedEdge-P. This is known to be inconsistent.

Internal release 2.11.0

What’s new

  • Camera model support:

    • Add support for Sony ILX-LR1 9504x6336 with 24mm, 50mm and 75mm lenses for Freefly.

    • Add support for DJI Matrice 4 Enterprise 12.3 5280x3956.

    • Add support for DJI Zenmuse L1 EP800 8.8 5472x3648.

    • Add support for Sentera 6x Thermal Pro rig.

    • Add support for Agrowing Quad and Sextuple rigs.

    • Improved support for Sentera 65R 21030-01_65MP-GS-0001.

    • Improved support for Altum-PT and RedEdge-P (setting panchromatic band as reference camera).

    • Improved rig handling:

      • Move cameras that should ignore the rig into separate capture with own geolocation.

      • Retrieve the rig reference camera index from the exif data for rigs that tag it.

Internal release 2.10.0

What’s new

  • Add calib.Settings.TEMPLATES.RTK template. This is equivalent to calib.Settings.TEMPLATES.LARGE, except for the pipeline attribute, which is set to CalibrationType.TrustedLocationOrientation.

  • Improved processing for PIX4Dcatch projects, increasing the likelihood that difficult projects (e.g. with GPS only and/or partial RTK fix) can be well calibrated. These improvements are enabled with the calib.TEMPLATES.Settings.CATCH template.

  • Expose complete OPF compatible calibration intermediate results classes in dmodel module:

    • dmodel.Features

    • dmodel.Matches

    • dmodel.OriginalMatches

  • Allow partitioning of GLTF files, through new methods of the PointCloud class.

  • Add camera visibility data to the generated depth point clouds.

Changes

  • Added new setting rematch_additional_settings to calib.ReoptSettigns to use features and matches saved during calibration.

  • Added new setting save_intermediate_results to calib.Settings to save intermediate features and matches to disk.

  • Added new method PointCloud.partition_inplace to partition a GLTF in-place.

  • Added new method PointCloud.is_partitioned to check if a GLTF is partitioned.

Bug Fixes

  • Issue that could result in segmentation faults in depth.gen_pcl() when a depth or depth confidence raster file could not be successfully loaded.

Internal release 2.9.1

What’s new

  • OPF calibrated scene sparse point cloud is spatially partitioned.

Release 2024.09 - semantic version 2.9.0

What’s new

  • New Geoid models:

    • Austria: “Austrian Geoid 2008 | GHA” for EPSG:5778

    • New Zealand:

      • EPSG:5759, “NZVD2016 | Auckland 1946”

      • EPSG:5760, “NZVD2016 | Bluff 1955”

      • EPSG:4458, “NZVD2016 | Dunedin-Bluff 1960”

      • EPSG:5761, “NZVD2016 | Dunedin 1958”

      • EPSG:5762, “NZVD2016 | Gisborne 1926”

      • EPSG:5763, “NZVD2016 | Lyttelton 1937”

      • EPSG:5764, “NZVD2016 | Moturiki 1953”

      • EPSG:5765, “NZVD2016 | Napier 1962”

      • EPSG:5766, “NZVD2016 | Nelson 1955”

      • EPSG:5767, “NZVD2016 | One Tree Point 1964”

      • EPSG:5772, “NZVD2016 | Stewart Island 1977”

      • EPSG:5769, “NZVD2016 | Taranaki 1970”

      • EPSG:5770, “NZVD2016 | Wellington 1953”

  • Camera support:

    • Fix parameter for MicaSense Altum-PT.

    • Changed DJI ZH20T, DJI ZH20T, DJI FC6310R, DJI FC6540, Mavic 2 Enterprise Advanced to default to ellipsoidal vertical CRS.

  • Additional configuration parameters can be provided to the GeoTIFF writer through io.geotiff.Settings.extra.

  • Expose complete OPF compatible camera classes in dmodel module:

    • dmodel.InputCameras

    • dmodel.ProjectedCameras

    • dmodel.CalibratedCameras

  • Added to_dict and from_dict conversion methods to the following dmodel classes:

    • dmodel.CRS

    • dmodel.CalibratedCamera

    • dmodel.CalibratedCameras

    • dmodel.CalibratedControlPoint

    • dmodel.CalibratedControlPoints

    • dmodel.CalibratedITP

    • dmodel.CalibratedIntersectionTiePoints

    • dmodel.CalibratedSensor

    • dmodel.Camera

    • dmodel.CameraList

    • dmodel.CaptureElement

    • dmodel.FisheyeInternals

    • dmodel.GPSBias

    • dmodel.Geolocation

    • dmodel.ITP

    • dmodel.InputCameras

    • dmodel.InputControlPoints

    • dmodel.IntersectionTiePoints

    • dmodel.PerspectiveInternals

    • dmodel.ProjectedCameras

    • dmodel.ProjectedCapture

    • dmodel.ProjectedControlPoints

    • dmodel.ProjectedSensor

    • dmodel.SceneRefFrame

    • dmodel.SensorElement

    • dmodel.SegmentGraphs2D

    • dmodel.SphericalInternals

Changes

  • Input camera creation functions cameras.make_input_cameras() and _multispec._make_input_cameras_with_radiometric_input() require session login.

  • Added pan_sharpening flag to ortho.Settings.

  • Type annotation syntax changed to use typing.Annotated. For example, shift: List[float[3]] changed to shift: Annotated[list[float], FixedSize(3)].

  • Optional and deprecated gsd parameter in io.geotiff functions is ignored. It is kept for API backwards compatibility only.

  • Added new setting use_optimized_internals in calib.ReoptSettings.

  • Added new setting use_itps in calib.Settings.

  • Added new function calib.analytics.compute_gsd_per_sensor().

  • Added new optional parameter strategy to calib.analytics.compute_gsd() with default min, this improves the GSD computation for projects which combine cameras with different resolution. The previous behavior is median.

  • Added setting dense.Settings.camera_filter with default RigReferenceCameras, which improves the densification for rig projects; the previous behaviour is NoFilter.

Bug Fixes

  • Suppress spurious exiv2 log messages, previously streamed to stdout.

  • Fix issue which resulted in cameras.InputCameras geolocation being lost in OPF serialization when set as external geotags.

Internal release 2.8.0

What’s new

  • Added support for the following camera models:

    • Mavic 2 Enterprise Advanced.

    • DJI FC3411 and FC7303.

    • Mavic 3M M3M 12.3 5280x3956.

  • Changed shutter type of camera model DJI FC220 to rolling.

Internal release 2.7.0

What’s new

  • Processing interruption mechanism added to most core processing algorithms. See Changes for more information.

Bug Fixes

  • Fixed issue which resulted in mesh texture generation occasionally taking orders of magnitude longer than expected.

Changes

  • Optional processing interruption parameter stop_function added to most core processing algorithms. The parameter is a callable that returns True if the processing is to be interrupted and False otherwise. A new exception type proc.StopProcessing is raised on processing interruption. The changes are backwards compatible. The processing functions affected are:

    • calib.calibrate()

    • calib.reoptimize()

    • dense.densification()

    • depth.gen_pcl()

    • depth.pcl_merge()

    • dsm.gen_tiled_dsm()

    • dsm.gen_tiled_dtm()

    • mesh.gen_mesh_geometry()

    • mesh.gen_mesh_texture()

    • mesh.gen_textured_mesh_lod()

    • ortho.gen_tiled_orthomosaic()

    • ortho._gen_tiled_orthomosaic_reflectance_map()

Release 2024.04 - semantic version 2.6.0

What’s new

  • Support for new camera model DJI M3T.

  • Change default vertical GPS CRS for (non-legacy) generic camera models from EGM96 to ellipsoidal.

  • New Geoid models:

    • Singapore SGeoid09 for EPSG:6916 “SHD height”.

    • Czech CR-2005 for EPSG:8357 “Baltic 1957 height”.

    • Portuguese GeodPT08 for EPSG:5780 “Cascais height”.

    • Corsica RAC23 for EPSG:5721 “NGF-IGN78 height”.

  • Extent of “CGVD28 height” increased to cover Newfoundland, Canada.

  • Updated model files for Danish geoid model DVR90.

  • Significantly improved calibration performance for larger projects on platforms with Intel processors.

Bug fixes

  • Issue which prevented exporting SLPK point clouds with io.slpk.write_pcl() when the working directory name contained non-ASCII characters.

  • cameras.GeoTag position accuracy units in string representation: tag LAT and LON accuracies as meters. Previously these were incorrectly tagged as degrees.

  • Issue which prevented generating pcl.PointCloud objects when using non-ASCII working directories (Windows only).

  • Fixed OBJ mesh export to files with paths containing non-ASCII characters.

  • Import missing pix4dvortex.io submodules geotiff and las into parent submodule. This allows to access them from the imported submodule, i.e. from pix4dvortex import io; io.geotiff; io.las. With this change, all io submodules (i.e. cesium, geotiff, las, obj, slpk) are accessible in the same manner.

  • Fix issue which prevented serializing point clouds to LAS/LAZ if the position data contained NaN values. These data are now excluded from the serialization.

  • Align cameras.DepthConfidence and cameras.DepthConfidenceInfo default values with each other and with expected values from PIX4Dcatch:

    • min = 0

    • max = 2

    • threshold = 1

  • Fix issue which resulted in depth pointcloud generation hanging indefinitely when depth and depth confidence data contained out of range values. The faulty entries are effectively ignored by assigning special values to them.

Internal release 2.5.0

What’s new

  • pix4dvortex.io.las.write_pcl() sets “pix4d-vortex-<version>” in the saved LAS file “System Identifier” metadata.

  • Public classes cameras.DepthInfo and cameras.DepthConfidenceInfo to optionally pass depth file information to cameras.make_input_cameras().

  • Improve performance for DSM IDW method.

  • Improve mesh texturing of projects with cameras coming from terrestrial and aerial sensors.

Changes

  • io.geotiff.write_geotiff() and io.geotiff.write_geotiff_tile() parameters gsd have been deprecated. They are kept for backwards compatibility, but It is recommended not to use them.

  • io.geotiff.write_geotiff() parameter gsd has been made optional. The correct value is internally taken from the input tiles.

  • io.geotiff.write_geotiff() raises ValueError if the tile resolutions are not all the same.

Bug fixes

  • Fixed issue that prevented processing of data samples obtained with fisheye lens cameras.

  • Scale projected camera sigma according to UoM. Previously, no scaling was applied (corresponding to UoM of meters).

  • Fix empty pixels when using DSM triangulation method.

Internal release 2.4.1

Bug fixes

  • Fixed edge artifacts in DSM tiles generated with the IDW method.

Internal release 2.4.0

What’s new

  • Support for new camera model Skydio X10.

  • Add a table of supported geoid models in documentation.

  • Faster mesh texturing (from ~20% faster, depending on data).

  • Depth processing use lower peak disk usage and the temporary files are removed immediately after use.

  • Expose coordsys.BaseToCanonCnv and coordsys.CanonToBaseCnv. These are convertors between the OPF base and translated canonical reference systems.

  • New __str__ methods in geom.Polygon2D and geom.Roi2D. These produce OGC geometry WKT strings and may be useful for inspecting the contents of geometry objects.

Bug fixes

  • Potential unexpected program termination.

  • Issue that resulted in cameras.make_input_cameras() failures when using depth files with non-ASCII paths on Windows.

  • Issue that resulted in in-place modifications of dmodel.GCP.geolocation.crs not being applied.

Internal release 2.3.0

What’s new

  • New geoid models:

    • GEOIDE-Ar16 (EPSG:5340+9255) “SRVN16 height”.

    • PL-geoid-2021 (EPSG:9702+9651) “EVRF2007-PL height”.

  • Enhancement to geoid model CGG2000/HTv2.0.

  • coordsys.SpatialReference.is_engineering() method.

  • Improvements in pix4dvortex.io.cesium API documentation.

  • Improvements in pix4dvortex.io.las API documentation.

  • New calibration setting calib.Settings.use_gcp_srs to enforce the usage of the GCP coordinate reference system to set the scene reference frame of the calibration. When this option is used, the CRS of all GCPs must be the same Cartesian isometric system. In particular, this enables the usage of GCPs in 3D engineering systems, which was not possible before.

Bug fixes

  • Calibration crashes resulting from faulty PIX4Dcatch inputs.

  • Inconsistent behaviour in pix4dvortex.io.las.write_pcl() where in some cases the file extension and format (LAS/LAZ) did not match. This has been fixed by making the compress parameter have effect only when the format cannot be inferred from the file extension.

Release 2023.09 - semantic version 2.2.0

What’s new

  • New geoid models:

    • FIN2000 (EPSG:4258+5717) “N60 height”.

    • FIN2005N00 (EPSG:4258+3900) “N2000 height”.

    • LV14 (EPSG:4661+7700) “Latvia 2000 height”.

    • TWGEOID2018h (EPSG:8904) “TWVD 2001 height”.

  • Support for new camera models:

    • MicaSense Altum-PT.

    • MicaSense RedEdge-P.

  • Corrected and improved API documentation for cameras.GeoTag and related classes.

  • Improved DSM generation performance and quality.

  • cameras.make_input_cameras() reads GPS time for following camera models:

    • Parrot Sequoia.

    • SenseFly S.O.D.A.

    • SenseFly AeriaX.

    • Sony DSCWX220.

    • Wingtra RGB61.

    • Xacti CX GB100.

  • Improved densification performance up to 5% when using perspective cameras.

  • Improved mesh texturing by reducing seams visibility and improving texture segmentation.

  • cameras.GeoTag can be initialized from optional dmodel.GeoLocation and dmodel.YawPitchRoll OPF objects.

  • Added OPF Yaw-Pitch-Roll Orientation as dmodel.YawPitchRoll.

Bug fixes

  • Sporadic tiled orthomosaic generation failures due to incompatible DSM and ortho tile sizes.

  • Various minor quality and performance issues in ortho.gen_tiled_orthomosaic().

  • cameras.make_input_cameras() raises ValueError and logs DUPLICATE_IMAGE as failure reason. Previously the failure was erroneously logged as rig related.

  • Fix very long processing times on some cases of planar meshes in mesh texturing.

  • Exception resulting from ortho.gen_tiled_orthomosaic() failure due to a color balance error had incorrect message “Unknown error”. This has been replaced by “Color balance error”.

  • Loading OPF objects with CRS user input description fields such as "EPSG:2056+5773" instead of full WKT strings was leading to run time errors in some situations.

  • Removed erroneously exposed and problematic option coordsys.WktExportOptions.BIND_TO_WGS84.

Internal release 2.1.1

What’s new

  • Improvements in documentation.

Bug fixes

  • Fixed a regression in LAS 1.2 serialization of site localized point clouds (i.e. with CRS DERIVEDPROJCRS), which resulted in an exception being raised. The previous behaviour of generating the LAS file with inconsistent CRS information has been restored. Strictly speaking this is not a bug fix, since the regression was simply applying stricter correctness criteria.

Release 2023.06 - semantic version 2.1.0

What’s new

  • Improvements in documentation.

  • Windows GPU support upgraded to CUDA 11.7 compatible drivers.

  • Camera Support: ShareUAV 202S Pro.

  • Camera Support: WINGTRA RGB61_FE24mmF2.8G_24.0_9504x6336.

  • Camera Support: DJI M3M_4.3_2592x1944.

  • Slovenian geoid model SLO-VRP2016/Koper.

  • German geoid model GCG2016.

  • Support for NADCON5 grid files for USA. This may slightly change transformations in the USA.

  • Stability and performance improvements in GPU enhanced orthomosaic generation.

Changes

  • Type of mask paths in the mask map parameters of mesh.gen_mesh_geometry() and dense.densification() changed from str to os.PathLike. This change is backwards compatible.

  • Type of mask paths in the mask map returned by skyseg.gen_segment_masks() changed from str to pathlib.Path.

  • Type of output directory parameter of skyseg.gen_segment_masks() changed from str to os.PathLike. This change is backwards compatible.

  • pix4dvortex.io function parameters representing paths changed from str to os.PathLike. This change is backwards compatible.

  • pix4dvortex.proc.Resources.work_dir property is now represented as os.PathLike instead of str on set, which is backward compatible, and as pathlib.Path instead of str on get.

  • pix4dvortex.dmodel.io function parameters representing paths changed from str to os.PathLike. This change is backwards compatible.

Bug fixes

  • Fixed a bug in site calibration by which calibrations with big coordinates could end up with the site system up-side down.

  • Failure to run pix4dvortex.transform.transform() for point clouds when the supplied working directory does not exist.

Release 2023.05 - semantic version 2.0.0

What’s new

This is the initial release of the 2nd generation PIX4Dengine SDK. For the feature content refer to the latest feature list on the PIX4Dengine SDK product page or contact the PIX4D sales team.