#include "yolo_nms_iou.h" #include #include int main() { constexpr float half_pi = 1.57079632679f; constexpr float nms_threshold = 0.4f; const yolo_nms::box first{300.0f, 1100.0f, 300.0f, 50.0f, half_pi}; const yolo_nms::box adjacent{350.0f, 1100.0f, 300.0f, 50.0f, half_pi}; const float detect_overlap = yolo_nms::overlap_iou(YOLO_TASK_DETECT, first, adjacent); const float obb_overlap = yolo_nms::overlap_iou(YOLO_TASK_OBB, first, adjacent); if (detect_overlap <= nms_threshold || obb_overlap >= 0.01f) { std::cerr << "Adjacent vertical OBB overlap dispatch failed: axis=" << detect_overlap << " rotated=" << obb_overlap << '\n'; return 1; } const float identical_overlap = yolo_nms::rotated_iou(first, first); if (std::abs(identical_overlap - 1.0f) > 1e-5f) { std::cerr << "Identical rotated boxes must have IoU 1, got " << identical_overlap << '\n'; return 2; } const yolo_nms::box axis_first{10.0f, 20.0f, 100.0f, 80.0f, 0.0f}; const yolo_nms::box axis_second{30.0f, 40.0f, 100.0f, 80.0f, 0.0f}; const float axis_overlap = yolo_nms::axis_aligned_iou(axis_first, axis_second); const float zero_angle_rotated_overlap = yolo_nms::rotated_iou(axis_first, axis_second); if (std::abs(axis_overlap - zero_angle_rotated_overlap) > 1e-5f) { std::cerr << "Zero-angle rotated IoU diverged from axis IoU: axis=" << axis_overlap << " rotated=" << zero_angle_rotated_overlap << '\n'; return 3; } std::cout << "OBB_NMS_IOU_TEST_OK axis=" << detect_overlap << " rotated=" << obb_overlap << '\n'; return 0; }