Release notes¶
pix4dvortex releases follow semantic versioning.
Release 2025.05 - semantic version 2.14.0¶
What’s new¶
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 ofmesh.gen_mesh_geometry
,mesh.gen_mesh_texture
, andmesh.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 inmesh.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 functionscalibrate
andgen_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.
Changes¶
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 usesdmodel
classes. This affects the output ofstr()
andrepr()
when applied tocameras.GeoTag
objects.Added
dmodel.OmegaPhiKappa
for initial orientation in omega-phi-kappa.cameras.GeoTag
can be initialized withdmodel.OmegaPhiKappa
as an alternative todmodel.YawPitchRoll
.Added
cameras.GeoTag.geolocation
andcameras.GeoTag.orientation
properties to access geotag information.Deprecated
cameras.GeoCoordinates
,cameras.GeoRotation
,cameras.LatLonAlt
, andcameras.YawPitchRoll
.In
cameras.GeoTag
, deprecated thehorizontal_srs_code
,vertical_srs_code
,geo_position
, andgeo_rotation
properties.Added
min_points_per_node
andlod_node_chunk_size
arguments topcl.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
toGGRS87
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 allcalib.analytics
preserved for backwards compatobility. Users are recommended to use the new, more efficient class methods. The list of availableSceneStats
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 tocalib.Settings.TEMPLATES.LARGE
, except for thepipeline
attribute, which is set toCalibrationType.TrustedLocationOrientation
.Improved processing for Catch 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
tocalib.ReoptSettigns
to use features and matches saved during calibration.Added new setting
save_intermediate_results
tocalib.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
andfrom_dict
conversion methods to the followingdmodel
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 toortho.Settings
.Type annotation syntax changed to use
typing.Annotated
. For example,shift: List[float[3]]
changed toshift: Annotated[list[float], FixedSize(3)]
.Optional and deprecated
gsd
parameter inio.geotiff
functions is ignored. It is kept for API backwards compatibility only.Added new setting
use_optimized_internals
incalib.ReoptSettings
.Added new setting
use_itps
incalib.Settings
.Added new function
calib.analytics.compute_gsd_per_sensor()
.Added new optional parameter
strategy
tocalib.analytics.compute_gsd()
with defaultmin
, this improves the GSD computation for projects which combine cameras with different resolution. The previous behavior ismedian
.Added setting
dense.Settings.camera_filter
with defaultRigReferenceCameras
, which improves the densification for rig projects; the previous behaviour isNoFilter
.
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 returnsTrue
if the processing is to be interrupted andFalse
otherwise. A new exception typeproc.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
submodulesgeotiff
andlas
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, allio
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
andcameras.DepthConfidenceInfo
default values with each other and with expected values from Catch: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
andcameras.DepthConfidenceInfo
to optionally pass depth file information tocameras.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()
andio.geotiff.write_geotiff_tile()
parametersgsd
have been deprecated. They are kept for backwards compatibility, but It is recommended not to use them.io.geotiff.write_geotiff()
parametergsd
has been made optional. The correct value is internally taken from the input tiles.io.geotiff.write_geotiff()
raisesValueError
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.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
andcoordsys.CanonToBaseCnv
. These are convertors between the OPF base and translated canonical reference systems.New
__str__
methods ingeom.Polygon2D
andgeom.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 catch 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 thecompress
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 optionaldmodel.GeoLocation
anddmodel.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()
raisesValueError
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()
anddense.densification()
changed fromstr
toos.PathLike
. This change is backwards compatible.Type of mask paths in the mask map returned by
skyseg.gen_segment_masks()
changed fromstr
topathlib.Path
.Type of output directory parameter of
skyseg.gen_segment_masks()
changed fromstr
toos.PathLike
. This change is backwards compatible.pix4dvortex.io
function parameters representing paths changed fromstr
toos.PathLike
. This change is backwards compatible.pix4dvortex.proc.Resources.work_dir
property is now represented asos.PathLike
instead ofstr
on set, which is backward compatible, and aspathlib.Path
instead ofstr
on get.pix4dvortex.dmodel.io
function parameters representing paths changed fromstr
toos.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 product page or contact the PIX4D sales team.