feature_detection_and_description.rst 23.8 KB
Newer Older
1 2 3 4 5
Feature Detection and Description
=================================

.. highlight:: cpp

6

7

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
8 9 10
cuda::FAST_CUDA
---------------
.. ocv:class:: cuda::FAST_CUDA
11 12 13

Class used for corner detection using the FAST algorithm. ::

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
14
    class FAST_CUDA
15 16 17 18 19 20 21 22 23 24 25 26
    {
    public:
        enum
        {
            LOCATION_ROW = 0,
            RESPONSE_ROW,
            ROWS_COUNT
        };

        // all features have same size
        static const int FEATURE_SIZE = 7;

27
        explicit FAST_CUDA(int threshold, bool nonmaxSuppression = true,
28 29
                          double keypointsRatio = 0.05);

30 31
        void operator ()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);
        void operator ()(const GpuMat& image, const GpuMat& mask,
32 33
                         std::vector<KeyPoint>& keypoints);

34
        void downloadKeypoints(const GpuMat& d_keypoints,
35 36
                               std::vector<KeyPoint>& keypoints);

37
        void convertKeypoints(const Mat& h_keypoints,
38 39 40 41
                              std::vector<KeyPoint>& keypoints);

        void release();

Ilya Lavrenov's avatar
Ilya Lavrenov committed
42
        bool nonmaxSuppression;
43 44 45 46 47 48 49 50 51 52 53

        int threshold;

        double keypointsRatio;

        int calcKeyPointsLocation(const GpuMat& image, const GpuMat& mask);

        int getKeyPoints(GpuMat& keypoints);
    };


Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
54
The class ``FAST_CUDA`` implements FAST corner detection algorithm.
55 56 57 58 59

.. seealso:: :ocv:func:`FAST`



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
60 61
cuda::FAST_CUDA::FAST_CUDA
--------------------------
62 63
Constructor.

64
.. ocv:function:: cuda::FAST_CUDA::FAST_CUDA(int threshold, bool nonmaxSuppression = true, double keypointsRatio = 0.05)
65 66 67

    :param threshold: Threshold on difference between intensity of the central pixel and pixels on a circle around this pixel.

Ilya Lavrenov's avatar
Ilya Lavrenov committed
68
    :param nonmaxSuppression: If it is true, non-maximum suppression is applied to detected corners (keypoints).
69 70 71 72 73

    :param keypointsRatio: Inner buffer size for keypoints store is determined as (keypointsRatio * image_width * image_height).



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
74 75
cuda::FAST_CUDA::operator ()
----------------------------
76 77
Finds the keypoints using FAST detector.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
78 79
.. ocv:function:: void cuda::FAST_CUDA::operator ()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints)
.. ocv:function:: void cuda::FAST_CUDA::operator ()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints)
80 81 82 83 84

    :param image: Image where keypoints (corners) are detected. Only 8-bit grayscale images are supported.

    :param mask: Optional input mask that marks the regions where we should detect features.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
85
    :param keypoints: The output vector of keypoints. Can be stored both in CPU and GPU memory. For GPU memory:
86 87

            * keypoints.ptr<Vec2s>(LOCATION_ROW)[i] will contain location of i'th point
88
            * keypoints.ptr<float>(RESPONSE_ROW)[i] will contain response of i'th point (if non-maximum suppression is applied)
89 90 91



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
92 93
cuda::FAST_CUDA::downloadKeypoints
----------------------------------
94 95
Download keypoints from GPU to CPU memory.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
96
.. ocv:function:: void cuda::FAST_CUDA::downloadKeypoints(const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints)
97 98 99



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
100 101 102
cuda::FAST_CUDA::convertKeypoints
---------------------------------
Converts keypoints from CUDA representation to vector of ``KeyPoint``.
103

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
104
.. ocv:function:: void cuda::FAST_CUDA::convertKeypoints(const Mat& h_keypoints, std::vector<KeyPoint>& keypoints)
105 106 107



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
108 109
cuda::FAST_CUDA::release
------------------------
110 111
Releases inner buffer memory.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
112
.. ocv:function:: void cuda::FAST_CUDA::release()
113 114 115



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
116 117
cuda::FAST_CUDA::calcKeyPointsLocation
--------------------------------------
Ilya Lavrenov's avatar
Ilya Lavrenov committed
118
Find keypoints and compute it's response if ``nonmaxSuppression`` is true.
119

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
120
.. ocv:function:: int cuda::FAST_CUDA::calcKeyPointsLocation(const GpuMat& image, const GpuMat& mask)
121 122 123 124 125 126 127 128 129

    :param image: Image where keypoints (corners) are detected. Only 8-bit grayscale images are supported.

    :param mask: Optional input mask that marks the regions where we should detect features.

The function returns count of detected keypoints.



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
130 131
cuda::FAST_CUDA::getKeyPoints
-----------------------------
132 133
Gets final array of keypoints.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
134
.. ocv:function:: int cuda::FAST_CUDA::getKeyPoints(GpuMat& keypoints)
135 136 137

    :param keypoints: The output vector of keypoints.

138
The function performs non-max suppression if needed and returns final count of keypoints.
139 140 141



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
142 143 144
cuda::ORB_CUDA
--------------
.. ocv:class:: cuda::ORB_CUDA
145 146 147

Class for extracting ORB features and descriptors from an image. ::

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
148
    class ORB_CUDA
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
    {
    public:
        enum
        {
            X_ROW = 0,
            Y_ROW,
            RESPONSE_ROW,
            ANGLE_ROW,
            OCTAVE_ROW,
            SIZE_ROW,
            ROWS_COUNT
        };

        enum
        {
            DEFAULT_FAST_THRESHOLD = 20
        };

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
167
        explicit ORB_CUDA(int nFeatures = 500, float scaleFactor = 1.2f,
168 169 170
                         int nLevels = 8, int edgeThreshold = 31,
                         int firstLevel = 0, int WTA_K = 2,
                         int scoreType = 0, int patchSize = 31);
171

172
        void operator()(const GpuMat& image, const GpuMat& mask,
173 174 175
                        std::vector<KeyPoint>& keypoints);
        void operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints);

176
        void operator()(const GpuMat& image, const GpuMat& mask,
177
                        std::vector<KeyPoint>& keypoints, GpuMat& descriptors);
178
        void operator()(const GpuMat& image, const GpuMat& mask,
179 180 181 182 183 184 185 186 187
                        GpuMat& keypoints, GpuMat& descriptors);

        void downloadKeyPoints(GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints);

        void convertKeyPoints(Mat& d_keypoints, std::vector<KeyPoint>& keypoints);

        int descriptorSize() const;

        void setParams(size_t n_features, const ORB::CommonParams& detector_params);
Ilya Lavrenov's avatar
Ilya Lavrenov committed
188
        void setFastParams(int threshold, bool nonmaxSuppression = true);
189 190 191 192 193 194 195 196 197 198

        void release();

        bool blurForDescriptor;
    };

The class implements ORB feature detection and description algorithm.



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
199 200
cuda::ORB_CUDA::ORB_CUDA
------------------------
201 202
Constructor.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
203
.. ocv:function:: cuda::ORB_CUDA::ORB_CUDA(int nFeatures = 500, float scaleFactor = 1.2f, int nLevels = 8, int edgeThreshold = 31, int firstLevel = 0, int WTA_K = 2, int scoreType = 0, int patchSize = 31)
204 205 206 207 208 209

    :param nFeatures: The number of desired features.

    :param scaleFactor: Coefficient by which we divide the dimensions from one scale pyramid level to the next.

    :param nLevels: The number of levels in the scale pyramid.
210

211
    :param edgeThreshold: How far from the boundary the points should be.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
212

213
    :param firstLevel: The level at which the image is given. If 1, that means we will also look at the image  `scaleFactor`  times bigger.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
214

215 216


Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
217 218
cuda::ORB_CUDA::operator()
--------------------------
219 220
Detects keypoints and computes descriptors for them.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
221
.. ocv:function:: void cuda::ORB_CUDA::operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints)
222

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
223
.. ocv:function:: void cuda::ORB_CUDA::operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints)
224

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
225
.. ocv:function:: void cuda::ORB_CUDA::operator()(const GpuMat& image, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors)
226

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
227
.. ocv:function:: void cuda::ORB_CUDA::operator()(const GpuMat& image, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors)
228 229

    :param image: Input 8-bit grayscale image.
230

231
    :param mask: Optional input mask that marks the regions where we should detect features.
232

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
233 234 235 236 237 238 239 240
    :param keypoints: The input/output vector of keypoints. Can be stored both in CPU and GPU memory. For GPU memory:

            * ``keypoints.ptr<float>(X_ROW)[i]`` contains x coordinate of the i'th feature.
            * ``keypoints.ptr<float>(Y_ROW)[i]`` contains y coordinate of the i'th feature.
            * ``keypoints.ptr<float>(RESPONSE_ROW)[i]`` contains the response of the i'th feature.
            * ``keypoints.ptr<float>(ANGLE_ROW)[i]`` contains orientation of the i'th feature.
            * ``keypoints.ptr<float>(OCTAVE_ROW)[i]`` contains the octave of the i'th feature.
            * ``keypoints.ptr<float>(SIZE_ROW)[i]`` contains the size of the i'th feature.
241

242 243 244 245
    :param descriptors: Computed descriptors. if ``blurForDescriptor`` is true, image will be blurred before descriptors calculation.



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
246 247
cuda::ORB_CUDA::downloadKeyPoints
---------------------------------
248 249
Download keypoints from GPU to CPU memory.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
250
.. ocv:function:: static void cuda::ORB_CUDA::downloadKeyPoints( const GpuMat& d_keypoints, std::vector<KeyPoint>& keypoints )
251 252 253



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
254 255 256
cuda::ORB_CUDA::convertKeyPoints
--------------------------------
Converts keypoints from CUDA representation to vector of ``KeyPoint``.
257

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
258
.. ocv:function:: static void cuda::ORB_CUDA::convertKeyPoints( const Mat& d_keypoints, std::vector<KeyPoint>& keypoints )
259 260 261



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
262 263
cuda::ORB_CUDA::release
-----------------------
264 265
Releases inner buffer memory.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
266
.. ocv:function:: void cuda::ORB_CUDA::release()
267 268 269



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
270 271 272
cuda::BFMatcher_CUDA
--------------------
.. ocv:class:: cuda::BFMatcher_CUDA
273

274
Brute-force descriptor matcher. For each descriptor in the first set, this matcher finds the closest descriptor in the second set by trying each one. This descriptor matcher supports masking permissible matches between descriptor sets. ::
275

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
276
    class BFMatcher_CUDA
277 278
    {
    public:
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
279
        explicit BFMatcher_CUDA(int norm = cv::NORM_L2);
280

281 282
        // Add descriptors to train descriptor collection.
        void add(const std::vector<GpuMat>& descCollection);
283

284 285
        // Get train descriptors collection.
        const std::vector<GpuMat>& getTrainDescriptors() const;
286

287 288
        // Clear train descriptors collection.
        void clear();
289

290
        // Return true if there are no train descriptors in collection.
291
        bool empty() const;
292

293 294
        // Return true if the matcher supports mask in match methods.
        bool isMaskSupported() const;
295

296
        void matchSingle(const GpuMat& query, const GpuMat& train,
297
            GpuMat& trainIdx, GpuMat& distance,
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
298
            const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
299

300 301
        static void matchDownload(const GpuMat& trainIdx,
            const GpuMat& distance, std::vector<DMatch>& matches);
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
302 303
        static void matchConvert(const Mat& trainIdx,
            const Mat& distance, std::vector<DMatch>& matches);
304

305
        void match(const GpuMat& query, const GpuMat& train,
306
            std::vector<DMatch>& matches, const GpuMat& mask = GpuMat());
307

308 309
        void makeGpuCollection(GpuMat& trainCollection, GpuMat& maskCollection,
            const vector<GpuMat>& masks = std::vector<GpuMat>());
310

311
        void matchCollection(const GpuMat& query, const GpuMat& trainCollection,
312
            GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
313
            const GpuMat& maskCollection, Stream& stream = Stream::Null());
314

315 316
        static void matchDownload(const GpuMat& trainIdx, GpuMat& imgIdx,
            const GpuMat& distance, std::vector<DMatch>& matches);
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
317 318
        static void matchConvert(const Mat& trainIdx, const Mat& imgIdx,
            const Mat& distance, std::vector<DMatch>& matches);
319

320
        void match(const GpuMat& query, std::vector<DMatch>& matches,
321
            const std::vector<GpuMat>& masks = std::vector<GpuMat>());
322

323
        void knnMatchSingle(const GpuMat& query, const GpuMat& train,
324
            GpuMat& trainIdx, GpuMat& distance, GpuMat& allDist, int k,
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
325
            const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());
326

327
        static void knnMatchDownload(const GpuMat& trainIdx, const GpuMat& distance,
328
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
329
        static void knnMatchConvert(const Mat& trainIdx, const Mat& distance,
330
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
331

332
        void knnMatch(const GpuMat& query, const GpuMat& train,
333 334
            std::vector< std::vector<DMatch> >& matches, int k,
            const GpuMat& mask = GpuMat(), bool compactResult = false);
335

336 337 338
        void knnMatch2Collection(const GpuMat& query, const GpuMat& trainCollection,
            GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance,
            const GpuMat& maskCollection = GpuMat(), Stream& stream = Stream::Null());
339

340 341 342 343
        static void knnMatch2Download(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
        static void knnMatch2Convert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
344

345 346
        void knnMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, int k,
            const std::vector<GpuMat>& masks = std::vector<GpuMat>(),
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
347
            bool compactResult = false);
348

349 350 351 352 353 354 355 356 357 358
        void radiusMatchSingle(const GpuMat& query, const GpuMat& train,
            GpuMat& trainIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
            const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null());

        static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& distance, const GpuMat& nMatches,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
        static void radiusMatchConvert(const Mat& trainIdx, const Mat& distance, const Mat& nMatches,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);

        void radiusMatch(const GpuMat& query, const GpuMat& train,
359 360
            std::vector< std::vector<DMatch> >& matches, float maxDistance,
            const GpuMat& mask = GpuMat(), bool compactResult = false);
361

362 363 364 365 366 367 368 369 370 371
        void radiusMatchCollection(const GpuMat& query, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance,
            const std::vector<GpuMat>& masks = std::vector<GpuMat>(), Stream& stream = Stream::Null());

        static void radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, const GpuMat& nMatches,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);
        static void radiusMatchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, const Mat& nMatches,
            std::vector< std::vector<DMatch> >& matches, bool compactResult = false);

        void radiusMatch(const GpuMat& query, std::vector< std::vector<DMatch> >& matches, float maxDistance,
            const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false);
372

373 374 375
    private:
        std::vector<GpuMat> trainDescCollection;
    };
376

377

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
378
The class ``BFMatcher_CUDA`` has an interface similar to the class :ocv:class:`DescriptorMatcher`. It has two groups of ``match`` methods: for matching descriptors of one image with another image or with an image set. Also, all functions have an alternative to save results either to the GPU memory or to the CPU memory.
379

380
.. seealso:: :ocv:class:`DescriptorMatcher`, :ocv:class:`BFMatcher`
381

382

383

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
384 385
cuda::BFMatcher_CUDA::match
---------------------------
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
386 387
Finds the best match for each descriptor from a query set with train descriptors.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
388
.. ocv:function:: void cuda::BFMatcher_CUDA::match(const GpuMat& query, const GpuMat& train, std::vector<DMatch>& matches, const GpuMat& mask = GpuMat())
389

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
390
.. ocv:function:: void cuda::BFMatcher_CUDA::matchSingle(const GpuMat& query, const GpuMat& train, GpuMat& trainIdx, GpuMat& distance, const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null())
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
391

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
392
.. ocv:function:: void cuda::BFMatcher_CUDA::match(const GpuMat& query, std::vector<DMatch>& matches, const std::vector<GpuMat>& masks = std::vector<GpuMat>())
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
393

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
394
.. ocv:function:: void cuda::BFMatcher_CUDA::matchCollection( const GpuMat& query, const GpuMat& trainCollection, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, const GpuMat& masks=GpuMat(), Stream& stream=Stream::Null() )
395

396
.. seealso:: :ocv:func:`DescriptorMatcher::match`
397

398

399

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
400 401 402
cuda::BFMatcher_CUDA::makeGpuCollection
---------------------------------------
Performs a GPU collection of train descriptors and masks in a suitable format for the :ocv:func:`cuda::BFMatcher_CUDA::matchCollection` function.
403

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
404
.. ocv:function:: void cuda::BFMatcher_CUDA::makeGpuCollection(GpuMat& trainCollection, GpuMat& maskCollection, const vector<GpuMat>& masks = std::vector<GpuMat>())
405

406

407

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
408 409 410
cuda::BFMatcher_CUDA::matchDownload
-----------------------------------
Downloads matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::matchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::matchCollection` to vector with :ocv:class:`DMatch`.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
411

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
412
.. ocv:function:: static void cuda::BFMatcher_CUDA::matchDownload(const GpuMat& trainIdx, const GpuMat& distance, std::vector<DMatch>&matches)
413

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
414
.. ocv:function:: static void cuda::BFMatcher_CUDA::matchDownload( const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, std::vector<DMatch>& matches )
415

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
416 417


Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
418 419 420
cuda::BFMatcher_CUDA::matchConvert
----------------------------------
Converts matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::matchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::matchCollection` to vector with :ocv:class:`DMatch`.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
421

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
422
.. ocv:function:: void cuda::BFMatcher_CUDA::matchConvert(const Mat& trainIdx, const Mat& distance, std::vector<DMatch>&matches)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
423

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
424
.. ocv:function:: void cuda::BFMatcher_CUDA::matchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, std::vector<DMatch>&matches)
425

426

427

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
428 429
cuda::BFMatcher_CUDA::knnMatch
------------------------------
430
Finds the ``k`` best matches for each descriptor from a query set with train descriptors.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
431

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
432
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatch(const GpuMat& query, const GpuMat& train, std::vector< std::vector<DMatch> >&matches, int k, const GpuMat& mask = GpuMat(), bool compactResult = false)
433

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
434
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatchSingle(const GpuMat& query, const GpuMat& train, GpuMat& trainIdx, GpuMat& distance, GpuMat& allDist, int k, const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null())
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
435

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
436
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatch(const GpuMat& query, std::vector< std::vector<DMatch> >&matches, int k, const std::vector<GpuMat>&masks = std::vector<GpuMat>(), bool compactResult = false )
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
437

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
438
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatch2Collection(const GpuMat& query, const GpuMat& trainCollection, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, const GpuMat& maskCollection = GpuMat(), Stream& stream = Stream::Null())
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
439

440
    :param query: Query set of descriptors.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
441

442
    :param train: Training set of descriptors. It is not be added to train descriptors collection stored in the class object.
443

444
    :param k: Number of the best matches per each query descriptor (or less if it is not possible).
445

446
    :param mask: Mask specifying permissible matches between the input query and train matrices of descriptors.
447

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
448 449 450 451
    :param compactResult: If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.

    :param stream: Stream for the asynchronous version.

452
The function returns detected ``k`` (or less if not possible) matches in the increasing order by distance.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
453

454 455
The third variant of the method stores the results in GPU memory.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
456 457
.. seealso:: :ocv:func:`DescriptorMatcher::knnMatch`

458

459

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
460 461 462
cuda::BFMatcher_CUDA::knnMatchDownload
--------------------------------------
Downloads matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::knnMatchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::knnMatch2Collection` to vector with :ocv:class:`DMatch`.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
463

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
464
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatchDownload(const GpuMat& trainIdx, const GpuMat& distance, std::vector< std::vector<DMatch> >&matches, bool compactResult = false)
465

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
466
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatch2Download(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, std::vector< std::vector<DMatch> >& matches, bool compactResult = false)
467

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
468 469 470 471
If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.



Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
472 473 474
cuda::BFMatcher_CUDA::knnMatchConvert
-------------------------------------
Converts matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::knnMatchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::knnMatch2Collection` to CPU vector with :ocv:class:`DMatch`.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
475

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
476
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatchConvert(const Mat& trainIdx, const Mat& distance, std::vector< std::vector<DMatch> >&matches, bool compactResult = false)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
477

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
478
.. ocv:function:: void cuda::BFMatcher_CUDA::knnMatch2Convert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, std::vector< std::vector<DMatch> >& matches, bool compactResult = false)
479

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
480
If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.
481

482

483

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
484 485
cuda::BFMatcher_CUDA::radiusMatch
---------------------------------
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
486 487
For each query descriptor, finds the best matches with a distance less than a given threshold.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
488
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatch(const GpuMat& query, const GpuMat& train, std::vector< std::vector<DMatch> >&matches, float maxDistance, const GpuMat& mask = GpuMat(), bool compactResult = false)
489

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
490
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchSingle(const GpuMat& query, const GpuMat& train, GpuMat& trainIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance, const GpuMat& mask = GpuMat(), Stream& stream = Stream::Null())
491

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
492
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatch(const GpuMat& query, std::vector< std::vector<DMatch> >&matches, float maxDistance, const std::vector<GpuMat>& masks = std::vector<GpuMat>(), bool compactResult = false)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
493

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
494
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchCollection(const GpuMat& query, GpuMat& trainIdx, GpuMat& imgIdx, GpuMat& distance, GpuMat& nMatches, float maxDistance, const std::vector<GpuMat>& masks = std::vector<GpuMat>(), Stream& stream = Stream::Null())
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
495

496
    :param query: Query set of descriptors.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
497

498
    :param train: Training set of descriptors. It is not added to train descriptors collection stored in the class object.
499

500
    :param maxDistance: Distance threshold.
501

502
    :param mask: Mask specifying permissible matches between the input query and train matrices of descriptors.
503

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
504 505 506 507 508 509
    :param compactResult: If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.

    :param stream: Stream for the asynchronous version.

The function returns detected matches in the increasing order by distance.

510
The methods work only on devices with the compute capability  :math:`>=` 1.1.
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
511

512 513
The third variant of the method stores the results in GPU memory and does not store the points by the distance.

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
514 515
.. seealso:: :ocv:func:`DescriptorMatcher::radiusMatch`

516

517

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
518 519 520
cuda::BFMatcher_CUDA::radiusMatchDownload
-----------------------------------------
Downloads matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::radiusMatchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::radiusMatchCollection` to vector with :ocv:class:`DMatch`.
521

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
522
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& distance, const GpuMat& nMatches, std::vector< std::vector<DMatch> >&matches, bool compactResult = false)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
523

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
524
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchDownload(const GpuMat& trainIdx, const GpuMat& imgIdx, const GpuMat& distance, const GpuMat& nMatches, std::vector< std::vector<DMatch> >& matches, bool compactResult = false)
525

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
526 527 528 529 530
If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.




Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
531 532 533
cuda::BFMatcher_CUDA::radiusMatchConvert
----------------------------------------
Converts matrices obtained via :ocv:func:`cuda::BFMatcher_CUDA::radiusMatchSingle` or :ocv:func:`cuda::BFMatcher_CUDA::radiusMatchCollection` to vector with :ocv:class:`DMatch`.
534

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
535
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchConvert(const Mat& trainIdx, const Mat& distance, const Mat& nMatches, std::vector< std::vector<DMatch> >&matches, bool compactResult = false)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
536

Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
537
.. ocv:function:: void cuda::BFMatcher_CUDA::radiusMatchConvert(const Mat& trainIdx, const Mat& imgIdx, const Mat& distance, const Mat& nMatches, std::vector< std::vector<DMatch> >& matches, bool compactResult = false)
Vladislav Vinogradov's avatar
Vladislav Vinogradov committed
538 539

If ``compactResult`` is ``true`` , the ``matches`` vector does not contain matches for fully masked-out query descriptors.