Home | History | Annotate | Download | only in ocl
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                           License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
     14 // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // @Authors
     18 //    Peng Xiao, pengxiao (at) multicorewareinc.com
     19 //
     20 // Redistribution and use in source and binary forms, with or without modification,
     21 // are permitted provided that the following conditions are met:
     22 //
     23 //   * Redistribution's of source code must retain the above copyright notice,
     24 //     this list of conditions and the following disclaimer.
     25 //
     26 //   * Redistribution's in binary form must reproduce the above copyright notice,
     27 //     this list of conditions and the following disclaimer in the documentation
     28 //     and/or other materials provided with the distribution.
     29 //
     30 //   * The name of the copyright holders may not be used to endorse or promote products
     31 //     derived from this software without specific prior written permission.
     32 //
     33 // This software is provided by the copyright holders and contributors as is and
     34 // any express or implied warranties, including, but not limited to, the implied
     35 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     36 // In no event shall the Intel Corporation or contributors be liable for any direct,
     37 // indirect, incidental, special, exemplary, or consequential damages
     38 // (including, but not limited to, procurement of substitute goods or services;
     39 // loss of use, data, or profits; or business interruption) however caused
     40 // and on any theory of liability, whether in contract, strict liability,
     41 // or tort (including negligence or otherwise) arising in any way out of
     42 // the use of this software, even if advised of the possibility of such damage.
     43 //
     44 //M*/
     45 
     46 #include "../test_precomp.hpp"
     47 #include "opencv2/ts/ocl_test.hpp"
     48 
     49 #ifdef HAVE_OPENCL
     50 
     51 namespace cvtest {
     52 namespace ocl {
     53 
     54 ////////////////////////////////////////////////////////
     55 // Canny
     56 
     57 IMPLEMENT_PARAM_CLASS(AppertureSize, int)
     58 IMPLEMENT_PARAM_CLASS(L2gradient, bool)
     59 IMPLEMENT_PARAM_CLASS(UseRoi, bool)
     60 
     61 PARAM_TEST_CASE(Canny, Channels, AppertureSize, L2gradient, UseRoi)
     62 {
     63     int cn, apperture_size;
     64     bool useL2gradient, use_roi;
     65 
     66     TEST_DECLARE_INPUT_PARAMETER(src);
     67     TEST_DECLARE_OUTPUT_PARAMETER(dst);
     68 
     69     virtual void SetUp()
     70     {
     71         cn = GET_PARAM(0);
     72         apperture_size = GET_PARAM(1);
     73         useL2gradient = GET_PARAM(2);
     74         use_roi = GET_PARAM(3);
     75     }
     76 
     77     void generateTestData()
     78     {
     79         Mat img = readImageType("shared/fruits.png", CV_8UC(cn));
     80         ASSERT_FALSE(img.empty()) << "cann't load shared/fruits.png";
     81 
     82         Size roiSize = img.size();
     83         int type = img.type();
     84 
     85         Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
     86         randomSubMat(src, src_roi, roiSize, srcBorder, type, 2, 100);
     87         img.copyTo(src_roi);
     88 
     89         Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
     90         randomSubMat(dst, dst_roi, roiSize, dstBorder, type, 5, 16);
     91 
     92         UMAT_UPLOAD_INPUT_PARAMETER(src);
     93         UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
     94     }
     95 };
     96 
     97 OCL_TEST_P(Canny, Accuracy)
     98 {
     99     generateTestData();
    100 
    101     const double low_thresh = 50.0, high_thresh = 100.0;
    102     double eps = 1e-2;
    103 #ifdef ANDROID
    104     if (cv::ocl::Device::getDefault().isNVidia())
    105         eps = 12e-3;
    106 #endif
    107 
    108     OCL_OFF(cv::Canny(src_roi, dst_roi, low_thresh, high_thresh, apperture_size, useL2gradient));
    109     OCL_ON(cv::Canny(usrc_roi, udst_roi, low_thresh, high_thresh, apperture_size, useL2gradient));
    110 
    111     EXPECT_MAT_SIMILAR(dst_roi, udst_roi, eps);
    112     EXPECT_MAT_SIMILAR(dst, udst, eps);
    113 }
    114 
    115 OCL_INSTANTIATE_TEST_CASE_P(ImgProc, Canny, testing::Combine(
    116                                 testing::Values(1, 3),
    117                                 testing::Values(AppertureSize(3), AppertureSize(5)),
    118                                 testing::Values(L2gradient(false), L2gradient(true)),
    119                                 testing::Values(UseRoi(false), UseRoi(true))));
    120 
    121 } } // namespace cvtest::ocl
    122 
    123 #endif // HAVE_OPENCL
    124