Added knearest neighbor of OpenCL version.
authorJin Ma <jinma06njuee@gmail.om>
Sun, 22 Sep 2013 02:22:09 +0000 (10:22 +0800)
committerJin Ma <jinma06njuee@gmail.om>
Sun, 22 Sep 2013 02:22:09 +0000 (10:22 +0800)
It includes the accuracy/performance test and the implementation of KNN.

modules/ocl/CMakeLists.txt
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/include/opencv2/ocl/private/util.hpp
modules/ocl/src/initialization.cpp

index 05b28b8..69d9df5 100644 (file)
@@ -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)
index 42ac758..8f46244 100644 (file)
@@ -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
index 3176a68..9adae38 100644 (file)
@@ -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
index 0e16e75..34d5ff5 100644 (file)
@@ -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;