add apply cascade method
authormarina.kolpakova <marina.kolpakova@itseez.com>
Wed, 5 Sep 2012 14:29:13 +0000 (18:29 +0400)
committermarina.kolpakova <marina.kolpakova@itseez.com>
Tue, 6 Nov 2012 23:19:04 +0000 (03:19 +0400)
modules/gpu/CMakeLists.txt
modules/objdetect/include/opencv2/objdetect/objdetect.hpp
modules/objdetect/src/softcascade.cpp
modules/objdetect/test/test_softcascade.cpp

index 580e7df..78aafcf 100644 (file)
@@ -15,10 +15,10 @@ file(GLOB lib_cuda_hdrs          "src/cuda/*.hpp" "src/cuda/*.h")
 file(GLOB lib_srcs               "src/*.cpp")
 file(GLOB lib_cuda               "src/cuda/*.cu*")
 
-source_group("Include" FILES ${lib_hdrs})
-source_group("Src\\Host" FILES ${lib_srcs} ${lib_int_hdrs})
-source_group("Src\\Cuda" FILES ${lib_cuda} ${lib_cuda_hdrs})
-source_group("Device" FILES ${lib_device_hdrs})
+source_group("Include"        FILES ${lib_hdrs})
+source_group("Src\\Host"      FILES ${lib_srcs} ${lib_int_hdrs})
+source_group("Src\\Cuda"      FILES ${lib_cuda} ${lib_cuda_hdrs})
+source_group("Device"         FILES ${lib_device_hdrs})
 source_group("Device\\Detail" FILES ${lib_device_hdrs_detail})
 
 if (HAVE_CUDA)
index 0ef391d..9fab741 100644 (file)
@@ -507,7 +507,6 @@ public:
     int step = 4, int rejectfactor = 1);
 
 protected:
-    virtual void detectInRoi();
     virtual void detectForOctave(int octave);
     // virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize,
     //                                 int stripSize, int yStep, double factor, vector<Rect>& candidates,
index cace667..fa94052 100644 (file)
@@ -164,6 +164,15 @@ namespace {
 
         float relScale() {return (factor / octave); }
     };
+
+    struct Integral
+    {
+        cv::Mat magnitude;
+        std::vector<cv::Mat> hist;
+        cv::Mat luv;
+
+        Integral(cv::Mat m, std::vector<cv::Mat> h, cv::Mat l) : magnitude(m), hist(h), luv(l) {}
+    };
 }
 
 struct cv::SoftCascade::Filds
@@ -181,6 +190,26 @@ struct cv::SoftCascade::Filds
     std::vector<Feature> features;
     std::vector<Level>   levels;
 
+    typedef std::vector<Stage>::iterator stIter_t;
+
+        // carrently roi must be save for out of ranges.
+    void detectInRoi(const cv::Rect& roi, const Integral& ints, std::vector<cv::Rect>& objects, const int step)
+    {
+        for (int dy = roi.y; dy < roi.height; dy+=step)
+            for (int dx = roi.x; dx < roi.width; dx += step)
+            {
+                applyCascade(ints, dx, dy);
+            }
+    }
+
+    void applyCascade(const Integral& ints, const int x, const int y)
+    {
+        for (stIter_t sIt = sIt.begin(); sIt != stages.end(); ++sIt)
+        {
+            Stage stage& = *sIt;
+        }
+    }
+
     // compute levels of full pyramid
     void calcLevels(int frameW, int frameH, int scales)
     {
@@ -327,7 +356,7 @@ bool cv::SoftCascade::load( const string& filename, const float minScale, const
 
 namespace {
 
-    void calcHistBins(const cv::Mat& grey, std::vector<cv::Mat>& histInts, const int bins)
+    void calcHistBins(const cv::Mat& grey, cv::Mat magIntegral, std::vector<cv::Mat>& histInts, const int bins)
     {
         CV_Assert( grey.type() == CV_8U);
         const int rows = grey.rows + 1;
@@ -368,18 +397,10 @@ namespace {
             histInts.push_back(sum);
         }
 
-        cv::Mat magIntegral;
         cv::integral(mag, magIntegral, mag.depth());
     }
-
-    struct Integrals
-    {
-        /* data */
-    };
 }
 
-void cv::SoftCascade::detectInRoi()
-{}
 
 
 void cv::SoftCascade::detectMultiScale(const Mat& image, const std::vector<cv::Rect>& rois, std::vector<cv::Rect>& objects,
@@ -405,13 +426,16 @@ void cv::SoftCascade::detectMultiScale(const Mat& image, const std::vector<cv::R
     cv::cvtColor(image, grey, CV_RGB2GRAY);
 
     std::vector<cv::Mat> hist;
+    cv::Mat magnitude;
     const int bins = 6;
-    calcHistBins(grey, hist, bins);
+    calcHistBins(grey, magnitude, hist, bins);
+
+    Integral integrals(magnitude, hist, luv);
 
     for (RIter_t it = rois.begin(); it != rois.end(); ++it)
     {
         const cv::Rect& roi = *it;
-        // detectInRoi(roi, objects, step);
+        (*filds).detectInRoi(roi, integrals, objects, step);
     }
 
 }
index d283d06..bb02a09 100644 (file)
@@ -62,8 +62,8 @@ TEST(SoftCascade, Detect)
     std::vector<cv::Rect> objectBoxes;
     std::vector<cv::Rect> rois;
     rois.push_back(cv::Rect(0, 0, 640, 480));
-    ASSERT_NO_THROW(
-    {
+    // ASSERT_NO_THROW(
+    // {
         cascade.detectMultiScale(colored, rois, objectBoxes);
-    });
+    // });
 }
\ No newline at end of file