Overload PlaneWarper::buildMaps method from base class
authorAlexander Karsakov <alexander.karsakov@itseez.com>
Fri, 24 Oct 2014 08:03:10 +0000 (11:03 +0300)
committerAlexander Karsakov <alexander.karsakov@itseez.com>
Mon, 27 Oct 2014 12:36:52 +0000 (15:36 +0300)
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
modules/stitching/src/opencl/warpers.cl
modules/stitching/src/warpers.cpp

index c8869f1..ac9e256 100644 (file)
@@ -135,6 +135,7 @@ public:
     Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R, InputArray T);
 
     virtual Rect buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, OutputArray xmap, OutputArray ymap);
+    Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap);
 
     virtual Point warp(InputArray src, InputArray K, InputArray R, InputArray T, int interp_mode, int border_mode,
                OutputArray dst);
index 7ec87ae..9d24589 100644 (file)
@@ -57,7 +57,7 @@ __kernel void buildWarpPlaneMaps(__global uchar * xmapptr, int xmap_step, int xm
         int ymap_index = mad24(dv0, ymap_step, mad24(du, (int)sizeof(float), ymap_offset));
 
         float u = tl_u + du;
-        float x_ = u * scale - ct[0];
+        float x_ = fma(u, scale, -ct[0]);
         float ct1 = 1 - ct[2];
 
         for (int dv = dv0, dv1 = min(rows, dv0 + rowsPerWI); dv < dv1; ++dv, xmap_index += xmap_step,
@@ -67,7 +67,7 @@ __kernel void buildWarpPlaneMaps(__global uchar * xmapptr, int xmap_step, int xm
             __global float * ymap = (__global float *)(ymapptr + ymap_index);
 
             float v = tl_v + dv;
-            float y_ = v * scale - ct[1];
+            float y_ = fma(v, scale, -ct[1]);
 
             float x = fma(ck_rinv[0], x_, fma(ck_rinv[1], y_, ck_rinv[2] * ct1));
             float y = fma(ck_rinv[3], x_, fma(ck_rinv[4], y_, ck_rinv[5] * ct1));
index 2711a01..744474b 100644 (file)
@@ -87,6 +87,11 @@ Point2f PlaneWarper::warpPoint(const Point2f &pt, InputArray K, InputArray R, In
     return uv;
 }
 
+Rect PlaneWarper::buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap)
+{
+    return buildMaps(src_size, K, R, Mat::zeros(3, 1, CV_32FC1), xmap, ymap);
+}
+
 Rect PlaneWarper::buildMaps(Size src_size, InputArray K, InputArray R, InputArray T, OutputArray _xmap, OutputArray _ymap)
 {
     projector_.setCameraParams(K, R, T);