added Generalized Hough implementation
[profile/ivi/opencv.git] / modules / gpu / perf / perf_imgproc.cpp
index 761510d..9769bfa 100644 (file)
@@ -1713,4 +1713,98 @@ PERF_TEST_P(Sz_Dp_MinDist, ImgProc_HoughCircles, Combine(GPU_TYPICAL_MAT_SIZES,
     }\r
 }\r
 \r
+//////////////////////////////////////////////////////////////////////\r
+// GeneralizedHough\r
+\r
+CV_FLAGS(GHMethod, cv::GHT_POSITION, cv::GHT_SCALE, cv::GHT_ROTATION);\r
+\r
+DEF_PARAM_TEST(Method_Sz, GHMethod, cv::Size);\r
+\r
+PERF_TEST_P(Method_Sz, GeneralizedHough, Combine(\r
+            Values(GHMethod(cv::GHT_POSITION), GHMethod(cv::GHT_POSITION | cv::GHT_SCALE), GHMethod(cv::GHT_POSITION | cv::GHT_ROTATION), GHMethod(cv::GHT_POSITION | cv::GHT_SCALE | cv::GHT_ROTATION)),\r
+            GPU_TYPICAL_MAT_SIZES))\r
+{\r
+    declare.time(10);\r
+\r
+    const int method = GET_PARAM(0);\r
+    const cv::Size imageSize = GET_PARAM(1);\r
+\r
+    const cv::Mat templ = readImage("cv/shared/templ.png", cv::IMREAD_GRAYSCALE);\r
+    ASSERT_FALSE(templ.empty());\r
+\r
+    cv::Mat image(imageSize, CV_8UC1, cv::Scalar::all(0));\r
+\r
+    cv::RNG rng(123456789);\r
+    const int objCount = rng.uniform(5, 15);\r
+    for (int i = 0; i < objCount; ++i)\r
+    {\r
+        double scale = rng.uniform(0.7, 1.3);\r
+        bool rotate = rng.uniform(0, 2);\r
+\r
+        cv::Mat obj;\r
+        cv::resize(templ, obj, cv::Size(), scale, scale);\r
+        if (rotate)\r
+            obj = obj.t();\r
+\r
+        cv::Point pos;\r
+\r
+        pos.x = rng.uniform(0, image.cols - obj.cols);\r
+        pos.y = rng.uniform(0, image.rows - obj.rows);\r
+\r
+        cv::Mat roi = image(cv::Rect(pos, obj.size()));\r
+        cv::add(roi, obj, roi);\r
+    }\r
+\r
+    cv::Mat edges;\r
+    cv::Canny(image, edges, 50, 100);\r
+\r
+    cv::Mat dx, dy;\r
+    cv::Sobel(image, dx, CV_32F, 1, 0);\r
+    cv::Sobel(image, dy, CV_32F, 0, 1);\r
+\r
+    if (runOnGpu)\r
+    {\r
+        cv::gpu::GpuMat d_edges(edges);\r
+        cv::gpu::GpuMat d_dx(dx);\r
+        cv::gpu::GpuMat d_dy(dy);\r
+        cv::gpu::GpuMat d_position;\r
+\r
+        cv::Ptr<cv::gpu::GeneralizedHough_GPU> d_hough = cv::gpu::GeneralizedHough_GPU::create(method);\r
+        if (method & cv::GHT_ROTATION)\r
+        {\r
+            d_hough->set("maxAngle", 90.0);\r
+            d_hough->set("angleStep", 2.0);\r
+        }\r
+\r
+        d_hough->setTemplate(cv::gpu::GpuMat(templ));\r
+\r
+        d_hough->detect(d_edges, d_dx, d_dy, d_position);\r
+\r
+        TEST_CYCLE()\r
+        {\r
+            d_hough->detect(d_edges, d_dx, d_dy, d_position);\r
+        }\r
+    }\r
+    else\r
+    {\r
+        cv::Mat positions;\r
+\r
+        cv::Ptr<cv::GeneralizedHough> hough = cv::GeneralizedHough::create(method);\r
+        if (method & cv::GHT_ROTATION)\r
+        {\r
+            hough->set("maxAngle", 90.0);\r
+            hough->set("angleStep", 2.0);\r
+        }\r
+\r
+        hough->setTemplate(templ);\r
+\r
+        hough->detect(edges, dx, dy, positions);\r
+\r
+        TEST_CYCLE()\r
+        {\r
+            hough->detect(edges, dx, dy, positions);\r
+        }\r
+    }\r
+}\r
+\r
 } // namespace\r