Added knearest neighbor of OpenCL version.

It includes the accuracy/performance test and the implementation of KNN.
pull/1489/head
Jin Ma 11 years ago
parent 94966b38c0
commit 06c33df307
  1. 2
      modules/ocl/CMakeLists.txt
  2. 24
      modules/ocl/include/opencv2/ocl/ocl.hpp
  3. 1
      modules/ocl/include/opencv2/ocl/private/util.hpp
  4. 8
      modules/ocl/src/initialization.cpp

@ -3,5 +3,5 @@ if(NOT HAVE_OPENCL)
endif()
set(the_description "OpenCL-accelerated Computer Vision")
ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_calib3d)
ocv_define_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_calib3d opencv_ml)
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)

@ -51,6 +51,7 @@
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/ml/ml.hpp"
namespace cv
{
@ -1892,6 +1893,29 @@ namespace cv
{
return (total + grain - 1) / grain;
}
/*!***************K Nearest Neighbour*************!*/
class CV_EXPORTS KNearestNeighbour: public CvKNearest
{
public:
KNearestNeighbour();
~KNearestNeighbour();
KNearestNeighbour(const Mat& trainData, const Mat& labels,
const Mat& sampleIdx = Mat().setTo(Scalar::all(0)), bool isRegression = false, int max_k = 32);
bool train(const Mat& trainData, Mat& labels, Mat& sampleIdx = Mat().setTo(Scalar::all(0)),
bool isRegression = false, int max_k = 32, bool updateBase = false);
void clear();
void find_nearest(const oclMat& samples, int k, oclMat& lables);
private:
int max_k, var_count;
int total;
bool regression;
oclMat samples_ocl;
};
}
}
#if defined _MSC_VER && _MSC_VER >= 1200

@ -167,6 +167,7 @@ namespace cv
template<>
bool CV_EXPORTS queryDeviceInfo<IS_CPU_DEVICE, bool>(cl_kernel kernel);
unsigned long CV_EXPORTS queryLocalMemInfo();
}//namespace ocl
}//namespace cv

@ -1033,6 +1033,14 @@ namespace cv
return impl->maxComputeUnits;
}
unsigned long queryLocalMemInfo()
{
Info::Impl* impl = Context::getContext()->impl;
cl_ulong local_memory_size = 0;
clGetDeviceInfo(impl->devices[impl->devnum], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), (void*)&local_memory_size, 0);
return local_memory_size;
}
void* Context::oclContext()
{
return impl->oclcontext;

Loading…
Cancel
Save