refactoring in opencv_stitching
authorAlexey Spizhevoy <no@email>
Sat, 21 May 2011 11:24:42 +0000 (11:24 +0000)
committerAlexey Spizhevoy <no@email>
Sat, 21 May 2011 11:24:42 +0000 (11:24 +0000)
modules/stitching/main.cpp
modules/stitching/seam_finders.cpp
modules/stitching/seam_finders.hpp
modules/stitching/warpers.cpp
modules/stitching/warpers.hpp
modules/stitching/warpers_inl.hpp

index db773d4..d99a779 100644 (file)
@@ -52,7 +52,7 @@ int main(int argc, char* argv[])
     int blend_type = Blender::MULTI_BAND;\r
     string result_name = "result.png";\r
 \r
-    double work_scale = -1, compose_scale = -1;\r
+    double work_scale = 1, compose_scale = 1;\r
     bool is_work_scale_set = false, is_compose_scale_set = false;\r
 \r
     if (argc == 1)\r
@@ -328,11 +328,11 @@ int main(int argc, char* argv[])
     Ptr<Warper> warper = Warper::createByCameraFocal(camera_focal, warp_type);\r
     for (int i = 0; i < num_images; ++i)\r
     {\r
-        corners[i] = (*warper)(images[i], static_cast<float>(cameras[i].focal), cameras[i].R, \r
-                               images_warped[i]);\r
+        corners[i] = warper->warp(images[i], static_cast<float>(cameras[i].focal), cameras[i].R, \r
+                                  images_warped[i]);\r
         sizes[i] = images_warped[i].size();\r
-        (*warper)(masks[i], static_cast<float>(cameras[i].focal), cameras[i].R, masks_warped[i], \r
-                  INTER_NEAREST, BORDER_CONSTANT);\r
+        warper->warp(masks[i], static_cast<float>(cameras[i].focal), cameras[i].R, masks_warped[i], \r
+                     INTER_NEAREST, BORDER_CONSTANT);\r
     }\r
 \r
     vector<Mat> images_f(num_images);\r
@@ -344,7 +344,7 @@ int main(int argc, char* argv[])
     LOGLN("Finding seams...");\r
     t = getTickCount();\r
     Ptr<SeamFinder> seam_finder = SeamFinder::createDefault(seam_find_type);\r
-    (*seam_finder)(images_f, corners, masks_warped);\r
+    seam_finder->find(images_f, corners, masks_warped);\r
     LOGLN("Finding seams, time: " << ((getTickCount() - t) / getTickFrequency()) << " sec");\r
 \r
     LOGLN("Blending images...");\r
index 1f870b1..1195c83 100644 (file)
@@ -20,13 +20,6 @@ Ptr<SeamFinder> SeamFinder::createDefault(int type)
 }
 
 
