Skip to content

Commit 63da041

Browse files
authored
Fix: hasNormalization boolean is never set when building normalized transformed point (#1809)
* set hasNormalized boolean when normalizing transformed points. * Add test
1 parent 8aa89fb commit 63da041

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

src/pipeline/datatype/ImgTransformations.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ dai::Point2f ImgTransformation::remapPointTo(const ImgTransformation& to, dai::P
378378
transformed.x /= to.width;
379379
transformed.y /= to.height;
380380
transformed.normalized = true;
381+
transformed.hasNormalized = true;
381382
}
382383
return transformed;
383384
}
@@ -452,6 +453,7 @@ dai::Point2f ImgTransformation::projectPointTo(const ImgTransformation& to, dai:
452453
targetPoint.x /= to.width;
453454
targetPoint.y /= to.height;
454455
targetPoint.normalized = true;
456+
targetPoint.hasNormalized = true;
455457
}
456458
return targetPoint;
457459
}

tests/src/onhost_tests/normalization_test.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,35 @@ TEST_CASE("Normalized rect remap") {
7878
REQUIRE(float_eq(rect.size.width, 0.8));
7979
REQUIRE(float_eq(rect.size.height, 1.0));
8080
}
81+
82+
TEST_CASE("Normalized point outputs stay normalized outside unit range") {
83+
dai::Extrinsics extrinsics{{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, {0, 0, 0}, dai::CameraBoardSocket::CAM_A};
84+
dai::ImgTransformation transformFrom(2000, 1000);
85+
dai::ImgTransformation transformTo(2000, 1000);
86+
transformFrom.setExtrinsics(extrinsics);
87+
transformTo.setExtrinsics(extrinsics);
88+
transformTo.addScale(2, 2);
89+
transformTo.addCrop(0, 0, 2000, 1000);
90+
91+
SECTION("remapPointTo preserves normalized flag for values above 1") {
92+
dai::Point2f pt(0.75, 0.75, true);
93+
const auto remapped = transformFrom.remapPointTo(transformTo, pt);
94+
95+
REQUIRE(float_eq(remapped.x, 1.5));
96+
REQUIRE(float_eq(remapped.y, 1.5));
97+
REQUIRE(remapped.normalized);
98+
REQUIRE(remapped.hasNormalized);
99+
REQUIRE(remapped.isNormalized());
100+
}
101+
102+
SECTION("projectPointTo preserves normalized flag for values above 1") {
103+
dai::Point2f pt(0.75, 0.75, true);
104+
const auto projected = transformFrom.projectPointTo(transformTo, pt, 1000.0f);
105+
106+
REQUIRE(float_eq(projected.x, 1.5));
107+
REQUIRE(float_eq(projected.y, 1.5));
108+
REQUIRE(projected.normalized);
109+
REQUIRE(projected.hasNormalized);
110+
REQUIRE(projected.isNormalized());
111+
}
112+
}

0 commit comments

Comments
 (0)