Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 #ifndef sliding_window_h_DEFINED
00036 #define sliding_window_h_DEFINED
00037 
00038 #include <ros/common.h> 
00039 #include <opencv2/core/core.hpp>
00040 #include <vector>
00041 #include <utility>
00042 
00043 namespace cpl_visual_features
00044 {
00045 template<class FeatureType, class DescriptorType> class SlidingWindowDetector
00046 {
00047  public:
00051   SlidingWindowDetector() : feature_()
00052   {
00053     windows_.clear();
00054   }
00055 
00062   void scanImage(cv::Mat& img, bool save_desc = false, int step_size = 1)
00063   {
00064     for (unsigned int i = 0; i < windows_.size(); ++i)
00065     {
00066       scanImage(img, windows_[i].first, windows_[i].second, save_desc,
00067                 step_size);
00068     }
00069   }
00070 
00078   void scanImage(cv::Mat& img, std::vector<std::pair<int, int> >& windows,
00079                  bool save_desc = false, int step_size = 1)
00080   {
00081     for (unsigned int i = 0; i < windows.size(); ++i)
00082     {
00083       scanImage(img, windows[i].first, windows[i].second, save_desc, step_size);
00084     }
00085   }
00086 
00093   void scanImage(cv::Mat& img, std::pair<int,int> window_size,
00094                  bool save_desc = false, int step_size = 1)
00095   {
00096     scanImage(img, window_size.first, window_size.second, save_desc, step_size);
00097   }
00098 
00107   void scanImage(cv::Mat& img, int window_width, int window_height,
00108                  bool save_desc = false, int step_size = 1)
00109   {
00110     
00111     for (int r = 0; r + window_height < img.rows; r += step_size)
00112     {
00113       for (int c = 0; c + window_width < img.cols; c += step_size)
00114       {
00115         cv::Rect roi(c, r, window_width, window_height);
00116         cv::Mat window = img(roi);
00117         feature_(window, roi);
00118         if (save_desc)
00119         {
00120           DescriptorType d;
00121           d = feature_.getDescriptor();
00122           descriptors_.push_back(d);
00123         }
00124       }
00125     }
00126   }
00127 
00128   void setWindowSizes(std::vector<std::pair<int, int> > windows)
00129   {
00130     windows_ = windows;
00131   }
00132 
00133  protected:
00134   std::vector<std::pair<int, int> > windows_;
00135 
00136  public:
00137   FeatureType feature_;
00138   std::vector<DescriptorType> descriptors_;
00139 };
00140 }
00141 #endif // sliding_window_h_DEFINED