-void SeamFinder::operator ()(const vector<Mat> &src, const vector<Point> &corners,
-                             vector<Mat> &masks)
-{
-    find(src, corners, masks);
-}
-
-
 void PairwiseSeamFinder::find(const vector<Mat> &src, const vector<Point> &corners,
                               vector<Mat> &masks)
 {
index 5f58e5d..cc4f76f 100644 (file)
@@ -8,15 +8,9 @@ class SeamFinder
 {
 public:
     enum { NO, VORONOI, GRAPH_CUT };
-
     static cv::Ptr<SeamFinder> createDefault(int type);
 
     virtual ~SeamFinder() {}
-
-    void operator ()(const std::vector<cv::Mat> &src, const std::vector<cv::Point> &corners,
-                     std::vector<cv::Mat> &masks);
-
-protected:
     virtual void find(const std::vector<cv::Mat> &src, const std::vector<cv::Point> &corners,
                       std::vector<cv::Mat> &masks) = 0;
 };
@@ -24,17 +18,17 @@ protected:
 
 class NoSeamFinder : public SeamFinder
 {
-protected:
+public:
     void find(const std::vector<cv::Mat>&, const std::vector<cv::Point>&, std::vector<cv::Mat>&) {}
 };
 
 
 class PairwiseSeamFinder : public SeamFinder
 {
-protected:
+public:
     void find(const std::vector<cv::Mat> &src, const std::vector<cv::Point> &corners,
               std::vector<cv::Mat> &masks);
-
+protected:
     virtual void findInPair(const cv::Mat &img1, const cv::Mat &img2, cv::Point tl1, cv::Point tl2,
                             cv::Rect roi, cv::Mat &mask1, cv::Mat &mask2) = 0;
 };
@@ -53,7 +47,6 @@ class GraphCutSeamFinder : public PairwiseSeamFinder
 public:
     // TODO add COST_COLOR_GRAD support
     enum { COST_COLOR };
-
     GraphCutSeamFinder(int cost_type = COST_COLOR, float terminal_cost = 10000.f,
                        float bad_region_penalty = 1000.f);
 
index 6b14c8a..3b74eb7 100644 (file)
@@ -16,7 +16,7 @@ Ptr<Warper> Warper::createByCameraFocal(float focal, int type)
 }
 
 
-void ProjectorBase::setCameraMatrix(const Mat &R)
+void ProjectorBase::setTransformation(const Mat &R)
 {
     CV_Assert(R.size() == Size(3, 3));
     CV_Assert(R.type() == CV_32F);
@@ -31,13 +31,6 @@ void ProjectorBase::setCameraMatrix(const Mat &R)
 }
 
 
-Point Warper::operator ()(const Mat &src, float focal, const Mat& R, Mat &dst,
-                          int interp_mode, int border_mode)
-{
-    return warp(src, focal, R, dst, interp_mode, border_mode);
-}
-
-
 void PlaneWarper::detectResultRoi(Point &dst_tl, Point &dst_br)
 {
     float tl_uf = numeric_limits<float>::max();
index 63e1e2b..a839b6c 100644 (file)
@@ -8,23 +8,17 @@ class Warper
 {
 public:
     enum { PLANE, CYLINDRICAL, SPHERICAL };
-
     static cv::Ptr<Warper> createByCameraFocal(float focal, int type);
 
     virtual ~Warper() {}
-
-    cv::Point operator ()(const cv::Mat &src, float focal, const cv::Mat& R, cv::Mat &dst,
-                          int interp_mode = cv::INTER_LINEAR, int border_mode = cv::BORDER_REFLECT);
-
-protected:
     virtual cv::Point warp(const cv::Mat &src, float focal, const cv::Mat& R, cv::Mat &dst,
-                           int interp_mode, int border_mode) = 0;
+                           int interp_mode = cv::INTER_LINEAR, int border_mode = cv::BORDER_REFLECT) = 0;
 };
 
 
 struct ProjectorBase
 {
-    void setCameraMatrix(const cv::Mat& R);
+    void setTransformation(const cv::Mat& R);
 
     cv::Size size;
     float focal;
@@ -37,10 +31,11 @@ struct ProjectorBase
 template <class P>
 class WarperBase : public Warper
 {   
-protected:
+public:
     cv::Point warp(const cv::Mat &src, float focal, const cv::Mat &R, cv::Mat &dst,
                    int interp_mode, int border_mode);
 
+protected:
     // Detects ROI of the destination image. It's correct for any projection.
     virtual void detectResultRoi(cv::Point &dst_tl, cv::Point &dst_br);
 
index 9a558c2..3fcdfe4 100644 (file)
@@ -11,7 +11,7 @@ cv::Point WarperBase<P>::warp(const cv::Mat &src, float focal, const cv::Mat &R,
 
     projector_.size = src.size();
     projector_.focal = focal;
-    projector_.setCameraMatrix(R);
+    projector_.setTransformation(R);
 
     cv::Point dst_tl, dst_br;
     detectResultRoi(dst_tl, dst_br);