github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/flann/sampling.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   * Redistribution and use in source and binary forms, with or without
     8   * modification, are permitted provided that the following conditions
     9   * are met:
    10   *
    11   * 1. Redistributions of source code must retain the above copyright
    12   *    notice, this list of conditions and the following disclaimer.
    13   * 2. Redistributions in binary form must reproduce the above copyright
    14   *    notice, this list of conditions and the following disclaimer in the
    15   *    documentation and/or other materials provided with the distribution.
    16   *
    17   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    18   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    19   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    20   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
    21   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    22   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    23   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    24   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    25   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    26   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    27   *************************************************************************/
    28  
    29  
    30  #ifndef OPENCV_FLANN_SAMPLING_H_
    31  #define OPENCV_FLANN_SAMPLING_H_
    32  
    33  //! @cond IGNORED
    34  
    35  #include "matrix.h"
    36  #include "random.h"
    37  
    38  namespace cvflann
    39  {
    40  
    41  template<typename T>
    42  Matrix<T> random_sample(Matrix<T>& srcMatrix, long size, bool remove = false)
    43  {
    44      Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);
    45  
    46      T* src,* dest;
    47      for (long i=0; i<size; ++i) {
    48          long r = rand_int((int)(srcMatrix.rows-i));
    49          dest = newSet[i];
    50          src = srcMatrix[r];
    51          std::copy(src, src+srcMatrix.cols, dest);
    52          if (remove) {
    53              src = srcMatrix[srcMatrix.rows-i-1];
    54              dest = srcMatrix[r];
    55              std::copy(src, src+srcMatrix.cols, dest);
    56          }
    57      }
    58      if (remove) {
    59          srcMatrix.rows -= size;
    60      }
    61      return newSet;
    62  }
    63  
    64  template<typename T>
    65  Matrix<T> random_sample(const Matrix<T>& srcMatrix, size_t size)
    66  {
    67      UniqueRandom rand((int)srcMatrix.rows);
    68      Matrix<T> newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols);
    69  
    70      T* src,* dest;
    71      for (size_t i=0; i<size; ++i) {
    72          long r = rand.next();
    73          dest = newSet[i];
    74          src = srcMatrix[r];
    75          std::copy(src, src+srcMatrix.cols, dest);
    76      }
    77      return newSet;
    78  }
    79  
    80  } // namespace
    81  
    82  //! @endcond
    83  
    84  #endif /* OPENCV_FLANN_SAMPLING_H_ */