Skip to content

Commit 3150e6c

Browse files
Update distortion parameter return type/order
1 parent a7d95f8 commit 3150e6c

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

imgparse/parser.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from imgparse.types import (
1616
AltitudeSource,
1717
Dimensions,
18+
DistortionParams,
1819
Euler,
1920
PixelCoords,
2021
Version,
@@ -274,11 +275,11 @@ def principal_point(self) -> PixelCoords:
274275
"Couldn't find the principal point tag. Sensor might not be supported"
275276
)
276277

277-
def distortion_parameters(self) -> list[float]:
278+
def distortion_parameters(self) -> DistortionParams:
278279
"""
279280
Get the radial distortion parameters of the sensor that took the image.
280281
281-
Returns distortion params in [k1, k2, k3, p1, p2] order.
282+
Returns distortion params in [k1, k2, p1, p2, k3] order.
282283
"""
283284
try:
284285
if self.make() == "DJI":
@@ -293,11 +294,11 @@ def distortion_parameters(self) -> list[float]:
293294
raise ValueError("Expected 9 numeric values after semicolon")
294295

295296
k1, k2, p1, p2, k3 = values[4:9]
296-
return [k1, k2, k3, p1, p2]
297+
return DistortionParams(k1, k2, p1, p2, k3)
297298
elif self.make() == "Sentera":
298-
return list(
299-
map(float, str(self.xmp_data[self.xmp_tags.DISTORTION]).split(","))
300-
)
299+
distortion_data = str(self.xmp_data[self.xmp_tags.DISTORTION])
300+
k1, k2, k3, p1, p2 = [float(v) for v in distortion_data.split(",")]
301+
return DistortionParams(k1, k2, p1, p2, k3)
301302
raise ValueError("Sensor isn't supported")
302303
except (KeyError, ValueError):
303304
raise ParsingError(

imgparse/types.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ class Version(NamedTuple):
5050
patch: int
5151

5252

53+
class DistortionParams(NamedTuple):
54+
"""Distortion parameters in OpenCV order."""
55+
56+
k1: float
57+
k2: float
58+
p1: float
59+
p2: float
60+
k3: float
61+
62+
5363
class AltitudeSource(Enum):
5464
"""Altitude source enum."""
5565

tests/test_imgparse.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,12 @@ def test_get_principal_point_bad(bad_sentera_parser: MetadataParser) -> None:
356356

357357
def test_get_distortion_params_65r(sentera_65r_parser: MetadataParser) -> None:
358358
params = sentera_65r_parser.distortion_parameters()
359-
assert params == [-0.127, 0.126, 0.097, 0.0, 0.0]
359+
assert params == (-0.127, 0.126, 0.0, 0.0, 0.097)
360+
361+
362+
def test_get_distortion_params_dji(dji_ms_parser: MetadataParser) -> None:
363+
params = dji_ms_parser.distortion_parameters()
364+
assert params == (-0.412558, 0.3754, -2.47e-05, -2.47e-05, -0.457753)
360365

361366

362367
def test_get_distortion_params_bad(bad_sentera_parser: MetadataParser) -> None:

0 commit comments

Comments
 (0)