Half the necessary resize calls
authorAlyssa Rosenzweig <bobbybee@users.noreply.github.com>
Sun, 28 Jun 2015 20:35:26 +0000 (16:35 -0400)
committerAlyssa Rosenzweig <bobbybee@users.noreply.github.com>
Sun, 28 Jun 2015 20:35:26 +0000 (16:35 -0400)
Makefile
examples/segmentation.cpp
examples/selection_demo.cpp
src/CommodityTracking.cpp
src/CommodityTracking.h

index e4c8d52..219449e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,10 +14,10 @@ ifeq ($(shell uname),Linux)
 endif
 
 all:
-       g++ -o CommodityTracking.o -c -fPIC src/CommodityTracking.cpp -O3 --std=c++11
+       g++ -o CommodityTracking.o -c -fPIC src/CommodityTracking.cpp -O3 --std=c++11 -pg
 
        $(LIBRARY_CLEAN)
        $(LIBRARY_BUILD_ARGS)
 
-       g++ -o bin/demo examples/demo.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc -I./src $(LINKLIB) -O3
-       g++ -o bin/segmentation examples/segmentation.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc -I./src $(LINKLIB) -O3
+       g++ -o bin/demo examples/demo.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc -I./src $(LINKLIB) -O3 -pg
+       g++ -o bin/segmentation examples/segmentation.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc -I./src $(LINKLIB) -O3 -pg
index ea62ca9..d6a2025 100644 (file)
@@ -10,7 +10,7 @@ int main(int argc, char** argv) {
     // camera stream
     
     VideoCapture stream(0);
-    FrameHistory history(stream);
+    FrameHistory history(stream, 0.25);
 
     // sensitivity calibration
     // TODO: phase this step out
index 46fa939..828621c 100644 (file)
@@ -23,7 +23,7 @@ int main(int argc, char** argv) {
   // and initialize FrameHistory with that stream
 
   VideoCapture stream(0);
-  FrameHistory history(stream);
+  FrameHistory history(stream, 0.25);
 
   // automatically calibrate userSensitivity
 
@@ -33,7 +33,7 @@ int main(int argc, char** argv) {
   vector<Skeleton*> oldSkeletons;
 
   for(;;) {
-    vector<Skeleton*> skeletons = getSkeleton(oldSkeletons, stream, history, userSensitivity, minimumArclength, 0.5, true);
+    vector<Skeleton*> skeletons = getSkeleton(oldSkeletons, stream, history, userSensitivity, minimumArclength, true);
     oldSkeletons = skeletons;
 
     // visualize skeletons
index deaea73..bb7a23b 100644 (file)
@@ -6,7 +6,7 @@ using namespace cv;
 namespace ct {
     SkeletonTracker::SkeletonTracker() :
                                         m_stream(new VideoCapture(0)),
-                                        m_history(new FrameHistory(*m_stream)),
+                                        m_history(new FrameHistory(*m_stream, 0.25)),
                                         m_minimumArclength(100),
                                         m_userSensitivity(260)
     {
@@ -14,7 +14,7 @@ namespace ct {
     }
 
     vector<Skeleton*> SkeletonTracker::getSkeletons() {
-         vector<Skeleton*> skeletons = getSkeleton(m_oldSkeletons, *m_stream, *m_history, m_userSensitivity, m_minimumArclength, 0.5, true);
+         vector<Skeleton*> skeletons = getSkeleton(m_oldSkeletons, *m_stream, *m_history, m_userSensitivity, m_minimumArclength, true);
          m_oldSkeletons = skeletons;
 
          return skeletons;
@@ -59,11 +59,20 @@ namespace ct {
         smoothLimb(&old->m_head, &m_head, 2);
     }
 
-    FrameHistory::FrameHistory(VideoCapture& stream) {
+    FrameHistory::FrameHistory(VideoCapture& stream, double scaleFactor)
+                              : m_scaleFactor(scaleFactor)
+    {
         stream.read(m_lastFrame); // fixes a race condition in the first few frames
+        resize(m_lastFrame, m_lastFrame, Size(0, 0), m_scaleFactor, m_scaleFactor);
+
+        stream.read(m_twoFrame); // fixes a race condition in the first few frames
+        resize(m_twoFrame, m_twoFrame, Size(0, 0), m_scaleFactor, m_scaleFactor);
+
         stream.read(m_threeFrame); // fixes a race condition in the first few frames
-        stream.read(m_twoFrame);
-        stream.read(m_fourFrame);
+        resize(m_threeFrame, m_threeFrame, Size(0, 0), m_scaleFactor, m_scaleFactor);
+        
+        stream.read(m_fourFrame); // fixes a race condition in the first few frames
+        resize(m_fourFrame, m_fourFrame, Size(0, 0), m_scaleFactor, m_scaleFactor);
     }
 
     void FrameHistory::append(Mat frame) {
@@ -71,6 +80,8 @@ namespace ct {
         m_threeFrame = m_twoFrame;
         m_twoFrame = m_lastFrame;
         m_lastFrame = frame;
+        
+        resize(m_lastFrame, m_lastFrame, Size(0, 0), m_scaleFactor, m_scaleFactor);
     }
 
     Mat FrameHistory::motion(Mat frame) {
@@ -391,7 +402,7 @@ namespace ct {
     // in order to minimize noise without compromising flexibility
 
     int autoCalibrateSensitivity(int initialUserSensitivity, cv::VideoCapture& stream, int minimumArclength, int interval) {
-        FrameHistory history(stream);
+        FrameHistory history(stream, 1);
         int sensitivity = initialUserSensitivity;
 
         while(sensitivity < 1000) {
@@ -430,7 +441,6 @@ namespace ct {
         FrameHistory& history, // history for computing delta
         int userSensitivity, // precalibrated value for thresholding
         int minimumArclength, // threshold for discarding noise contours
-        double scaleFactor, // (fractional) value for scaling the image (optimization)
         bool shouldFlip // flip webcam image?
     ) {
         // read a frame and optionally flip it
@@ -450,10 +460,6 @@ namespace ct {
 
         Mat outMask;
 
-        // resize down image to speed up calculations
-        resize(frame, frame, Size(0, 0), scaleFactor, scaleFactor);
-        resize(delta, delta, Size(0, 0), scaleFactor, scaleFactor);
-
         // compute mask using Collins et al + delta blur-threshold + watershed + contour discrimination
         Mat mask = highUserMask(delta, frame, minimumArclength, userSensitivity / 256);
 
index 6db57da..ecafe20 100644 (file)
@@ -20,9 +20,12 @@ namespace ct {
             /**
             * FrameHistory constructor from a VideoCapture stream.
             * The first few frames are captured to avoid a race condition.
+            * scaleFactor is a double in the interval (0, 1]
+            * It resizes each frame by this scale as an optimization.
+            * Numbers closer to 1 will have better accuracy, but will be slower to process.
             */
 
-            FrameHistory(cv::VideoCapture& stream);
+            FrameHistory(cv::VideoCapture& stream, double scaleFactor);
 
             /**
             * Appends the latest frame from the stream to the history;
@@ -46,6 +49,7 @@ namespace ct {
             cv::Mat getLastFrame();
         private:
             cv::Mat m_lastFrame, m_twoFrame, m_threeFrame, m_fourFrame;
+            double m_scaleFactor;
     };
 
     /**
@@ -245,7 +249,6 @@ namespace ct {
         FrameHistory& history, // history for computing delta
         int userSensitivity, // precalibrated value for thresholding
         int minimumArclength, // threshold for discarding noise contours
-        double scaleFactor, // (fractional) value for scaling the image (optimization)
         bool shouldFlip // flip webcam image?
     );
 
This page took 0.035954 seconds and 4 git commands to generate.