mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.4 KiB
66 lines
2.4 KiB
// This file is part of OpenCV project. |
|
// It is subject to the license terms in the LICENSE file found in the top-level directory |
|
// of this distribution and at http://opencv.org/license.html. |
|
// |
|
// Copyright (C) 2017, Intel Corporation, all rights reserved. |
|
// Third party copyrights are property of their respective owners. |
|
|
|
#include "precomp.hpp" |
|
#include "nms.inl.hpp" |
|
|
|
#include <opencv2/imgproc.hpp> |
|
|
|
namespace cv |
|
{ |
|
namespace dnn |
|
{ |
|
CV__DNN_EXPERIMENTAL_NS_BEGIN |
|
|
|
template <typename T> |
|
static inline float rectOverlap(const T& a, const T& b) |
|
{ |
|
return 1.f - static_cast<float>(jaccardDistance(a, b)); |
|
} |
|
|
|
void NMSBoxes(const std::vector<Rect>& bboxes, const std::vector<float>& scores, |
|
const float score_threshold, const float nms_threshold, |
|
std::vector<int>& indices, const float eta, const int top_k) |
|
{ |
|
CV_Assert_N(bboxes.size() == scores.size(), score_threshold >= 0, |
|
nms_threshold >= 0, eta > 0); |
|
NMSFast_(bboxes, scores, score_threshold, nms_threshold, eta, top_k, indices, rectOverlap); |
|
} |
|
|
|
void NMSBoxes(const std::vector<Rect2d>& bboxes, const std::vector<float>& scores, |
|
const float score_threshold, const float nms_threshold, |
|
std::vector<int>& indices, const float eta, const int top_k) |
|
{ |
|
CV_Assert_N(bboxes.size() == scores.size(), score_threshold >= 0, |
|
nms_threshold >= 0, eta > 0); |
|
NMSFast_(bboxes, scores, score_threshold, nms_threshold, eta, top_k, indices, rectOverlap); |
|
} |
|
|
|
static inline float rotatedRectIOU(const RotatedRect& a, const RotatedRect& b) |
|
{ |
|
std::vector<Point2f> inter; |
|
int res = rotatedRectangleIntersection(a, b, inter); |
|
if (inter.empty() || res == INTERSECT_NONE) |
|
return 0.0f; |
|
if (res == INTERSECT_FULL) |
|
return 1.0f; |
|
float interArea = contourArea(inter); |
|
return interArea / (a.size.area() + b.size.area() - interArea); |
|
} |
|
|
|
void NMSBoxes(const std::vector<RotatedRect>& bboxes, const std::vector<float>& scores, |
|
const float score_threshold, const float nms_threshold, |
|
std::vector<int>& indices, const float eta, const int top_k) |
|
{ |
|
CV_Assert_N(bboxes.size() == scores.size(), score_threshold >= 0, |
|
nms_threshold >= 0, eta > 0); |
|
NMSFast_(bboxes, scores, score_threshold, nms_threshold, eta, top_k, indices, rotatedRectIOU); |
|
} |
|
|
|
CV__DNN_EXPERIMENTAL_NS_END |
|
}// dnn |
|
}// cv
|
|
|