refactored gpu::minMaxLoc
authorAlexey Spizhevoy <no@email>
Mon, 29 Nov 2010 10:44:25 +0000 (10:44 +0000)
committerAlexey Spizhevoy <no@email>
Mon, 29 Nov 2010 10:44:25 +0000 (10:44 +0000)
modules/gpu/src/cuda/mathfunc.cu

index 3f515e6..d4ecead 100644 (file)
@@ -805,21 +805,25 @@ namespace cv { namespace gpu { namespace mathfunc
         T val = ((const T*)src.ptr(0))[0];\r
         T mymin = val, mymax = val; \r
         unsigned int myminloc = 0, mymaxloc = 0;\r
-        for (unsigned int y = 0; y < ctheight && y0 + y * blockDim.y < src.rows; ++y)\r
+\r
+        unsigned int y_end = min(y0 + (ctheight - 1) * blockDim.y + 1, src.rows);\r
+        unsigned int x_end = min(x0 + (ctwidth - 1) * blockDim.x + 1, src.cols);\r
+\r
+        for (unsigned int y = y0; y < y_end; y += blockDim.y)\r
         {\r
-            const T* ptr = (const T*)src.ptr(y0 + y * blockDim.y);\r
-            for (unsigned int x = 0; x < ctwidth && x0 + x * blockDim.x < src.cols; ++x)\r
+            const T* ptr = (const T*)src.ptr(y);\r
+            for (unsigned int x = x0; x < x_end; x += blockDim.x)\r
             {\r
-                val = ptr[x0 + x * blockDim.x];\r
+                val = ptr[x];\r
                 if (val < mymin) \r
                 { \r
                     mymin = val; \r
-                    myminloc = (y0 + y * blockDim.y) * src.cols + x0 + x * blockDim.x; \r
+                    myminloc = y * src.cols + x; \r
                 }\r
                 else if (val > mymax)\r
                 {\r
                     mymax = val; \r
-                    mymaxloc = (y0 + y * blockDim.y) * src.cols + x0 + x * blockDim.x; \r
+                    mymaxloc = y * src.cols + x; \r
                 }\r
             }\r
         }\r