mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 14:13:15 +08:00
Fix trees parsing behavior in hierarchical_clustering_index:
Before, when maxCheck was reached in the first descent of a tree, time was still wasted parsing the next trees till their best leaves whose points were not used at all.
This commit is contained in:
parent
73f7d091f8
commit
728684840c
@ -548,7 +548,7 @@ public:
|
||||
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
|
||||
Heap<BranchSt>* heap = new Heap<BranchSt>((int)size_);
|
||||
@ -557,6 +557,8 @@ public:
|
||||
int checks = 0;
|
||||
for (int i=0; i<trees_; ++i) {
|
||||
findNN(root[i], result, vec, checks, maxChecks, heap, checked);
|
||||
if ((checks >= maxChecks) && result.full())
|
||||
break;
|
||||
}
|
||||
|
||||
BranchSt branch;
|
||||
@ -748,8 +750,8 @@ private:
|
||||
Heap<BranchSt>* heap, std::vector<bool>& checked)
|
||||
{
|
||||
if (node->childs==NULL) {
|
||||
if (checks>=maxChecks) {
|
||||
if (result.full()) return;
|
||||
if ((checks>=maxChecks) && result.full()) {
|
||||
return;
|
||||
}
|
||||
for (int i=0; i<node->size; ++i) {
|
||||
int index = node->indices[i];
|
||||
|
Loading…
Reference in New Issue
Block a user