From e5d0e39a9b2db53c16c89344f63788a178ca3c14 Mon Sep 17 00:00:00 2001 From: Paul Gafton Date: Thu, 9 Oct 2025 11:45:16 +0200 Subject: [PATCH] Added support for DJI distortion (#21) --- CMakeLists.txt | 2 +- Samples/dji_phantom4.jpg | Bin 0 -> 54458 bytes Samples/dji_phantom4_2.jpg | Bin 0 -> 49283 bytes TinyEXIF.cpp | 71 ++++++++++++++++++++++++++++++++----- TinyEXIF.h | 15 ++++++++ main.cpp | 6 ++++ 6 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 Samples/dji_phantom4.jpg create mode 100644 Samples/dji_phantom4_2.jpg diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d55149..1d153ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.10) project(TinyEXIF) include(GNUInstallDirs) diff --git a/Samples/dji_phantom4.jpg b/Samples/dji_phantom4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8305fb88591c0b9de10ace7c94482da1f52923c2 GIT binary patch literal 54458 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 literal 0 HcmV?d00001 diff --git a/Samples/dji_phantom4_2.jpg b/Samples/dji_phantom4_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3826200e901c1766bdca89c3c17277a161ef47da GIT binary patch literal 49283 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�KzFQOk(Z67Rz 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 WF_xx6e -#endif // TINYEXIF_NO_XMP_SUPPORT - -#include +#include #include #include #include #include #include #include +#include + +#ifndef TINYEXIF_NO_XMP_SUPPORT +#include +#endif // TINYEXIF_NO_XMP_SUPPORT #ifdef _MSC_VER namespace { @@ -1114,8 +1114,19 @@ int EXIFInfo::parseFromXMPSegmentXML(const char* szXML, unsigned len) { if (element == NULL || (szAttribute = element->GetText()) == NULL) return false; } - value = strtoul(szAttribute, NULL, 0); return true; - return false; + value = strtoul(szAttribute, NULL, 0); + return true; + } + // same as previous function but with std::string + static bool Value(const tinyxml2::XMLElement* document, const char* name, std::string& value) { + const char* szAttribute = document->Attribute(name); + if (szAttribute == NULL) { + const tinyxml2::XMLElement* const element(document->FirstChildElement(name)); + if (element == NULL || (szAttribute = element->GetText()) == NULL) + return false; + } + value = std::string(szAttribute); + return true; } }; const char* szAbout(document->Attribute("rdf:about")); @@ -1128,6 +1139,28 @@ int EXIFInfo::parseFromXMPSegmentXML(const char* szXML, unsigned len) { ParseXMP::Value(document, "drone-dji:CalibratedFocalLength", Calibration.FocalLength); ParseXMP::Value(document, "drone-dji:CalibratedOpticalCenterX", Calibration.OpticalCenterX); ParseXMP::Value(document, "drone-dji:CalibratedOpticalCenterY", Calibration.OpticalCenterY); + std::string dewarpData; + ParseXMP::Value(document, "drone-dji:DewarpFlag", Distortion.DewarpFlag); + ParseXMP::Value(document, "drone-dji:DewarpData", dewarpData); + std::vector distortionParams; + size_t pos = dewarpData.find(';'); + if (pos != std::string::npos) { + std::stringstream ss(dewarpData.substr(pos + 1)); + std::string item; + while (std::getline(ss, item, ',')) { + distortionParams.push_back(std::stod(item)); + } + } + // The DewarpData string has the following format: + // date;Fx,Fy,Cx,Cy,K1,K2,P1,P2,K3 + // , where Fx, Fy are focal lengths in pixels, Cx, Cy are optical center offsets from the image center in pixels + if (distortionParams.size() == 9) { + Distortion.K1 = distortionParams[4]; + Distortion.K2 = distortionParams[5]; + Distortion.P1 = distortionParams[6]; + Distortion.P2 = distortionParams[7]; + Distortion.K3 = distortionParams[8]; + } } else if (0 == strcasecmp(Make.c_str(), "senseFly") || 0 == strcasecmp(Make.c_str(), "Sentera")) { ParseXMP::Value(document, "Camera:Roll", GeoLocation.RollDegree); @@ -1165,6 +1198,17 @@ int EXIFInfo::parseFromXMPSegmentXML(const char* szXML, unsigned len) { #endif // TINYEXIF_NO_XMP_SUPPORT +bool EXIFInfo::Calibration_t::hasCalibration() const { + return FocalLength > 0.0 && OpticalCenterX > 0.0 && OpticalCenterY > 0.0; +} + +bool EXIFInfo::Distortion_t::hasDewarpFlag() const { + return DewarpFlag != UINT32_MAX; +} +bool EXIFInfo::Distortion_t::hasDistortion() const { + return K1 != 0.0 || K2 != 0.0 || P1 != 0.0 || P2 != 0.0 || K3 != 0.0; +} + void EXIFInfo::Geolocation_t::parseCoords() { // Convert GPS latitude if (LatComponents.degrees != DBL_MAX || @@ -1210,6 +1254,9 @@ bool EXIFInfo::Geolocation_t::hasOrientation() const { bool EXIFInfo::Geolocation_t::hasSpeed() const { return SpeedX != DBL_MAX && SpeedY != DBL_MAX && SpeedZ != DBL_MAX; } +bool EXIFInfo::Geolocation_t::hasAccuracy() const { + return AccuracyXY != 0 && AccuracyZ != 0; +} bool EXIFInfo::GPano_t::hasPosePitchDegrees() const { return PosePitchDegrees != DBL_MAX; @@ -1306,6 +1353,14 @@ void EXIFInfo::clear() { GeoLocation.LonComponents.seconds = 0; GeoLocation.LonComponents.direction = 0; + // Distortion + Distortion.DewarpFlag = UINT32_MAX; + Distortion.K1 = 0; + Distortion.K2 = 0; + Distortion.P1 = 0; + Distortion.P2 = 0; + Distortion.K3 = 0; + // GPano GPano.PosePitchDegrees = DBL_MAX; GPano.PoseRollDegrees = DBL_MAX; diff --git a/TinyEXIF.h b/TinyEXIF.h index a3a878e..4082336 100644 --- a/TinyEXIF.h +++ b/TinyEXIF.h @@ -251,7 +251,21 @@ public: double FocalLength; // Focal length (pixels) double OpticalCenterX; // Principal point X (pixels) double OpticalCenterY; // Principal point Y (pixels) + bool hasCalibration() const; // Return true if FocalLength, OpticalCenterX, OpticalCenterY are available (nonzero) } Calibration; + struct TINYEXIF_LIB Distortion_t { // Lens distortion information + uint32_t DewarpFlag; // Dewarp flag - indicates whether undistortion has been applied to the image + // UINT32_MAX: flag missing from EXIF data + // 0: no dewarp (raw image) - the image is distorted, should also have coefficients + // 1: dewarp applied (undistorted image) + double K1; + double K2; + double P1; + double P2; + double K3; + bool hasDewarpFlag() const; // Return true if DewarpFlag is available + bool hasDistortion() const; // Return true if any of K1, K2, P1, P2, K3 are available + } Distortion; struct TINYEXIF_LIB LensInfo_t { // Lens information double FStopMin; // Min aperture (f-stop) double FStopMax; // Max aperture (f-stop) @@ -302,6 +316,7 @@ public: bool hasRelativeAltitude()const;// Return true if (rel_alt) is available bool hasOrientation() const; // Return true if (roll,yaw,pitch) is available bool hasSpeed() const; // Return true if (speedX,speedY,speedZ) is available + bool hasAccuracy() const; // Return true if (accuracyXY,accuracyZ) is available } GeoLocation; struct TINYEXIF_LIB GPano_t { // Spherical metadata. https://developers.google.com/streetview/spherical-metadata double PosePitchDegrees; // Pitch, measured in degrees above the horizon, for the center in the image. Value must be >= -90 and <= 90. diff --git a/main.cpp b/main.cpp index ddd5212..7e57fad 100644 --- a/main.cpp +++ b/main.cpp @@ -130,5 +130,11 @@ int main(int argc, const char** argv) std::cout << "GPano.PosePitchDegrees " << imageEXIF.GPano.PosePitchDegrees << "\n"; if (imageEXIF.GPano.hasPoseRollDegrees()) std::cout << "GPano.PoseRollDegrees " << imageEXIF.GPano.PoseRollDegrees << "\n"; + if (imageEXIF.Distortion.hasDewarpFlag()) + std::cout << "Distortion.DewarpFlag " << imageEXIF.Distortion.DewarpFlag << "\n"; + if (imageEXIF.Distortion.hasDistortion()) + std::cout << "Distortion [K1 K2 P1 P2 K3] " << std::setprecision(6) + << imageEXIF.Distortion.K1 << " " << imageEXIF.Distortion.K2 << " " << imageEXIF.Distortion.P1 + << " " << imageEXIF.Distortion.P2 << " " << imageEXIF.Distortion.K3 << "\n"; return EXIT_SUCCESS; }