Skip to content

Commit 1aa5bb9

Browse files
authored
fix(object_recognition_utils): check polygon area on iou calculation (#6701)
* feat(object_recognition_utils): check input polygon on IoU calculations Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> * fix: MIN_AREA close to the epsilon of float 1e-6 Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp> --------- Signed-off-by: Taekjin LEE <taekjin.lee@tier4.jp>
1 parent 8948859 commit 1aa5bb9

File tree

1 file changed

+15
-5
lines changed
  • common/object_recognition_utils/include/object_recognition_utils

1 file changed

+15
-5
lines changed

common/object_recognition_utils/include/object_recognition_utils/matching.hpp

+15-5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
namespace object_recognition_utils
3030
{
3131
using tier4_autoware_utils::Polygon2d;
32+
// minimum area to avoid division by zero
33+
static const double MIN_AREA = 1e-6;
3234

3335
inline double getConvexShapeArea(const Polygon2d & source_polygon, const Polygon2d & target_polygon)
3436
{
@@ -66,10 +68,12 @@ template <class T1, class T2>
6668
double get2dIoU(const T1 source_object, const T2 target_object, const double min_union_area = 0.01)
6769
{
6870
const auto source_polygon = tier4_autoware_utils::toPolygon2d(source_object);
71+
if (boost::geometry::area(source_polygon) < MIN_AREA) return 0.0;
6972
const auto target_polygon = tier4_autoware_utils::toPolygon2d(target_object);
73+
if (boost::geometry::area(target_polygon) < MIN_AREA) return 0.0;
7074

7175
const double intersection_area = getIntersectionArea(source_polygon, target_polygon);
72-
if (intersection_area == 0.0) return 0.0;
76+
if (intersection_area < MIN_AREA) return 0.0;
7377
const double union_area = getUnionArea(source_polygon, target_polygon);
7478

7579
const double iou =
@@ -81,7 +85,9 @@ template <class T1, class T2>
8185
double get2dGeneralizedIoU(const T1 & source_object, const T2 & target_object)
8286
{
8387
const auto source_polygon = tier4_autoware_utils::toPolygon2d(source_object);
88+
if (boost::geometry::area(source_polygon) < MIN_AREA) return 0.0;
8489
const auto target_polygon = tier4_autoware_utils::toPolygon2d(target_object);
90+
if (boost::geometry::area(target_polygon) < MIN_AREA) return 0.0;
8591

8692
const double intersection_area = getIntersectionArea(source_polygon, target_polygon);
8793
const double union_area = getUnionArea(source_polygon, target_polygon);
@@ -95,11 +101,13 @@ template <class T1, class T2>
95101
double get2dPrecision(const T1 source_object, const T2 target_object)
96102
{
97103
const auto source_polygon = tier4_autoware_utils::toPolygon2d(source_object);
104+
const double source_area = boost::geometry::area(source_polygon);
105+
if (source_area < MIN_AREA) return 0.0;
98106
const auto target_polygon = tier4_autoware_utils::toPolygon2d(target_object);
107+
if (boost::geometry::area(target_polygon) < MIN_AREA) return 0.0;
99108

100109
const double intersection_area = getIntersectionArea(source_polygon, target_polygon);
101-
if (intersection_area == 0.0) return 0.0;
102-
const double source_area = boost::geometry::area(source_polygon);
110+
if (intersection_area < MIN_AREA) return 0.0;
103111

104112
return std::min(1.0, intersection_area / source_area);
105113
}
@@ -108,11 +116,13 @@ template <class T1, class T2>
108116
double get2dRecall(const T1 source_object, const T2 target_object)
109117
{
110118
const auto source_polygon = tier4_autoware_utils::toPolygon2d(source_object);
119+
if (boost::geometry::area(source_polygon) < MIN_AREA) return 0.0;
111120
const auto target_polygon = tier4_autoware_utils::toPolygon2d(target_object);
121+
const double target_area = boost::geometry::area(target_polygon);
122+
if (target_area < MIN_AREA) return 0.0;
112123

113124
const double intersection_area = getIntersectionArea(source_polygon, target_polygon);
114-
if (intersection_area == 0.0) return 0.0;
115-
const double target_area = boost::geometry::area(target_polygon);
125+
if (intersection_area < MIN_AREA) return 0.0;
116126

117127
return std::min(1.0, intersection_area / target_area);
118128
}

0 commit comments

Comments
 (0)