Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
37b1a756
Commit
37b1a756
authored
Aug 18, 2014
by
Dmitriy Anisimov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
first version of moving KDTree from core to ml
parent
0ffc53ba
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
94 additions
and
93 deletions
+94
-93
core.hpp
modules/core/include/opencv2/core.hpp
+0
-87
CMakeLists.txt
modules/features2d/CMakeLists.txt
+1
-1
test_nearestneighbors.cpp
modules/features2d/test/test_nearestneighbors.cpp
+3
-2
test_precomp.hpp
modules/features2d/test/test_precomp.hpp
+1
-0
ml.hpp
modules/ml/include/opencv2/ml.hpp
+84
-0
kdtree.cpp
modules/ml/src/kdtree.cpp
+5
-3
No files found.
modules/core/include/opencv2/core.hpp
View file @
37b1a756
...
...
@@ -747,93 +747,6 @@ public:
int
minusStep
,
plusStep
;
};
/*!
Fast Nearest Neighbor Search Class.
The class implements D. Lowe BBF (Best-Bin-First) algorithm for the last
approximate (or accurate) nearest neighbor search in multi-dimensional spaces.
First, a set of vectors is passed to KDTree::KDTree() constructor
or KDTree::build() method, where it is reordered.
Then arbitrary vectors can be passed to KDTree::findNearest() methods, which
find the K nearest neighbors among the vectors from the initial set.
The user can balance between the speed and accuracy of the search by varying Emax
parameter, which is the number of leaves that the algorithm checks.
The larger parameter values yield more accurate results at the expense of lower processing speed.
\code
KDTree T(points, false);
const int K = 3, Emax = INT_MAX;
int idx[K];
float dist[K];
T.findNearest(query_vec, K, Emax, idx, 0, dist);
CV_Assert(dist[0] <= dist[1] && dist[1] <= dist[2]);
\endcode
*/
class
CV_EXPORTS_W
KDTree
{
public
:
/*!
The node of the search tree.
*/
struct
Node
{
Node
()
:
idx
(
-
1
),
left
(
-
1
),
right
(
-
1
),
boundary
(
0.
f
)
{}
Node
(
int
_idx
,
int
_left
,
int
_right
,
float
_boundary
)
:
idx
(
_idx
),
left
(
_left
),
right
(
_right
),
boundary
(
_boundary
)
{}
//! split dimension; >=0 for nodes (dim), < 0 for leaves (index of the point)
int
idx
;
//! node indices of the left and the right branches
int
left
,
right
;
//! go to the left if query_vec[node.idx]<=node.boundary, otherwise go to the right
float
boundary
;
};
//! the default constructor
CV_WRAP
KDTree
();
//! the full constructor that builds the search tree
CV_WRAP
KDTree
(
InputArray
points
,
bool
copyAndReorderPoints
=
false
);
//! the full constructor that builds the search tree
CV_WRAP
KDTree
(
InputArray
points
,
InputArray
_labels
,
bool
copyAndReorderPoints
=
false
);
//! builds the search tree
CV_WRAP
void
build
(
InputArray
points
,
bool
copyAndReorderPoints
=
false
);
//! builds the search tree
CV_WRAP
void
build
(
InputArray
points
,
InputArray
labels
,
bool
copyAndReorderPoints
=
false
);
//! finds the K nearest neighbors of "vec" while looking at Emax (at most) leaves
CV_WRAP
int
findNearest
(
InputArray
vec
,
int
K
,
int
Emax
,
OutputArray
neighborsIdx
,
OutputArray
neighbors
=
noArray
(),
OutputArray
dist
=
noArray
(),
OutputArray
labels
=
noArray
())
const
;
//! finds all the points from the initial set that belong to the specified box
CV_WRAP
void
findOrthoRange
(
InputArray
minBounds
,
InputArray
maxBounds
,
OutputArray
neighborsIdx
,
OutputArray
neighbors
=
noArray
(),
OutputArray
labels
=
noArray
())
const
;
//! returns vectors with the specified indices
CV_WRAP
void
getPoints
(
InputArray
idx
,
OutputArray
pts
,
OutputArray
labels
=
noArray
())
const
;
//! return a vector with the specified index
const
float
*
getPoint
(
int
ptidx
,
int
*
label
=
0
)
const
;
//! returns the search space dimensionality
CV_WRAP
int
dims
()
const
;
std
::
vector
<
Node
>
nodes
;
//!< all the tree nodes
CV_PROP
Mat
points
;
//!< all the points. It can be a reordered copy of the input vector set or the original vector set.
CV_PROP
std
::
vector
<
int
>
labels
;
//!< the parallel array of labels.
CV_PROP
int
maxDepth
;
//!< maximum depth of the search tree. Do not modify it
CV_PROP_RW
int
normType
;
//!< type of the distance (cv::NORM_L1 or cv::NORM_L2) used for search. Initially set to cv::NORM_L2, but you can modify it
};
/*!
Random Number Generator
...
...
modules/features2d/CMakeLists.txt
View file @
37b1a756
set
(
the_description
"2D Features Framework"
)
ocv_define_module
(
features2d opencv_imgproc opencv_flann OPTIONAL opencv_highgui
)
ocv_define_module
(
features2d opencv_imgproc opencv_
ml opencv_
flann OPTIONAL opencv_highgui
)
modules/features2d/test/test_nearestneighbors.cpp
View file @
37b1a756
...
...
@@ -12,6 +12,7 @@
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2014, Itseez Inc, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
...
...
@@ -167,13 +168,13 @@ protected:
virtual
int
findNeighbors
(
Mat
&
points
,
Mat
&
neighbors
);
virtual
int
checkFindBoxed
();
virtual
void
releaseModel
();
KDTree
*
tr
;
ml
::
KDTree
*
tr
;
};
void
CV_KDTreeTest_CPP
::
createModel
(
const
Mat
&
data
)
{
tr
=
new
KDTree
(
data
,
false
);
tr
=
new
ml
::
KDTree
(
data
,
false
);
}
int
CV_KDTreeTest_CPP
::
checkGetPoins
(
const
Mat
&
data
)
...
...
modules/features2d/test/test_precomp.hpp
View file @
37b1a756
...
...
@@ -13,6 +13,7 @@
#include "opencv2/imgproc.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/ml.hpp"
#include <iostream>
#endif
modules/ml/include/opencv2/ml.hpp
View file @
37b1a756
...
...
@@ -12,6 +12,7 @@
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Copyright (C) 2014, Itseez Inc, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
...
...
@@ -566,6 +567,89 @@ public:
static
Ptr
<
ANN_MLP
>
create
(
const
Params
&
params
=
Params
());
};
/*!
Fast Nearest Neighbor Search Class.
The class implements D. Lowe BBF (Best-Bin-First) algorithm for the last
approximate (or accurate) nearest neighbor search in multi-dimensional spaces.
First, a set of vectors is passed to KDTree::KDTree() constructor
or KDTree::build() method, where it is reordered.
Then arbitrary vectors can be passed to KDTree::findNearest() methods, which
find the K nearest neighbors among the vectors from the initial set.
The user can balance between the speed and accuracy of the search by varying Emax
parameter, which is the number of leaves that the algorithm checks.
The larger parameter values yield more accurate results at the expense of lower processing speed.
\code
KDTree T(points, false);
const int K = 3, Emax = INT_MAX;
int idx[K];
float dist[K];
T.findNearest(query_vec, K, Emax, idx, 0, dist);
CV_Assert(dist[0] <= dist[1] && dist[1] <= dist[2]);
\endcode
*/
class
CV_EXPORTS_W
KDTree
{
public
:
/*!
The node of the search tree.
*/
struct
Node
{
Node
()
:
idx
(
-
1
),
left
(
-
1
),
right
(
-
1
),
boundary
(
0.
f
)
{}
Node
(
int
_idx
,
int
_left
,
int
_right
,
float
_boundary
)
:
idx
(
_idx
),
left
(
_left
),
right
(
_right
),
boundary
(
_boundary
)
{}
//! split dimension; >=0 for nodes (dim), < 0 for leaves (index of the point)
int
idx
;
//! node indices of the left and the right branches
int
left
,
right
;
//! go to the left if query_vec[node.idx]<=node.boundary, otherwise go to the right
float
boundary
;
};
//! the default constructor
CV_WRAP
KDTree
();
//! the full constructor that builds the search tree
CV_WRAP
KDTree
(
InputArray
points
,
bool
copyAndReorderPoints
=
false
);
//! the full constructor that builds the search tree
CV_WRAP
KDTree
(
InputArray
points
,
InputArray
_labels
,
bool
copyAndReorderPoints
=
false
);
//! builds the search tree
CV_WRAP
void
build
(
InputArray
points
,
bool
copyAndReorderPoints
=
false
);
//! builds the search tree
CV_WRAP
void
build
(
InputArray
points
,
InputArray
labels
,
bool
copyAndReorderPoints
=
false
);
//! finds the K nearest neighbors of "vec" while looking at Emax (at most) leaves
CV_WRAP
int
findNearest
(
InputArray
vec
,
int
K
,
int
Emax
,
OutputArray
neighborsIdx
,
OutputArray
neighbors
=
noArray
(),
OutputArray
dist
=
noArray
(),
OutputArray
labels
=
noArray
())
const
;
//! finds all the points from the initial set that belong to the specified box
CV_WRAP
void
findOrthoRange
(
InputArray
minBounds
,
InputArray
maxBounds
,
OutputArray
neighborsIdx
,
OutputArray
neighbors
=
noArray
(),
OutputArray
labels
=
noArray
())
const
;
//! returns vectors with the specified indices
CV_WRAP
void
getPoints
(
InputArray
idx
,
OutputArray
pts
,
OutputArray
labels
=
noArray
())
const
;
//! return a vector with the specified index
const
float
*
getPoint
(
int
ptidx
,
int
*
label
=
0
)
const
;
//! returns the search space dimensionality
CV_WRAP
int
dims
()
const
;
std
::
vector
<
Node
>
nodes
;
//!< all the tree nodes
CV_PROP
Mat
points
;
//!< all the points. It can be a reordered copy of the input vector set or the original vector set.
CV_PROP
std
::
vector
<
int
>
labels
;
//!< the parallel array of labels.
CV_PROP
int
maxDepth
;
//!< maximum depth of the search tree. Do not modify it
CV_PROP_RW
int
normType
;
//!< type of the distance (cv::NORM_L1 or cv::NORM_L2) used for search. Initially set to cv::NORM_L2, but you can modify it
};
/****************************************************************************************\
* Auxilary functions declarations *
\****************************************************************************************/
...
...
modules/
core
/src/kdtree.cpp
→
modules/
ml
/src/kdtree.cpp
View file @
37b1a756
...
...
@@ -13,6 +13,7 @@
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Copyright (C) 2014, Itseez Inc, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
...
...
@@ -45,10 +46,10 @@
namespace
cv
{
namespace
ml
{
// This is reimplementation of kd-trees from cvkdtree*.* by Xavier Delacour, cleaned-up and
// adopted to work with the new OpenCV data structures. It's in cxcore to be shared by
// both cv (CvFeatureTree) and ml (kNN).
// adopted to work with the new OpenCV data structures.
// The algorithm is taken from:
// J.S. Beis and D.G. Lowe. Shape indexing using approximate nearest-neighbor search
...
...
@@ -529,3 +530,4 @@ int KDTree::dims() const
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment