github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/flann/linear_index.h (about)

     1  /***********************************************************************
     2   * Software License Agreement (BSD License)
     3   *
     4   * Copyright 2008-2009  Marius Muja (mariusm@cs.ubc.ca). All rights reserved.
     5   * Copyright 2008-2009  David G. Lowe (lowe@cs.ubc.ca). All rights reserved.
     6   *
     7   * THE BSD LICENSE
     8   *
     9   * Redistribution and use in source and binary forms, with or without
    10   * modification, are permitted provided that the following conditions
    11   * are met:
    12   *
    13   * 1. Redistributions of source code must retain the above copyright
    14   *    notice, this list of conditions and the following disclaimer.
    15   * 2. Redistributions in binary form must reproduce the above copyright
    16   *    notice, this list of conditions and the following disclaimer in the
    17   *    documentation and/or other materials provided with the distribution.
    18   *
    19   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    20   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    21   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    22   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    23   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    24   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    25   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    26   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    27   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    28   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    29   *************************************************************************/
    30  
    31  #ifndef OPENCV_FLANN_LINEAR_INDEX_H_
    32  #define OPENCV_FLANN_LINEAR_INDEX_H_
    33  
    34  //! @cond IGNORED
    35  
    36  #include "nn_index.h"
    37  
    38  namespace cvflann
    39  {
    40  
    41  struct LinearIndexParams : public IndexParams
    42  {
    43      LinearIndexParams()
    44      {
    45          (* this)["algorithm"] = FLANN_INDEX_LINEAR;
    46      }
    47  };
    48  
    49  template <typename Distance>
    50  class LinearIndex : public NNIndex<Distance>
    51  {
    52  public:
    53  
    54      typedef typename Distance::ElementType ElementType;
    55      typedef typename Distance::ResultType DistanceType;
    56  
    57  
    58      LinearIndex(const Matrix<ElementType>& inputData, const IndexParams& params = LinearIndexParams(),
    59                  Distance d = Distance()) :
    60          dataset_(inputData), index_params_(params), distance_(d)
    61      {
    62      }
    63  
    64      LinearIndex(const LinearIndex&);
    65      LinearIndex& operator=(const LinearIndex&);
    66  
    67      flann_algorithm_t getType() const CV_OVERRIDE
    68      {
    69          return FLANN_INDEX_LINEAR;
    70      }
    71  
    72  
    73      size_t size() const CV_OVERRIDE
    74      {
    75          return dataset_.rows;
    76      }
    77  
    78      size_t veclen() const CV_OVERRIDE
    79      {
    80          return dataset_.cols;
    81      }
    82  
    83  
    84      int usedMemory() const CV_OVERRIDE
    85      {
    86          return 0;
    87      }
    88  
    89      void buildIndex() CV_OVERRIDE
    90      {
    91          /* nothing to do here for linear search */
    92      }
    93  
    94      void saveIndex(FILE*) CV_OVERRIDE
    95      {
    96          /* nothing to do here for linear search */
    97      }
    98  
    99  
   100      void loadIndex(FILE*) CV_OVERRIDE
   101      {
   102          /* nothing to do here for linear search */
   103  
   104          index_params_["algorithm"] = getType();
   105      }
   106  
   107      void findNeighbors(ResultSet<DistanceType>& resultSet, const ElementType* vec, const SearchParams& /*searchParams*/) CV_OVERRIDE
   108      {
   109          ElementType* data = dataset_.data;
   110          for (size_t i = 0; i < dataset_.rows; ++i, data += dataset_.cols) {
   111              DistanceType dist = distance_(data, vec, dataset_.cols);
   112              resultSet.addPoint(dist, (int)i);
   113          }
   114      }
   115  
   116      IndexParams getParameters() const CV_OVERRIDE
   117      {
   118          return index_params_;
   119      }
   120  
   121  private:
   122      /** The dataset */
   123      const Matrix<ElementType> dataset_;
   124      /** Index parameters */
   125      IndexParams index_params_;
   126      /** Index distance */
   127      Distance distance_;
   128  
   129  };
   130  
   131  }
   132  
   133  //! @endcond
   134  
   135  #endif // OPENCV_FLANN_LINEAR_INDEX_H_