Merge pull request #17737 from pemmanuelviel:pev--fix-trees-descent

pull/17785/head^2
Alexander Alekhin 5 years ago
commit 5bc6b6fc26
  1. 8
      modules/flann/include/opencv2/flann/hierarchical_clustering_index.h

@ -547,7 +547,7 @@ public:
void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams) CV_OVERRIDE void findNeighbors(ResultSet<DistanceType>& result, const ElementType* vec, const SearchParams& searchParams) CV_OVERRIDE
{ {
int maxChecks = get_param(searchParams,"checks",32); const int maxChecks = get_param(searchParams,"checks",32);
// Priority queue storing intermediate branches in the best-bin-first search // Priority queue storing intermediate branches in the best-bin-first search
Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_); Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);
@ -556,6 +556,8 @@ public:
int checks = 0; int checks = 0;
for (int i=0; i<trees_; ++i) { for (int i=0; i<trees_; ++i) {
findNN(root[i], result, vec, checks, maxChecks, heap, checked); findNN(root[i], result, vec, checks, maxChecks, heap, checked);
if ((checks >= maxChecks) && result.full())
break;
} }
BranchSt branch; BranchSt branch;
@ -747,8 +749,8 @@ private:
Heap<BranchSt>* heap, std::vector<bool>& checked) Heap<BranchSt>* heap, std::vector<bool>& checked)
{ {
if (node->childs==NULL) { if (node->childs==NULL) {
if (checks>=maxChecks) { if ((checks>=maxChecks) && result.full()) {
if (result.full()) return; return;
} }
for (int i=0; i<node->size; ++i) { for (int i=0; i<node->size; ++i) {
int index = node->indices[i]; int index = node->indices[i];

Loading…
Cancel
Save