feat: 切换后端至PaddleOCR-NCNN,切换工程为CMake
1.项目后端整体迁移至PaddleOCR-NCNN算法,已通过基本的兼容性测试 2.工程改为使用CMake组织,后续为了更好地兼容第三方库,不再提供QMake工程 3.重整权利声明文件,重整代码工程,确保最小化侵权风险 Log: 切换后端至PaddleOCR-NCNN,切换工程为CMake Change-Id: I4d5d2c5d37505a4a24b389b1a4c5d12f17bfa38c
This commit is contained in:
		
							
								
								
									
										239
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_accumulate.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_accumulate.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,239 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Nathan, liujun@multicorewareinc.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(AccumulateBase, std::pair<MatDepth, MatDepth>, Channels, bool)
 | 
			
		||||
{
 | 
			
		||||
    int sdepth, ddepth, channels;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    double alpha;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(mask);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src2);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        const std::pair<MatDepth, MatDepth> depths = GET_PARAM(0);
 | 
			
		||||
        sdepth = depths.first, ddepth = depths.second;
 | 
			
		||||
        channels = GET_PARAM(1);
 | 
			
		||||
        useRoi = GET_PARAM(2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        const int stype = CV_MAKE_TYPE(sdepth, channels),
 | 
			
		||||
                dtype = CV_MAKE_TYPE(ddepth, channels);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, 10);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, stype, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border maskBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(mask, mask_roi, roiSize, maskBorder, CV_8UC1, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
        cvtest::threshold(mask, mask, 80, 255, THRESH_BINARY);
 | 
			
		||||
 | 
			
		||||
        Border src2Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src2, src2_roi, roiSize, src2Border, stype, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, dtype, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(mask);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src2);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
        alpha = randomDouble(-5, 5);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// Accumulate ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef AccumulateBase Accumulate;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Accumulate, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulate(src_roi, dst_roi));
 | 
			
		||||
        OCL_ON(cv::accumulate(usrc_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-6);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Accumulate, Mask)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulate(src_roi, dst_roi, mask_roi));
 | 
			
		||||
        OCL_ON(cv::accumulate(usrc_roi, udst_roi, umask_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-6);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// AccumulateSquare ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef AccumulateBase AccumulateSquare;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateSquare, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateSquare(src_roi, dst_roi));
 | 
			
		||||
        OCL_ON(cv::accumulateSquare(usrc_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateSquare, Mask)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateSquare(src_roi, dst_roi, mask_roi));
 | 
			
		||||
        OCL_ON(cv::accumulateSquare(usrc_roi, udst_roi, umask_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// AccumulateProduct ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef AccumulateBase AccumulateProduct;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateProduct, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateProduct(src_roi, src2_roi, dst_roi));
 | 
			
		||||
        OCL_ON(cv::accumulateProduct(usrc_roi, usrc2_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateProduct, Mask)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateProduct(src_roi, src2_roi, dst_roi, mask_roi));
 | 
			
		||||
        OCL_ON(cv::accumulateProduct(usrc_roi, usrc2_roi, udst_roi, umask_roi));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// AccumulateWeighted ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef AccumulateBase AccumulateWeighted;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateWeighted, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateWeighted(src_roi, dst_roi, alpha));
 | 
			
		||||
        OCL_ON(cv::accumulateWeighted(usrc_roi, udst_roi, alpha));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(AccumulateWeighted, Mask)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::accumulateWeighted(src_roi, dst_roi, alpha));
 | 
			
		||||
        OCL_ON(cv::accumulateWeighted(usrc_roi, udst_roi, alpha));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 1e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// Instantiation ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#define OCL_DEPTH_ALL_COMBINATIONS \
 | 
			
		||||
    testing::Values(std::make_pair<MatDepth, MatDepth>(CV_8U, CV_32F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_16U, CV_32F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_32F, CV_32F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_8U, CV_64F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_16U, CV_64F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_32F, CV_64F), \
 | 
			
		||||
    std::make_pair<MatDepth, MatDepth>(CV_64F, CV_64F))
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, Accumulate, Combine(OCL_DEPTH_ALL_COMBINATIONS, OCL_ALL_CHANNELS, Bool()));
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, AccumulateSquare, Combine(OCL_DEPTH_ALL_COMBINATIONS, OCL_ALL_CHANNELS, Bool()));
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, AccumulateProduct, Combine(OCL_DEPTH_ALL_COMBINATIONS, OCL_ALL_CHANNELS, Bool()));
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, AccumulateWeighted, Combine(OCL_DEPTH_ALL_COMBINATIONS, OCL_ALL_CHANNELS, Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										127
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_blend.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_blend.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,127 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Nathan, liujun@multicorewareinc.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(BlendLinear, MatDepth, Channels, bool)
 | 
			
		||||
{
 | 
			
		||||
    int depth, channels;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src1);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src2);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(weights2);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(weights1);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        channels = GET_PARAM(1);
 | 
			
		||||
        useRoi = GET_PARAM(2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        const int type = CV_MAKE_TYPE(depth, channels);
 | 
			
		||||
        const double upValue = 256;
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border src1Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src1, src1_roi, roiSize, src1Border, type, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        Border src2Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src2, src2_roi, roiSize, src2Border, type, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        Border weights1Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(weights1, weights1_roi, roiSize, weights1Border, CV_32FC1, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        Border weights2Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(weights2, weights2_roi, roiSize, weights2Border, CV_32FC1, 1e-2, upValue);
 | 
			
		||||
 | 
			
		||||
        weights2_roi -= weights1_roi;
 | 
			
		||||
        CV_Assert(checkNorm2(weights2_roi, weights2(Rect(weights2Border.lef, weights2Border.top,
 | 
			
		||||
                                                        roiSize.width, roiSize.height))) < 1e-6);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src1);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src2);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(weights1);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(weights2);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double eps = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, eps);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(BlendLinear, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::blendLinear(src1_roi, src2_roi, weights1_roi, weights2_roi, dst_roi));
 | 
			
		||||
        OCL_ON(cv::blendLinear(usrc1_roi, usrc2_roi, uweights1_roi, uweights2_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        Near(depth <= CV_32S ? 1.0 : 0.5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, BlendLinear, Combine(testing::Values(CV_8U, CV_32F), OCL_ALL_CHANNELS, Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										236
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_boxfilter.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_boxfilter.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,236 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////// boxFilter ///////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(BoxFilterBase, MatDepth, Channels, BorderType, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    static const int kernelMinSize = 2;
 | 
			
		||||
    static const int kernelMaxSize = 10;
 | 
			
		||||
 | 
			
		||||
    int depth, cn, borderType;
 | 
			
		||||
    Size ksize, dsize;
 | 
			
		||||
    Point anchor;
 | 
			
		||||
    bool normalize, useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        cn = GET_PARAM(1);
 | 
			
		||||
        borderType = GET_PARAM(2); // only not isolated border tested, because CPU module doesn't support isolated border case.
 | 
			
		||||
        normalize = GET_PARAM(3);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        int type = CV_MAKE_TYPE(depth, cn);
 | 
			
		||||
        ksize = randomSize(kernelMinSize, kernelMaxSize);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(ksize.width, MAX_VALUE, ksize.height, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        anchor.x = randomInt(-1, ksize.width);
 | 
			
		||||
        anchor.y = randomInt(-1, ksize.height);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef BoxFilterBase BoxFilter;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(BoxFilter, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::boxFilter(src_roi, dst_roi, -1, ksize, anchor, normalize, borderType));
 | 
			
		||||
        OCL_ON(cv::boxFilter(usrc_roi, udst_roi, -1, ksize, anchor, normalize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth <= CV_32S ? 1 : 3e-3);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef BoxFilterBase SqrBoxFilter;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(SqrBoxFilter, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        int ddepth = depth == CV_8U ? CV_32S : CV_64F;
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::sqrBoxFilter(src_roi, dst_roi, ddepth, ksize, anchor, normalize, borderType));
 | 
			
		||||
        OCL_ON(cv::sqrBoxFilter(usrc_roi, udst_roi, ddepth, ksize, anchor, normalize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth <= CV_32S ? 1 : 7e-2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, BoxFilter,
 | 
			
		||||
                            Combine(
 | 
			
		||||
                                Values(CV_8U, CV_16U, CV_16S, CV_32S, CV_32F),
 | 
			
		||||
                                OCL_ALL_CHANNELS,
 | 
			
		||||
                                Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                       (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                                Bool(),
 | 
			
		||||
                                Bool()  // ROI
 | 
			
		||||
                                )
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, SqrBoxFilter,
 | 
			
		||||
                            Combine(
 | 
			
		||||
                                Values(CV_8U, CV_16U, CV_16S, CV_32F, CV_64F),
 | 
			
		||||
                                OCL_ALL_CHANNELS,
 | 
			
		||||
                                Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                       (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                                Bool(),
 | 
			
		||||
                                Bool()  // ROI
 | 
			
		||||
                                )
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(BoxFilter3x3_cols16_rows2_Base, MatDepth, Channels, BorderType, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    int depth, cn, borderType;
 | 
			
		||||
    Size ksize, dsize;
 | 
			
		||||
    Point anchor;
 | 
			
		||||
    bool normalize, useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        cn = GET_PARAM(1);
 | 
			
		||||
        borderType = GET_PARAM(2); // only not isolated border tested, because CPU module doesn't support isolated border case.
 | 
			
		||||
        normalize = GET_PARAM(3);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        int type = CV_MAKE_TYPE(depth, cn);
 | 
			
		||||
        ksize = Size(3,3);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(ksize.width, MAX_VALUE, ksize.height, MAX_VALUE);
 | 
			
		||||
        roiSize.width = std::max(ksize.width + 13, roiSize.width & (~0xf));
 | 
			
		||||
        roiSize.height = std::max(ksize.height + 1, roiSize.height & (~0x1));
 | 
			
		||||
        Border srcBorder = {0, 0, 0, 0};
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = {0, 0, 0, 0};
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        anchor.x = -1;
 | 
			
		||||
        anchor.y = -1;
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef BoxFilter3x3_cols16_rows2_Base BoxFilter3x3_cols16_rows2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(BoxFilter3x3_cols16_rows2, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::boxFilter(src_roi, dst_roi, -1, ksize, anchor, normalize, borderType));
 | 
			
		||||
        OCL_ON(cv::boxFilter(usrc_roi, udst_roi, -1, ksize, anchor, normalize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth <= CV_32S ? 1 : 3e-3);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, BoxFilter3x3_cols16_rows2,
 | 
			
		||||
                            Combine(
 | 
			
		||||
                                Values((MatDepth)CV_8U),
 | 
			
		||||
                                Values((Channels)1),
 | 
			
		||||
                                Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                       (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                                Bool(),
 | 
			
		||||
                                Values(false) // ROI
 | 
			
		||||
                                )
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										140
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_canny.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_canny.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,140 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Peng Xiao, pengxiao@multicorewareinc.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////
 | 
			
		||||
// Canny
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_PARAM_CLASS(ApertureSize, int)
 | 
			
		||||
IMPLEMENT_PARAM_CLASS(L2gradient, bool)
 | 
			
		||||
IMPLEMENT_PARAM_CLASS(UseRoi, bool)
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(Canny, Channels, ApertureSize, L2gradient, UseRoi)
 | 
			
		||||
{
 | 
			
		||||
    int cn, aperture_size;
 | 
			
		||||
    bool useL2gradient, use_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        cn = GET_PARAM(0);
 | 
			
		||||
        aperture_size = GET_PARAM(1);
 | 
			
		||||
        useL2gradient = GET_PARAM(2);
 | 
			
		||||
        use_roi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Mat img = readImageType("shared/fruits.png", CV_8UC(cn));
 | 
			
		||||
        ASSERT_FALSE(img.empty()) << "can't load shared/fruits.png";
 | 
			
		||||
 | 
			
		||||
        Size roiSize = img.size();
 | 
			
		||||
        int type = img.type();
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 2, 100);
 | 
			
		||||
        img.copyTo(src_roi);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Canny, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    generateTestData();
 | 
			
		||||
 | 
			
		||||
    const double low_thresh = 50.0, high_thresh = 100.0;
 | 
			
		||||
    double eps = 0.03;
 | 
			
		||||
 | 
			
		||||
    OCL_OFF(cv::Canny(src_roi, dst_roi, low_thresh, high_thresh, aperture_size, useL2gradient));
 | 
			
		||||
    OCL_ON(cv::Canny(usrc_roi, udst_roi, low_thresh, high_thresh, aperture_size, useL2gradient));
 | 
			
		||||
 | 
			
		||||
    EXPECT_MAT_SIMILAR(dst_roi, udst_roi, eps);
 | 
			
		||||
    EXPECT_MAT_SIMILAR(dst, udst, eps);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Canny, AccuracyCustomGradient)
 | 
			
		||||
{
 | 
			
		||||
    generateTestData();
 | 
			
		||||
 | 
			
		||||
    const double low_thresh = 50.0, high_thresh = 100.0;
 | 
			
		||||
    double eps = 0.03;
 | 
			
		||||
 | 
			
		||||
    OCL_OFF(cv::Canny(src_roi, dst_roi, low_thresh, high_thresh, aperture_size, useL2gradient));
 | 
			
		||||
    OCL_ON(
 | 
			
		||||
        UMat dx, dy;
 | 
			
		||||
        Sobel(usrc_roi, dx, CV_16S, 1, 0, aperture_size, 1, 0, BORDER_REPLICATE);
 | 
			
		||||
        Sobel(usrc_roi, dy, CV_16S, 0, 1, aperture_size, 1, 0, BORDER_REPLICATE);
 | 
			
		||||
        cv::Canny(dx, dy, udst_roi, low_thresh, high_thresh, useL2gradient);
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    EXPECT_MAT_SIMILAR(dst_roi, udst_roi, eps);
 | 
			
		||||
    EXPECT_MAT_SIMILAR(dst, udst, eps);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, Canny, testing::Combine(
 | 
			
		||||
                                testing::Values(1, 3),
 | 
			
		||||
                                testing::Values(ApertureSize(3), ApertureSize(5)),
 | 
			
		||||
                                testing::Values(L2gradient(false), L2gradient(true)),
 | 
			
		||||
                                testing::Values(UseRoi(false), UseRoi(true))));
 | 
			
		||||
 | 
			
		||||
} // namespace ocl
 | 
			
		||||
 | 
			
		||||
} // namespace opencv_test
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										490
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_color.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										490
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_color.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,490 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Peng Xiao, pengxiao@multicorewareinc.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// cvtColor
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(CvtColor, MatDepth, bool)
 | 
			
		||||
{
 | 
			
		||||
    int depth;
 | 
			
		||||
    bool use_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        use_roi = GET_PARAM(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void generateTestData(int channelsIn, int channelsOut)
 | 
			
		||||
    {
 | 
			
		||||
        const int srcType = CV_MAKE_TYPE(depth, channelsIn);
 | 
			
		||||
        const int dstType = CV_MAKE_TYPE(depth, channelsOut);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, srcType, 2, 100);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, dstType, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void performTest(int channelsIn, int channelsOut, int code, double threshold = 1e-3)
 | 
			
		||||
    {
 | 
			
		||||
        for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
        {
 | 
			
		||||
            generateTestData(channelsIn, channelsOut);
 | 
			
		||||
 | 
			
		||||
            OCL_OFF(cv::cvtColor(src_roi, dst_roi, code, channelsOut));
 | 
			
		||||
            OCL_ON(cv::cvtColor(usrc_roi, udst_roi, code, channelsOut));
 | 
			
		||||
 | 
			
		||||
            int h_limit = 256;
 | 
			
		||||
            switch (code)
 | 
			
		||||
            {
 | 
			
		||||
            case COLOR_RGB2HLS: case COLOR_BGR2HLS:
 | 
			
		||||
                h_limit = 180;
 | 
			
		||||
                /* fallthrough */
 | 
			
		||||
            case COLOR_RGB2HLS_FULL: case COLOR_BGR2HLS_FULL:
 | 
			
		||||
            {
 | 
			
		||||
                ASSERT_EQ(dst_roi.type(), udst_roi.type());
 | 
			
		||||
                ASSERT_EQ(dst_roi.size(), udst_roi.size());
 | 
			
		||||
                Mat gold, actual;
 | 
			
		||||
                dst_roi.convertTo(gold, CV_32FC3);
 | 
			
		||||
                udst_roi.getMat(ACCESS_READ).convertTo(actual, CV_32FC3);
 | 
			
		||||
                Mat absdiff1, absdiff2, absdiff3;
 | 
			
		||||
                cv::absdiff(gold, actual, absdiff1);
 | 
			
		||||
                cv::absdiff(gold, actual + h_limit, absdiff2);
 | 
			
		||||
                cv::absdiff(gold, actual - h_limit, absdiff3);
 | 
			
		||||
                Mat diff = cv::min(cv::min(absdiff1, absdiff2), absdiff3);
 | 
			
		||||
                EXPECT_LE(cvtest::norm(diff, NORM_INF), threshold);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            default:
 | 
			
		||||
                Near(threshold);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define CVTCODE(name) COLOR_ ## name
 | 
			
		||||
 | 
			
		||||
// RGB[A] <-> BGR[A]
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2BGRA) { performTest(3, 4, CVTCODE(BGR2BGRA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2RGBA) { performTest(3, 4, CVTCODE(RGB2RGBA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2BGR) { performTest(4, 3, CVTCODE(BGRA2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2RGB) { performTest(4, 3, CVTCODE(RGBA2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2RGBA) { performTest(3, 4, CVTCODE(BGR2RGBA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2BGRA) { performTest(3, 4, CVTCODE(RGB2BGRA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2BGR) { performTest(4, 3, CVTCODE(RGBA2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2RGB) { performTest(4, 3, CVTCODE(BGRA2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2RGB) { performTest(3, 3, CVTCODE(BGR2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2BGR) { performTest(3, 3, CVTCODE(RGB2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2RGBA) { performTest(4, 4, CVTCODE(BGRA2RGBA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2BGRA) { performTest(4, 4, CVTCODE(RGBA2BGRA)); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> Gray
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2GRAY) { performTest(3, 1, CVTCODE(RGB2GRAY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, GRAY2RGB) { performTest(1, 3, CVTCODE(GRAY2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2GRAY) { performTest(3, 1, CVTCODE(BGR2GRAY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, GRAY2BGR) { performTest(1, 3, CVTCODE(GRAY2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2GRAY) { performTest(4, 1, CVTCODE(RGBA2GRAY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, GRAY2RGBA) { performTest(1, 4, CVTCODE(GRAY2RGBA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2GRAY) { performTest(4, 1, CVTCODE(BGRA2GRAY), cv::ocl::Device::getDefault().isNVidia() ? 1 : 1e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor, GRAY2BGRA) { performTest(1, 4, CVTCODE(GRAY2BGRA)); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> YUV
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2YUV) { performTest(3, 3, CVTCODE(RGB2YUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2YUV) { performTest(3, 3, CVTCODE(BGR2YUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2YUV) { performTest(4, 3, CVTCODE(RGB2YUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2YUV) { performTest(4, 3, CVTCODE(BGR2YUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YUV2RGB) { performTest(3, 3, CVTCODE(YUV2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YUV2BGR) { performTest(3, 3, CVTCODE(YUV2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YUV2RGBA) { performTest(3, 4, CVTCODE(YUV2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YUV2BGRA) { performTest(3, 4, CVTCODE(YUV2BGR)); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> YCrCb
 | 
			
		||||
 | 
			
		||||
#define EPS_FOR_FLOATING_POINT(e) (CV_32F <= depth ? e : 1)
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2YCrCb) { performTest(3, 3, CVTCODE(RGB2YCrCb), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2YCrCb) { performTest(3, 3, CVTCODE(BGR2YCrCb), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2YCrCb) { performTest(4, 3, CVTCODE(RGB2YCrCb), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2YCrCb) { performTest(4, 3, CVTCODE(BGR2YCrCb), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YCrCb2RGB) { performTest(3, 3, CVTCODE(YCrCb2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YCrCb2BGR) { performTest(3, 3, CVTCODE(YCrCb2BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YCrCb2RGBA) { performTest(3, 4, CVTCODE(YCrCb2RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor, YCrCb2BGRA) { performTest(3, 4, CVTCODE(YCrCb2BGR)); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> XYZ
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_IPP
 | 
			
		||||
#define IPP_EPS depth <= CV_32S ? 1 : 5e-5
 | 
			
		||||
#else
 | 
			
		||||
#define IPP_EPS 1e-3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, RGB2XYZ) { performTest(3, 3, CVTCODE(RGB2XYZ), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGR2XYZ) { performTest(3, 3, CVTCODE(BGR2XYZ), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, RGBA2XYZ) { performTest(4, 3, CVTCODE(RGB2XYZ), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, BGRA2XYZ) { performTest(4, 3, CVTCODE(BGR2XYZ), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor, XYZ2RGB) { performTest(3, 3, CVTCODE(XYZ2RGB), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, XYZ2BGR) { performTest(3, 3, CVTCODE(XYZ2BGR), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, XYZ2RGBA) { performTest(3, 4, CVTCODE(XYZ2RGB), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor, XYZ2BGRA) { performTest(3, 4, CVTCODE(XYZ2BGR), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
#undef IPP_EPS
 | 
			
		||||
 | 
			
		||||
// RGB <-> HSV
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_IPP
 | 
			
		||||
#define IPP_EPS depth <= CV_32S ? 1 : 4e-5
 | 
			
		||||
#else
 | 
			
		||||
#define IPP_EPS EPS_FOR_FLOATING_POINT(1e-3)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef CvtColor CvtColor8u32f;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2HSV) { performTest(3, 3, CVTCODE(RGB2HSV), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2HSV) { performTest(3, 3, CVTCODE(BGR2HSV), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2HSV) { performTest(4, 3, CVTCODE(RGB2HSV), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2HSV) { performTest(4, 3, CVTCODE(BGR2HSV), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2HSV_FULL) { performTest(3, 3, CVTCODE(RGB2HSV_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2HSV_FULL) { performTest(3, 3, CVTCODE(BGR2HSV_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2HSV_FULL) { performTest(4, 3, CVTCODE(RGB2HSV_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2HSV_FULL) { performTest(4, 3, CVTCODE(BGR2HSV_FULL), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
#undef IPP_EPS
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2RGB) { performTest(3, 3, CVTCODE(HSV2RGB), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2BGR) { performTest(3, 3, CVTCODE(HSV2BGR), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2RGBA) { performTest(3, 4, CVTCODE(HSV2RGB), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2BGRA) { performTest(3, 4, CVTCODE(HSV2BGR), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2RGB_FULL) { performTest(3, 3, CVTCODE(HSV2RGB_FULL), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2BGR_FULL) { performTest(3, 3, CVTCODE(HSV2BGR_FULL), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2RGBA_FULL) { performTest(3, 4, CVTCODE(HSV2BGR_FULL), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HSV2BGRA_FULL) { performTest(3, 4, CVTCODE(HSV2BGR_FULL), depth == CV_8U ? 1 : 4e-1); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> HLS
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_IPP
 | 
			
		||||
#define IPP_EPS depth == CV_8U ? 2 : 1e-3
 | 
			
		||||
#else
 | 
			
		||||
#define IPP_EPS depth == CV_8U ? 1 : 1e-3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2HLS) { performTest(3, 3, CVTCODE(RGB2HLS), depth == CV_8U ? 1 : 1e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2HLS) { performTest(3, 3, CVTCODE(BGR2HLS), depth == CV_8U ? 1 : 1e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2HLS) { performTest(4, 3, CVTCODE(RGB2HLS), depth == CV_8U ? 1 : 1e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2HLS) { performTest(4, 3, CVTCODE(BGR2HLS), depth == CV_8U ? 1 : 1e-3); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2HLS_FULL) { performTest(3, 3, CVTCODE(RGB2HLS_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2HLS_FULL) { performTest(3, 3, CVTCODE(BGR2HLS_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2HLS_FULL) { performTest(4, 3, CVTCODE(RGB2HLS_FULL), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2HLS_FULL) { performTest(4, 3, CVTCODE(BGR2HLS_FULL), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2RGB) { performTest(3, 3, CVTCODE(HLS2RGB), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2BGR) { performTest(3, 3, CVTCODE(HLS2BGR), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2RGBA) { performTest(3, 4, CVTCODE(HLS2RGB), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2BGRA) { performTest(3, 4, CVTCODE(HLS2BGR), 1); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2RGB_FULL) { performTest(3, 3, CVTCODE(HLS2RGB_FULL), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2BGR_FULL) { performTest(3, 3, CVTCODE(HLS2BGR_FULL), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2RGBA_FULL) { performTest(3, 4, CVTCODE(HLS2RGB_FULL), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, HLS2BGRA_FULL) { performTest(3, 4, CVTCODE(HLS2BGR_FULL), 1); }
 | 
			
		||||
 | 
			
		||||
#undef IPP_EPS
 | 
			
		||||
 | 
			
		||||
// RGB5x5 <-> RGB
 | 
			
		||||
 | 
			
		||||
typedef CvtColor CvtColor8u;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5652BGR) { performTest(2, 3, CVTCODE(BGR5652BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5652RGB) { performTest(2, 3, CVTCODE(BGR5652RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5652BGRA) { performTest(2, 4, CVTCODE(BGR5652BGRA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5652RGBA) { performTest(2, 4, CVTCODE(BGR5652RGBA)); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5552BGR) { performTest(2, 3, CVTCODE(BGR5552BGR)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5552RGB) { performTest(2, 3, CVTCODE(BGR5552RGB)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5552BGRA) { performTest(2, 4, CVTCODE(BGR5552BGRA)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5552RGBA) { performTest(2, 4, CVTCODE(BGR5552RGBA)); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR2BGR565) { performTest(3, 2, CVTCODE(BGR2BGR565)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, RGB2BGR565) { performTest(3, 2, CVTCODE(RGB2BGR565)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGRA2BGR565) { performTest(4, 2, CVTCODE(BGRA2BGR565)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, RGBA2BGR565) { performTest(4, 2, CVTCODE(RGBA2BGR565)); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR2BGR555) { performTest(3, 2, CVTCODE(BGR2BGR555)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, RGB2BGR555) { performTest(3, 2, CVTCODE(RGB2BGR555)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGRA2BGR555) { performTest(4, 2, CVTCODE(BGRA2BGR555)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, RGBA2BGR555) { performTest(4, 2, CVTCODE(RGBA2BGR555)); }
 | 
			
		||||
 | 
			
		||||
// RGB5x5 <-> Gray
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5652GRAY) { performTest(2, 1, CVTCODE(BGR5652GRAY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, BGR5552GRAY) { performTest(2, 1, CVTCODE(BGR5552GRAY)); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, GRAY2BGR565) { performTest(1, 2, CVTCODE(GRAY2BGR565)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, GRAY2BGR555) { performTest(1, 2, CVTCODE(GRAY2BGR555)); }
 | 
			
		||||
 | 
			
		||||
// RGBA <-> mRGBA
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_IPP) || defined(__arm__)
 | 
			
		||||
#define IPP_EPS depth <= CV_32S ? 1 : 1e-3
 | 
			
		||||
#else
 | 
			
		||||
#define IPP_EPS 1e-3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u, RGBA2mRGBA) { performTest(4, 4, CVTCODE(RGBA2mRGBA), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u, mRGBA2RGBA) { performTest(4, 4, CVTCODE(mRGBA2RGBA), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
// RGB <-> Lab
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2Lab) { performTest(3, 3, CVTCODE(BGR2Lab)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2Lab) { performTest(3, 3, CVTCODE(RGB2Lab)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LBGR2Lab) { performTest(3, 3, CVTCODE(LBGR2Lab), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LRGB2Lab) { performTest(3, 3, CVTCODE(LRGB2Lab), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2Lab) { performTest(4, 3, CVTCODE(BGR2Lab)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2Lab) { performTest(4, 3, CVTCODE(RGB2Lab)); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LBGRA2Lab) { performTest(4, 3, CVTCODE(LBGR2Lab), IPP_EPS); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LRGBA2Lab) { performTest(4, 3, CVTCODE(LRGB2Lab), IPP_EPS); }
 | 
			
		||||
 | 
			
		||||
#undef IPP_EPS
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2BGR) { performTest(3, 3, CVTCODE(Lab2BGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2RGB) { performTest(3, 3, CVTCODE(Lab2RGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2LBGR) { performTest(3, 3, CVTCODE(Lab2LBGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2LRGB) { performTest(3, 3, CVTCODE(Lab2LRGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2BGRA) { performTest(3, 4, CVTCODE(Lab2BGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2RGBA) { performTest(3, 4, CVTCODE(Lab2RGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2LBGRA) { performTest(3, 4, CVTCODE(Lab2LBGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Lab2LRGBA) { performTest(3, 4, CVTCODE(Lab2LRGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
 | 
			
		||||
// RGB -> Luv
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGR2Luv) { performTest(3, 3, CVTCODE(BGR2Luv), depth == CV_8U ? 1 : 1.5e-2); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGB2Luv) { performTest(3, 3, CVTCODE(RGB2Luv), depth == CV_8U ? 1 : 1.5e-2); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LBGR2Luv) { performTest(3, 3, CVTCODE(LBGR2Luv), depth == CV_8U ? 1 : 6e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LRGB2Luv) { performTest(3, 3, CVTCODE(LRGB2Luv), depth == CV_8U ? 1 : 6e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, BGRA2Luv) { performTest(4, 3, CVTCODE(BGR2Luv), depth == CV_8U ? 1 : 2e-2); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, RGBA2Luv) { performTest(4, 3, CVTCODE(RGB2Luv), depth == CV_8U ? 1 : 2e-2); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LBGRA2Luv) { performTest(4, 3, CVTCODE(LBGR2Luv), depth == CV_8U ? 1 : 6e-3); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, LRGBA2Luv) { performTest(4, 3, CVTCODE(LRGB2Luv), depth == CV_8U ? 1 : 6e-3); }
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2BGR) { performTest(3, 3, CVTCODE(Luv2BGR), depth == CV_8U ? 1 : 7e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2RGB) { performTest(3, 3, CVTCODE(Luv2RGB), depth == CV_8U ? 1 : 7e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2LBGR) { performTest(3, 3, CVTCODE(Luv2LBGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2LRGB) { performTest(3, 3, CVTCODE(Luv2LRGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2BGRA) { performTest(3, 4, CVTCODE(Luv2BGR), depth == CV_8U ? 1 : 7e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2RGBA) { performTest(3, 4, CVTCODE(Luv2RGB), depth == CV_8U ? 1 : 7e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2LBGRA) { performTest(3, 4, CVTCODE(Luv2LBGR), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
OCL_TEST_P(CvtColor8u32f, Luv2LRGBA) { performTest(3, 4, CVTCODE(Luv2LRGB), depth == CV_8U ? 1 : 1e-5); }
 | 
			
		||||
 | 
			
		||||
// YUV420 -> RGBA
 | 
			
		||||
 | 
			
		||||
struct CvtColor_YUV2RGB_420 :
 | 
			
		||||
        public CvtColor
 | 
			
		||||
{
 | 
			
		||||
    void generateTestData(int channelsIn, int channelsOut)
 | 
			
		||||
    {
 | 
			
		||||
        const int srcType = CV_MAKE_TYPE(depth, channelsIn);
 | 
			
		||||
        const int dstType = CV_MAKE_TYPE(depth, channelsOut);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        roiSize.width *= 2;
 | 
			
		||||
        roiSize.height *= 3;
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, srcType, 2, 100);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, dstType, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGBA_NV12) { performTest(1, 4, CVTCODE(YUV2RGBA_NV12), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGRA_NV12) { performTest(1, 4, CVTCODE(YUV2BGRA_NV12), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGB_NV12) { performTest(1, 3, CVTCODE(YUV2RGB_NV12), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGR_NV12) { performTest(1, 3, CVTCODE(YUV2BGR_NV12), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGBA_NV21) { performTest(1, 4, CVTCODE(YUV2RGBA_NV21), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGRA_NV21) { performTest(1, 4, CVTCODE(YUV2BGRA_NV21), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGB_NV21) { performTest(1, 3, CVTCODE(YUV2RGB_NV21), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGR_NV21) { performTest(1, 3, CVTCODE(YUV2BGR_NV21), EPS_FOR_FLOATING_POINT(1e-3)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGBA_YV12) { performTest(1, 4, CVTCODE(YUV2RGBA_YV12)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGRA_YV12) { performTest(1, 4, CVTCODE(YUV2BGRA_YV12)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGB_YV12) { performTest(1, 3, CVTCODE(YUV2RGB_YV12)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGR_YV12) { performTest(1, 3, CVTCODE(YUV2BGR_YV12)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGBA_IYUV) { performTest(1, 4, CVTCODE(YUV2RGBA_IYUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGRA_IYUV) { performTest(1, 4, CVTCODE(YUV2BGRA_IYUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2RGB_IYUV) { performTest(1, 3, CVTCODE(YUV2RGB_IYUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2BGR_IYUV) { performTest(1, 3, CVTCODE(YUV2BGR_IYUV)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_420, YUV2GRAY_420) { performTest(1, 1, CVTCODE(YUV2GRAY_420)); }
 | 
			
		||||
 | 
			
		||||
// RGBA -> YUV420
 | 
			
		||||
 | 
			
		||||
struct CvtColor_RGB2YUV_420 :
 | 
			
		||||
        public CvtColor
 | 
			
		||||
{
 | 
			
		||||
    void generateTestData(int channelsIn, int channelsOut)
 | 
			
		||||
    {
 | 
			
		||||
        const int srcType = CV_MAKE_TYPE(depth, channelsIn);
 | 
			
		||||
        const int dstType = CV_MAKE_TYPE(depth, channelsOut);
 | 
			
		||||
 | 
			
		||||
        Size srcRoiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        srcRoiSize.width *= 2;
 | 
			
		||||
        srcRoiSize.height *= 2;
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, srcRoiSize, srcBorder, srcType, 2, 100);
 | 
			
		||||
 | 
			
		||||
        Size dstRoiSize(srcRoiSize.width, srcRoiSize.height / 2 * 3);
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dstRoiSize, dstBorder, dstType, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, RGBA2YUV_YV12) { performTest(4, 1, CVTCODE(RGBA2YUV_YV12), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, BGRA2YUV_YV12) { performTest(4, 1, CVTCODE(BGRA2YUV_YV12), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, RGB2YUV_YV12) { performTest(3, 1, CVTCODE(RGB2YUV_YV12), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, BGR2YUV_YV12) { performTest(3, 1, CVTCODE(BGR2YUV_YV12), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, RGBA2YUV_IYUV) { performTest(4, 1, CVTCODE(RGBA2YUV_IYUV), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, BGRA2YUV_IYUV) { performTest(4, 1, CVTCODE(BGRA2YUV_IYUV), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, RGB2YUV_IYUV) { performTest(3, 1, CVTCODE(RGB2YUV_IYUV), 1); }
 | 
			
		||||
OCL_TEST_P(CvtColor_RGB2YUV_420, BGR2YUV_IYUV) { performTest(3, 1, CVTCODE(BGR2YUV_IYUV), 1); }
 | 
			
		||||
 | 
			
		||||
// YUV422 -> RGBA
 | 
			
		||||
 | 
			
		||||
struct CvtColor_YUV2RGB_422 :
 | 
			
		||||
        public CvtColor
 | 
			
		||||
{
 | 
			
		||||
    void generateTestData(int channelsIn, int channelsOut)
 | 
			
		||||
    {
 | 
			
		||||
        const int srcType = CV_MAKE_TYPE(depth, channelsIn);
 | 
			
		||||
        const int dstType = CV_MAKE_TYPE(depth, channelsOut);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        roiSize.width *= 2;
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, srcType, 2, 100);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, dstType, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGB_UYVY) { performTest(2, 3, CVTCODE(YUV2RGB_UYVY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGR_UYVY) { performTest(2, 3, CVTCODE(YUV2BGR_UYVY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGBA_UYVY) { performTest(2, 4, CVTCODE(YUV2RGBA_UYVY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGRA_UYVY) { performTest(2, 4, CVTCODE(YUV2BGRA_UYVY)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGB_YUY2) { performTest(2, 3, CVTCODE(YUV2RGB_YUY2)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGR_YUY2) { performTest(2, 3, CVTCODE(YUV2BGR_YUY2)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGBA_YUY2) { performTest(2, 4, CVTCODE(YUV2RGBA_YUY2)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGRA_YUY2) { performTest(2, 4, CVTCODE(YUV2BGRA_YUY2)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGB_YVYU) { performTest(2, 3, CVTCODE(YUV2RGB_YVYU)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGR_YVYU) { performTest(2, 3, CVTCODE(YUV2BGR_YVYU)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2RGBA_YVYU) { performTest(2, 4, CVTCODE(YUV2RGBA_YVYU)); }
 | 
			
		||||
OCL_TEST_P(CvtColor_YUV2RGB_422, YUV2BGRA_YVYU) { performTest(2, 4, CVTCODE(YUV2BGRA_YVYU)); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor8u,
 | 
			
		||||
                            testing::Combine(testing::Values(MatDepth(CV_8U)), Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor8u32f,
 | 
			
		||||
                            testing::Combine(testing::Values(MatDepth(CV_8U), MatDepth(CV_32F)), Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor,
 | 
			
		||||
                            testing::Combine(
 | 
			
		||||
                                testing::Values(MatDepth(CV_8U), MatDepth(CV_16U), MatDepth(CV_32F)),
 | 
			
		||||
                                Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor_YUV2RGB_420,
 | 
			
		||||
                            testing::Combine(
 | 
			
		||||
                                testing::Values(MatDepth(CV_8U)),
 | 
			
		||||
                                Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor_RGB2YUV_420,
 | 
			
		||||
                            testing::Combine(
 | 
			
		||||
                                testing::Values(MatDepth(CV_8U)),
 | 
			
		||||
                                Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor_YUV2RGB_422,
 | 
			
		||||
                            testing::Combine(
 | 
			
		||||
                                testing::Values(MatDepth(CV_8U)),
 | 
			
		||||
                                Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										142
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_filter2d.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_filter2d.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,142 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Filter2D
 | 
			
		||||
PARAM_TEST_CASE(Filter2D, MatDepth, Channels, int, int, BorderType, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    static const int kernelMinSize = 2;
 | 
			
		||||
    static const int kernelMaxSize = 10;
 | 
			
		||||
 | 
			
		||||
    int type;
 | 
			
		||||
    Size size;
 | 
			
		||||
    Point anchor;
 | 
			
		||||
    int borderType;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    Mat kernel;
 | 
			
		||||
    double delta;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        Size ksize(GET_PARAM(2), GET_PARAM(2));
 | 
			
		||||
        widthMultiple = GET_PARAM(3);
 | 
			
		||||
        borderType = GET_PARAM(4) | (GET_PARAM(5) ? BORDER_ISOLATED : 0);
 | 
			
		||||
        useRoi = GET_PARAM(6);
 | 
			
		||||
        Mat temp = randomMat(ksize, CV_MAKE_TYPE(((CV_64F == CV_MAT_DEPTH(type)) ? CV_64F : CV_32F), 1), -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
        cv::normalize(temp, kernel, 1.0, 0.0, NORM_L1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        size = randomSize(1, MAX_VALUE);
 | 
			
		||||
        // Make sure the width is a multiple of the requested value, and no more.
 | 
			
		||||
        size.width &= ~((widthMultiple * 2) - 1);
 | 
			
		||||
        size.width += widthMultiple;
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, size, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, size, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        anchor.x = randomInt(-1, kernel.size[0]);
 | 
			
		||||
        anchor.y = randomInt(-1, kernel.size[1]);
 | 
			
		||||
 | 
			
		||||
        delta = randomDouble(-100, 100);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        EXPECT_MAT_NEAR(dst, udst, threshold);
 | 
			
		||||
        EXPECT_MAT_NEAR(dst_roi, udst_roi, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Filter2D, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::filter2D(src_roi, dst_roi, -1, kernel, anchor, delta, borderType));
 | 
			
		||||
        OCL_ON(cv::filter2D(usrc_roi, udst_roi, -1, kernel, anchor, delta, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(1.0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, Filter2D,
 | 
			
		||||
                            Combine(
 | 
			
		||||
                                Values(CV_8U, CV_16U, CV_32F),
 | 
			
		||||
                                OCL_ALL_CHANNELS,
 | 
			
		||||
                                Values(3, 5, 7),  // Kernel size
 | 
			
		||||
                                Values(1, 4, 8),   // Width multiple
 | 
			
		||||
                                Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                       (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                       (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                                Bool(), // BORDER_ISOLATED
 | 
			
		||||
                                Bool()  // ROI
 | 
			
		||||
                                )
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										766
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_filters.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										766
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_filters.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,766 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Niko Li, newlife20080214@gmail.com
 | 
			
		||||
//    Jia Haipeng, jiahaipeng95@gmail.com
 | 
			
		||||
//    Zero Lin, Zero.Lin@amd.com
 | 
			
		||||
//    Zhang Ying, zhangying913@gmail.com
 | 
			
		||||
//    Yao Wang, bitwangyaoyao@gmail.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "cvconfig.h"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(FilterTestBase, MatType,
 | 
			
		||||
                int, // kernel size
 | 
			
		||||
                Size, // dx, dy
 | 
			
		||||
                BorderType, // border type
 | 
			
		||||
                double, // optional parameter
 | 
			
		||||
                bool, // roi or not
 | 
			
		||||
                int)  // width multiplier
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType, ksize;
 | 
			
		||||
    Size size;
 | 
			
		||||
    double param;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        ksize = GET_PARAM(1);
 | 
			
		||||
        size = GET_PARAM(2);
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
        param = GET_PARAM(4);
 | 
			
		||||
        useRoi = GET_PARAM(5);
 | 
			
		||||
        widthMultiple = GET_PARAM(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi(int minSize = 1)
 | 
			
		||||
    {
 | 
			
		||||
        if (minSize == 0)
 | 
			
		||||
            minSize = ksize;
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(minSize, MAX_VALUE);
 | 
			
		||||
        roiSize.width &= ~((widthMultiple * 2) - 1);
 | 
			
		||||
        roiSize.width += widthMultiple;
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -60, 70);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        int depth = CV_MAT_DEPTH(type);
 | 
			
		||||
        bool isFP = depth >= CV_32F;
 | 
			
		||||
 | 
			
		||||
        if (isFP)
 | 
			
		||||
            Near(1e-6, true);
 | 
			
		||||
        else
 | 
			
		||||
            Near(1, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold, bool relative)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Bilateral
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase Bilateral;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Bilateral, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        double sigmacolor = rng.uniform(20, 100);
 | 
			
		||||
        double sigmaspace = rng.uniform(10, 40);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::bilateralFilter(src_roi, dst_roi, ksize, sigmacolor, sigmaspace, borderType));
 | 
			
		||||
        OCL_ON(cv::bilateralFilter(usrc_roi, udst_roi, ksize, sigmacolor, sigmaspace, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Laplacian
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase LaplacianTest;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(LaplacianTest, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Laplacian(src_roi, dst_roi, -1, ksize, scale, 10, borderType));
 | 
			
		||||
        OCL_ON(cv::Laplacian(usrc_roi, udst_roi, -1, ksize, scale, 10, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(Deriv3x3_cols16_rows2_Base, MatType,
 | 
			
		||||
                int, // kernel size
 | 
			
		||||
                Size, // dx, dy
 | 
			
		||||
                BorderType, // border type
 | 
			
		||||
                double, // optional parameter
 | 
			
		||||
                bool, // roi or not
 | 
			
		||||
                int)  // width multiplier
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType, ksize;
 | 
			
		||||
    Size size;
 | 
			
		||||
    double param;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        ksize = GET_PARAM(1);
 | 
			
		||||
        size = GET_PARAM(2);
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
        param = GET_PARAM(4);
 | 
			
		||||
        useRoi = GET_PARAM(5);
 | 
			
		||||
        widthMultiple = GET_PARAM(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        size = Size(3, 3);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(size.width, MAX_VALUE, size.height, MAX_VALUE);
 | 
			
		||||
        roiSize.width = std::max(size.width + 13, roiSize.width & (~0xf));
 | 
			
		||||
        roiSize.height = std::max(size.height + 1, roiSize.height & (~0x1));
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -60, 70);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        Near(1, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold, bool relative)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef Deriv3x3_cols16_rows2_Base Laplacian3_cols16_rows2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Laplacian3_cols16_rows2, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Laplacian(src_roi, dst_roi, -1, ksize, scale, 10, borderType));
 | 
			
		||||
        OCL_ON(cv::Laplacian(usrc_roi, udst_roi, -1, ksize, scale, 10, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Sobel
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase SobelTest;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(SobelTest, Mat)
 | 
			
		||||
{
 | 
			
		||||
    int dx = size.width, dy = size.height;
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Sobel(src_roi, dst_roi, -1, dx, dy, ksize, scale, /* delta */0, borderType));
 | 
			
		||||
        OCL_ON(cv::Sobel(usrc_roi, udst_roi, -1, dx, dy, ksize, scale, /* delta */0, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef Deriv3x3_cols16_rows2_Base Sobel3x3_cols16_rows2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Sobel3x3_cols16_rows2, Mat)
 | 
			
		||||
{
 | 
			
		||||
    int dx = size.width, dy = size.height;
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Sobel(src_roi, dst_roi, -1, dx, dy, ksize, scale, /* delta */0, borderType));
 | 
			
		||||
        OCL_ON(cv::Sobel(usrc_roi, udst_roi, -1, dx, dy, ksize, scale, /* delta */0, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Scharr
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase ScharrTest;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(ScharrTest, Mat)
 | 
			
		||||
{
 | 
			
		||||
    int dx = size.width, dy = size.height;
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Scharr(src_roi, dst_roi, -1, dx, dy, scale, /* delta */ 0, borderType));
 | 
			
		||||
        OCL_ON(cv::Scharr(usrc_roi, udst_roi, -1, dx, dy, scale, /* delta */ 0, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef Deriv3x3_cols16_rows2_Base Scharr3x3_cols16_rows2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Scharr3x3_cols16_rows2, Mat)
 | 
			
		||||
{
 | 
			
		||||
    int dx = size.width, dy = size.height;
 | 
			
		||||
    double scale = param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::Scharr(src_roi, dst_roi, -1, dx, dy, scale, /* delta */ 0, borderType));
 | 
			
		||||
        OCL_ON(cv::Scharr(usrc_roi, udst_roi, -1, dx, dy, scale, /* delta */ 0, borderType));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// GaussianBlur
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase GaussianBlurTest;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(GaussianBlurTest, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times + 1; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        double sigma1 = rng.uniform(0.1, 1.0);
 | 
			
		||||
        double sigma2 = j % 2 == 0 ? sigma1 : rng.uniform(0.1, 1.0);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::GaussianBlur(src_roi, dst_roi, Size(ksize, ksize), sigma1, sigma2, borderType));
 | 
			
		||||
        OCL_ON(cv::GaussianBlur(usrc_roi, udst_roi, Size(ksize, ksize), sigma1, sigma2, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(CV_MAT_DEPTH(type) >= CV_32F ? 1e-3 : 4, CV_MAT_DEPTH(type) >= CV_32F);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(GaussianBlur_multicols_Base, MatType,
 | 
			
		||||
                int, // kernel size
 | 
			
		||||
                Size, // dx, dy
 | 
			
		||||
                BorderType, // border type
 | 
			
		||||
                double, // optional parameter
 | 
			
		||||
                bool, // roi or not
 | 
			
		||||
                int)  // width multiplier
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType, ksize;
 | 
			
		||||
    Size size;
 | 
			
		||||
    double param;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        ksize = GET_PARAM(1);
 | 
			
		||||
        size = GET_PARAM(2);
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
        param = GET_PARAM(4);
 | 
			
		||||
        useRoi = GET_PARAM(5);
 | 
			
		||||
        widthMultiple = GET_PARAM(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        size = Size(ksize, ksize);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(size.width, MAX_VALUE, size.height, MAX_VALUE);
 | 
			
		||||
        if (ksize == 3)
 | 
			
		||||
        {
 | 
			
		||||
            roiSize.width = std::max((size.width + 15) & 0x10, roiSize.width & (~0xf));
 | 
			
		||||
            roiSize.height = std::max(size.height + 1, roiSize.height & (~0x1));
 | 
			
		||||
        }
 | 
			
		||||
        else if (ksize == 5)
 | 
			
		||||
        {
 | 
			
		||||
            roiSize.width = std::max((size.width + 3) & 0x4, roiSize.width & (~0x3));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -60, 70);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        Near(1, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold, bool relative)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef GaussianBlur_multicols_Base GaussianBlur_multicols;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(GaussianBlur_multicols, Mat)
 | 
			
		||||
{
 | 
			
		||||
    Size kernelSize(ksize, ksize);
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        double sigma1 = rng.uniform(0.1, 1.0);
 | 
			
		||||
        double sigma2 = j % 2 == 0 ? sigma1 : rng.uniform(0.1, 1.0);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::GaussianBlur(src_roi, dst_roi, Size(ksize, ksize), sigma1, sigma2, borderType));
 | 
			
		||||
        OCL_ON(cv::GaussianBlur(usrc_roi, udst_roi, Size(ksize, ksize), sigma1, sigma2, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(CV_MAT_DEPTH(type) >= CV_32F ? 1e-3 : 4, CV_MAT_DEPTH(type) >= CV_32F);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Erode
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase Erode;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Erode, Mat)
 | 
			
		||||
{
 | 
			
		||||
    Size kernelSize(ksize, ksize);
 | 
			
		||||
    int iterations = (int)param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
        Mat kernel = ksize==0 ? Mat() : randomMat(kernelSize, CV_8UC1, 0, 2);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::erode(src_roi, dst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
        OCL_ON(cv::erode(usrc_roi, udst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Dilate
 | 
			
		||||
 | 
			
		||||
typedef FilterTestBase Dilate;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Dilate, Mat)
 | 
			
		||||
{
 | 
			
		||||
    Size kernelSize(ksize, ksize);
 | 
			
		||||
    int iterations = (int)param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
        Mat kernel = ksize==0 ? Mat() : randomMat(kernelSize, CV_8UC1, 0, 2);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::dilate(src_roi, dst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
        OCL_ON(cv::dilate(usrc_roi, udst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(MorphFilter3x3_cols16_rows2_Base, MatType,
 | 
			
		||||
                int, // kernel size
 | 
			
		||||
                Size, // dx, dy
 | 
			
		||||
                BorderType, // border type
 | 
			
		||||
                double, // optional parameter
 | 
			
		||||
                bool, // roi or not
 | 
			
		||||
                int)  // width multiplier
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType, ksize;
 | 
			
		||||
    Size size;
 | 
			
		||||
    double param;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        ksize = GET_PARAM(1);
 | 
			
		||||
        size = GET_PARAM(2);
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
        param = GET_PARAM(4);
 | 
			
		||||
        useRoi = GET_PARAM(5);
 | 
			
		||||
        widthMultiple = GET_PARAM(6);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        size = Size(3, 3);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(size.width, MAX_VALUE, size.height, MAX_VALUE);
 | 
			
		||||
        roiSize.width = std::max(size.width + 13, roiSize.width & (~0xf));
 | 
			
		||||
        roiSize.height = std::max(size.height + 1, roiSize.height & (~0x1));
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -60, 70);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        Near(1, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold, bool relative)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef MorphFilter3x3_cols16_rows2_Base MorphFilter3x3_cols16_rows2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(MorphFilter3x3_cols16_rows2, Mat)
 | 
			
		||||
{
 | 
			
		||||
    Size kernelSize(ksize, ksize);
 | 
			
		||||
    int iterations = (int)param;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
        Mat kernel = ksize==0 ? Mat() : randomMat(kernelSize, CV_8UC1, 0, 3);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::dilate(src_roi, dst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
        OCL_ON(cv::dilate(usrc_roi, udst_roi, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// MorphologyEx
 | 
			
		||||
IMPLEMENT_PARAM_CLASS(MorphOp, int)
 | 
			
		||||
PARAM_TEST_CASE(MorphologyEx, MatType,
 | 
			
		||||
                int, // kernel size
 | 
			
		||||
                MorphOp, // MORPH_OP
 | 
			
		||||
                int, // iterations
 | 
			
		||||
                bool)
 | 
			
		||||
{
 | 
			
		||||
    int type, ksize, op, iterations;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        ksize = GET_PARAM(1);
 | 
			
		||||
        op = GET_PARAM(2);
 | 
			
		||||
        iterations = GET_PARAM(3);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi(int minSize = 1)
 | 
			
		||||
    {
 | 
			
		||||
        if (minSize == 0)
 | 
			
		||||
            minSize = ksize;
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(minSize, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -60, 70);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        int depth = CV_MAT_DEPTH(type);
 | 
			
		||||
        bool isFP = depth >= CV_32F;
 | 
			
		||||
 | 
			
		||||
        if (isFP)
 | 
			
		||||
            Near(1e-6, true);
 | 
			
		||||
        else
 | 
			
		||||
            Near(1, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold, bool relative)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(MorphologyEx, Mat)
 | 
			
		||||
{
 | 
			
		||||
    Size kernelSize(ksize, ksize);
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
        Mat kernel = randomMat(kernelSize, CV_8UC1, 0, 3);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::morphologyEx(src_roi, dst_roi, op, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
        OCL_ON(cv::morphologyEx(usrc_roi, udst_roi, op, kernel, Point(-1, -1), iterations) );
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#define FILTER_BORDER_SET_NO_ISOLATED \
 | 
			
		||||
    Values((BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE, (BorderType)BORDER_REFLECT, (BorderType)BORDER_WRAP, (BorderType)BORDER_REFLECT_101/*, \
 | 
			
		||||
            (int)BORDER_CONSTANT|BORDER_ISOLATED, (int)BORDER_REPLICATE|BORDER_ISOLATED, \
 | 
			
		||||
            (int)BORDER_REFLECT|BORDER_ISOLATED, (int)BORDER_WRAP|BORDER_ISOLATED, \
 | 
			
		||||
            (int)BORDER_REFLECT_101|BORDER_ISOLATED*/) // WRAP and ISOLATED are not supported by cv:: version
 | 
			
		||||
 | 
			
		||||
#define FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED \
 | 
			
		||||
    Values((BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE, (BorderType)BORDER_REFLECT, /*(int)BORDER_WRAP,*/ (BorderType)BORDER_REFLECT_101/*, \
 | 
			
		||||
            (int)BORDER_CONSTANT|BORDER_ISOLATED, (int)BORDER_REPLICATE|BORDER_ISOLATED, \
 | 
			
		||||
            (int)BORDER_REFLECT|BORDER_ISOLATED, (int)BORDER_WRAP|BORDER_ISOLATED, \
 | 
			
		||||
            (int)BORDER_REFLECT_101|BORDER_ISOLATED*/) // WRAP and ISOLATED are not supported by cv:: version
 | 
			
		||||
 | 
			
		||||
#define FILTER_TYPES Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_32FC1, CV_32FC3, CV_32FC4)
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Bilateral, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3),
 | 
			
		||||
                            Values(5, 9), // kernel size
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            FILTER_BORDER_SET_NO_ISOLATED,
 | 
			
		||||
                            Values(0.0), // not used
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1, 4)));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, LaplacianTest, Combine(
 | 
			
		||||
                            FILTER_TYPES,
 | 
			
		||||
                            Values(1, 3, 5), // kernel size
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(1.0, 0.2, 3.0), // kernel scale
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Laplacian3_cols16_rows2, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values(3), // kernel size
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(1.0, 0.2, 3.0), // kernel scale
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, SobelTest, Combine(
 | 
			
		||||
                            FILTER_TYPES,
 | 
			
		||||
                            Values(3, 5), // kernel size
 | 
			
		||||
                            Values(Size(1, 0), Size(1, 1), Size(2, 0), Size(2, 1)), // dx, dy
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(0.0), // not used
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Sobel3x3_cols16_rows2, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values(3), // kernel size
 | 
			
		||||
                            Values(Size(1, 0), Size(1, 1), Size(2, 0), Size(2, 1)), // dx, dy
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(0.0), // not used
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, ScharrTest, Combine(
 | 
			
		||||
                            FILTER_TYPES,
 | 
			
		||||
                            Values(0), // not used
 | 
			
		||||
                            Values(Size(0, 1), Size(1, 0)), // dx, dy
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(1.0, 0.2), // kernel scale
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Scharr3x3_cols16_rows2, Combine(
 | 
			
		||||
                            FILTER_TYPES,
 | 
			
		||||
                            Values(0), // not used
 | 
			
		||||
                            Values(Size(0, 1), Size(1, 0)), // dx, dy
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(1.0, 0.2), // kernel scale
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, GaussianBlurTest, Combine(
 | 
			
		||||
                            FILTER_TYPES,
 | 
			
		||||
                            Values(3, 5), // kernel size
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(0.0), // not used
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, GaussianBlur_multicols, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values(3, 5), // kernel size
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            FILTER_BORDER_SET_NO_WRAP_NO_ISOLATED,
 | 
			
		||||
                            Values(0.0), // not used
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Erode, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4, CV_64FC1, CV_64FC4),
 | 
			
		||||
                            Values(0, 5, 7, 9), // kernel size, 0 means kernel = Mat()
 | 
			
		||||
                            Values(Size(0, 0)), //not used
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT),
 | 
			
		||||
                            Values(1.0, 2.0, 3.0, 4.0),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, Dilate, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4, CV_64FC1, CV_64FC4),
 | 
			
		||||
                            Values(0, 3, 5, 7, 9), // kernel size, 0 means kernel = Mat()
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT),
 | 
			
		||||
                            Values(1.0, 2.0, 3.0, 4.0),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, MorphFilter3x3_cols16_rows2, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values(0, 3), // kernel size, 0 means kernel = Mat()
 | 
			
		||||
                            Values(Size(0, 0)), // not used
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT),
 | 
			
		||||
                            Values(1.0, 2.0, 3.0),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1))); // not used
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Filter, MorphologyEx, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
 | 
			
		||||
                            Values(3, 5, 7), // kernel size
 | 
			
		||||
                            Values((MorphOp)MORPH_OPEN, (MorphOp)MORPH_CLOSE, (MorphOp)MORPH_GRADIENT, (MorphOp)MORPH_TOPHAT, (MorphOp)MORPH_BLACKHAT), // used as generator of operations
 | 
			
		||||
                            Values(1, 2, 3),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										149
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_gftt.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_gftt.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,149 @@
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
//////////////////////////// GoodFeaturesToTrack //////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(GoodFeaturesToTrack, double, bool)
 | 
			
		||||
{
 | 
			
		||||
    double minDistance;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    static const int maxCorners;
 | 
			
		||||
    static const double qualityLevel;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    UMat points, upoints;
 | 
			
		||||
    std::vector<float> quality, uquality;
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        minDistance = GET_PARAM(0);
 | 
			
		||||
        useRoi = GET_PARAM(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Mat frame = readImage("../gpu/opticalflow/rubberwhale1.png", IMREAD_GRAYSCALE);
 | 
			
		||||
        ASSERT_FALSE(frame.empty()) << "could not load gpu/opticalflow/rubberwhale1.png";
 | 
			
		||||
 | 
			
		||||
        Size roiSize = frame.size();
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? 2 : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, frame.type(), 5, 256);
 | 
			
		||||
        src_roi.copyTo(frame);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void UMatToVector(const UMat & um, std::vector<Point2f> & v) const
 | 
			
		||||
    {
 | 
			
		||||
        v.resize(um.size().area());
 | 
			
		||||
        um.copyTo(Mat(um.size(), CV_32FC2, &v[0]));
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const int GoodFeaturesToTrack::maxCorners = 1000;
 | 
			
		||||
const double GoodFeaturesToTrack::qualityLevel = 0.01;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(GoodFeaturesToTrack, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; ++j)
 | 
			
		||||
    {
 | 
			
		||||
        generateTestData();
 | 
			
		||||
 | 
			
		||||
        std::vector<Point2f> upts, pts;
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::goodFeaturesToTrack(src_roi, points, maxCorners, qualityLevel, minDistance, noArray(), quality));
 | 
			
		||||
        ASSERT_FALSE(points.empty());
 | 
			
		||||
        UMatToVector(points, pts);
 | 
			
		||||
 | 
			
		||||
        OCL_ON(cv::goodFeaturesToTrack(usrc_roi, upoints, maxCorners, qualityLevel, minDistance, noArray(), uquality));
 | 
			
		||||
        ASSERT_FALSE(upoints.empty());
 | 
			
		||||
        UMatToVector(upoints, upts);
 | 
			
		||||
 | 
			
		||||
        ASSERT_EQ(pts.size(), quality.size());
 | 
			
		||||
        ASSERT_EQ(upts.size(), uquality.size());
 | 
			
		||||
        ASSERT_EQ(upts.size(), pts.size());
 | 
			
		||||
 | 
			
		||||
        int mistmatch = 0;
 | 
			
		||||
        for (size_t i = 0; i < pts.size(); ++i)
 | 
			
		||||
        {
 | 
			
		||||
            Point2i a = upts[i], b = pts[i];
 | 
			
		||||
 | 
			
		||||
            bool eq = std::abs(a.x - b.x) < 1 && std::abs(a.y - b.y) < 1 &&
 | 
			
		||||
                    std::abs(quality[i] - uquality[i]) <= 3.f * FLT_EPSILON * std::max(quality[i], uquality[i]);
 | 
			
		||||
 | 
			
		||||
            if (!eq)
 | 
			
		||||
                ++mistmatch;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        double bad_ratio = static_cast<double>(mistmatch) / pts.size();
 | 
			
		||||
        ASSERT_GE(1e-2, bad_ratio);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(GoodFeaturesToTrack, EmptyCorners)
 | 
			
		||||
{
 | 
			
		||||
    generateTestData();
 | 
			
		||||
    usrc_roi.setTo(Scalar::all(0));
 | 
			
		||||
 | 
			
		||||
    OCL_ON(cv::goodFeaturesToTrack(usrc_roi, upoints, maxCorners, qualityLevel, minDistance, noArray(), uquality));
 | 
			
		||||
 | 
			
		||||
    ASSERT_TRUE(upoints.empty());
 | 
			
		||||
    ASSERT_TRUE(uquality.empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, GoodFeaturesToTrack,
 | 
			
		||||
                            ::testing::Combine(testing::Values(0.0, 3.0), Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										276
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_histogram.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_histogram.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,276 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2014, Itseez, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Niko Li, newlife20080214@gmail.com
 | 
			
		||||
//    Jia Haipeng, jiahaipeng95@gmail.com
 | 
			
		||||
//    Shengen Yan, yanshengen@gmail.com
 | 
			
		||||
//    Jiang Liyuan, lyuan001.good@163.com
 | 
			
		||||
//    Rock Li, Rock.Li@amd.com
 | 
			
		||||
//    Wu Zailong, bullet@yeah.net
 | 
			
		||||
//    Xu Pang, pangxu010@163.com
 | 
			
		||||
//    Sen Liu, swjtuls1987@126.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(CalcBackProject, MatDepth, int, bool)
 | 
			
		||||
{
 | 
			
		||||
    int depth, N;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    std::vector<float> ranges;
 | 
			
		||||
    std::vector<int> channels;
 | 
			
		||||
    double scale;
 | 
			
		||||
 | 
			
		||||
    std::vector<Mat> images;
 | 
			
		||||
    std::vector<Mat> images_roi;
 | 
			
		||||
    std::vector<UMat> uimages;
 | 
			
		||||
    std::vector<UMat> uimages_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(hist);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        N = GET_PARAM(1);
 | 
			
		||||
        useRoi = GET_PARAM(2);
 | 
			
		||||
 | 
			
		||||
        ASSERT_GE(2, N);
 | 
			
		||||
 | 
			
		||||
        images.resize(N);
 | 
			
		||||
        images_roi.resize(N);
 | 
			
		||||
        uimages.resize(N);
 | 
			
		||||
        uimages_roi.resize(N);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        int totalChannels = 0;
 | 
			
		||||
 | 
			
		||||
        ranges.clear();
 | 
			
		||||
        channels.clear();
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < N; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
            int cn = randomInt(1, 5);
 | 
			
		||||
            randomSubMat(images[i], images_roi[i], roiSize, srcBorder, CV_MAKE_TYPE(depth, cn), 0, 125);
 | 
			
		||||
 | 
			
		||||
            ranges.push_back(10);
 | 
			
		||||
            ranges.push_back(100);
 | 
			
		||||
 | 
			
		||||
            channels.push_back(randomInt(0, cn) + totalChannels);
 | 
			
		||||
            totalChannels += cn;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Mat tmpHist;
 | 
			
		||||
        {
 | 
			
		||||
            std::vector<int> hist_size(N);
 | 
			
		||||
            for (int i = 0 ; i < N; ++i)
 | 
			
		||||
                hist_size[i] = randomInt(10, 50);
 | 
			
		||||
 | 
			
		||||
            cv::calcHist(images_roi, channels, noArray(), tmpHist, hist_size, ranges);
 | 
			
		||||
            ASSERT_EQ(CV_32FC1, tmpHist.type());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Border histBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(hist, hist_roi, tmpHist.size(), histBorder, tmpHist.type(), 0, MAX_VALUE);
 | 
			
		||||
        tmpHist.copyTo(hist_roi);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_MAKE_TYPE(depth, 1), 5, 16);
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < N; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            images[i].copyTo(uimages[i]);
 | 
			
		||||
 | 
			
		||||
            Size _wholeSize;
 | 
			
		||||
            Point ofs;
 | 
			
		||||
            images_roi[i].locateROI(_wholeSize, ofs);
 | 
			
		||||
 | 
			
		||||
            uimages_roi[i] = uimages[i](Rect(ofs.x, ofs.y, images_roi[i].cols, images_roi[i].rows));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(hist);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
        scale = randomDouble(0.1, 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void test_by_pict()
 | 
			
		||||
    {
 | 
			
		||||
        Mat frame1 = readImage("optflow/RubberWhale1.png", IMREAD_GRAYSCALE);
 | 
			
		||||
 | 
			
		||||
        UMat usrc;
 | 
			
		||||
        frame1.copyTo(usrc);
 | 
			
		||||
        int histSize = randomInt(3, 29);
 | 
			
		||||
        float hue_range[] = { 0, 180 };
 | 
			
		||||
        const float* ranges1 = { hue_range };
 | 
			
		||||
        Mat hist1;
 | 
			
		||||
 | 
			
		||||
        //compute histogram
 | 
			
		||||
        calcHist(&frame1, 1, 0, Mat(), hist1, 1, &histSize, &ranges1, true, false);
 | 
			
		||||
        normalize(hist1, hist1, 0, 255, NORM_MINMAX, -1, Mat());
 | 
			
		||||
 | 
			
		||||
        Mat dst1;
 | 
			
		||||
        UMat udst1, src, uhist1;
 | 
			
		||||
        hist1.copyTo(uhist1);
 | 
			
		||||
        std::vector<UMat> uims;
 | 
			
		||||
        uims.push_back(usrc);
 | 
			
		||||
        std::vector<float> urngs;
 | 
			
		||||
        urngs.push_back(0);
 | 
			
		||||
        urngs.push_back(180);
 | 
			
		||||
        std::vector<int> chs;
 | 
			
		||||
        chs.push_back(0);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(calcBackProject(&frame1, 1, 0, hist1, dst1, &ranges1, 1, true));
 | 
			
		||||
        OCL_ON(calcBackProject(uims, chs, uhist1, udst1, urngs, 1.0));
 | 
			
		||||
 | 
			
		||||
        if (cv::ocl::useOpenCL() && cv::ocl::Device::getDefault().isAMD())
 | 
			
		||||
        {
 | 
			
		||||
            Size dstSize = dst1.size();
 | 
			
		||||
            int nDiffs = (int)(0.03f*dstSize.height*dstSize.width);
 | 
			
		||||
 | 
			
		||||
            //check if the dst mats are the same except 3% difference
 | 
			
		||||
            EXPECT_MAT_N_DIFF(dst1, udst1, nDiffs);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            EXPECT_MAT_NEAR(dst1, udst1, 0.0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// CalcBackProject //////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CalcBackProject, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::calcBackProject(images_roi, channels, hist_roi, dst_roi, ranges, scale));
 | 
			
		||||
        OCL_ON(cv::calcBackProject(uimages_roi, channels, uhist_roi, udst_roi, ranges, scale));
 | 
			
		||||
 | 
			
		||||
        Size dstSize = dst_roi.size();
 | 
			
		||||
        int nDiffs = std::max((int)(0.07f*dstSize.area()), 1);
 | 
			
		||||
 | 
			
		||||
        //check if the dst mats are the same except 7% difference
 | 
			
		||||
        EXPECT_MAT_N_DIFF(dst_roi, udst_roi, nDiffs);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CalcBackProject, Mat_RealImage)
 | 
			
		||||
{
 | 
			
		||||
    //check on given image
 | 
			
		||||
    test_by_pict();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// CalcHist //////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(CalcHist, bool)
 | 
			
		||||
{
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(hist);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        useRoi = GET_PARAM(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, CV_8UC1, 0, 256);
 | 
			
		||||
 | 
			
		||||
        Border histBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(hist, hist_roi, Size(1, 256), histBorder, CV_32SC1, 0, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(hist);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CalcHist, Mat)
 | 
			
		||||
{
 | 
			
		||||
    const std::vector<int> channels(1, 0);
 | 
			
		||||
    std::vector<float> ranges(2);
 | 
			
		||||
    std::vector<int> histSize(1, 256);
 | 
			
		||||
    ranges[0] = 0;
 | 
			
		||||
    ranges[1] = 256;
 | 
			
		||||
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::calcHist(std::vector<Mat>(1, src_roi), channels, noArray(), hist_roi, histSize, ranges, false));
 | 
			
		||||
        OCL_ON(cv::calcHist(std::vector<UMat>(1, usrc_roi), channels, noArray(), uhist_roi, histSize, ranges, false));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(hist, 0.0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, CalcBackProject, Combine(Values((MatDepth)CV_8U), Values(1, 2), Bool()));
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, CalcHist, Values(true, false));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										184
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_houghlines.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_houghlines.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,184 @@
 | 
			
		||||
// This file is part of OpenCV project.
 | 
			
		||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
 | 
			
		||||
// of this distribution and at http://opencv.org/license.html.
 | 
			
		||||
 | 
			
		||||
// Copyright (C) 2014, Itseez, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
struct Vec2fComparator
 | 
			
		||||
{
 | 
			
		||||
    bool operator()(const Vec2f& a, const Vec2f b) const
 | 
			
		||||
    {
 | 
			
		||||
        if(a[0] != b[0]) return a[0] < b[0];
 | 
			
		||||
        else return a[1] < b[1];
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/////////////////////////////// HoughLines ////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(HoughLines, double, double, int)
 | 
			
		||||
{
 | 
			
		||||
    double rhoStep, thetaStep;
 | 
			
		||||
    int threshold;
 | 
			
		||||
 | 
			
		||||
    Size src_size;
 | 
			
		||||
    Mat src, dst;
 | 
			
		||||
    UMat usrc, udst;
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        rhoStep = GET_PARAM(0);
 | 
			
		||||
        thetaStep = GET_PARAM(1);
 | 
			
		||||
        threshold = GET_PARAM(2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData()
 | 
			
		||||
    {
 | 
			
		||||
        src_size = randomSize(500, 1920);
 | 
			
		||||
        src.create(src_size, CV_8UC1);
 | 
			
		||||
        src.setTo(Scalar::all(0));
 | 
			
		||||
        line(src, Point(0, 100), Point(100, 100), Scalar::all(255), 1);
 | 
			
		||||
        line(src, Point(0, 200), Point(100, 200), Scalar::all(255), 1);
 | 
			
		||||
        line(src, Point(0, 400), Point(100, 400), Scalar::all(255), 1);
 | 
			
		||||
        line(src, Point(100, 0), Point(100, 200), Scalar::all(255), 1);
 | 
			
		||||
        line(src, Point(200, 0), Point(200, 200), Scalar::all(255), 1);
 | 
			
		||||
        line(src, Point(400, 0), Point(400, 200), Scalar::all(255), 1);
 | 
			
		||||
 | 
			
		||||
        src.copyTo(usrc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void readRealTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Mat img = readImage("shared/pic5.png", IMREAD_GRAYSCALE);
 | 
			
		||||
        Canny(img, src, 100, 150, 3);
 | 
			
		||||
 | 
			
		||||
        src.copyTo(usrc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double eps = 0.)
 | 
			
		||||
    {
 | 
			
		||||
        EXPECT_EQ(dst.size(), udst.size());
 | 
			
		||||
 | 
			
		||||
        if (dst.total() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            Mat lines_cpu, lines_gpu;
 | 
			
		||||
            dst.copyTo(lines_cpu);
 | 
			
		||||
            udst.copyTo(lines_gpu);
 | 
			
		||||
 | 
			
		||||
            std::sort(lines_cpu.begin<Vec2f>(), lines_cpu.end<Vec2f>(), Vec2fComparator());
 | 
			
		||||
            std::sort(lines_gpu.begin<Vec2f>(), lines_gpu.end<Vec2f>(), Vec2fComparator());
 | 
			
		||||
 | 
			
		||||
            EXPECT_LE(TestUtils::checkNorm2(lines_cpu, lines_gpu), eps);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(HoughLines, RealImage)
 | 
			
		||||
{
 | 
			
		||||
    readRealTestData();
 | 
			
		||||
 | 
			
		||||
    OCL_OFF(cv::HoughLines(src, dst, rhoStep, thetaStep, threshold));
 | 
			
		||||
    OCL_ON(cv::HoughLines(usrc, udst, rhoStep, thetaStep, threshold));
 | 
			
		||||
 | 
			
		||||
    Near(1e-5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(HoughLines, GeneratedImage)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        generateTestData();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::HoughLines(src, dst, rhoStep, thetaStep, threshold));
 | 
			
		||||
        OCL_ON(cv::HoughLines(usrc, udst, rhoStep, thetaStep, threshold));
 | 
			
		||||
 | 
			
		||||
        Near(1e-5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////// HoughLinesP ///////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(HoughLinesP, int, double, double)
 | 
			
		||||
{
 | 
			
		||||
    double rhoStep, thetaStep, minLineLength, maxGap;
 | 
			
		||||
    int threshold;
 | 
			
		||||
 | 
			
		||||
    Size src_size;
 | 
			
		||||
    Mat src, dst;
 | 
			
		||||
    UMat usrc, udst;
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        rhoStep = 1.0;
 | 
			
		||||
        thetaStep = CV_PI / 180;
 | 
			
		||||
        threshold = GET_PARAM(0);
 | 
			
		||||
        minLineLength = GET_PARAM(1);
 | 
			
		||||
        maxGap = GET_PARAM(2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void readRealTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Mat img = readImage("shared/pic5.png", IMREAD_GRAYSCALE);
 | 
			
		||||
        Canny(img, src, 50, 200, 3);
 | 
			
		||||
 | 
			
		||||
        src.copyTo(usrc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double eps = 0.)
 | 
			
		||||
    {
 | 
			
		||||
        Mat lines_gpu = udst.getMat(ACCESS_READ);
 | 
			
		||||
 | 
			
		||||
        if (dst.total() > 0 && lines_gpu.total() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            Mat result_cpu(src.size(), CV_8UC1, Scalar::all(0));
 | 
			
		||||
            Mat result_gpu(src.size(), CV_8UC1, Scalar::all(0));
 | 
			
		||||
 | 
			
		||||
            MatConstIterator_<Vec4i> it = dst.begin<Vec4i>(), end = dst.end<Vec4i>();
 | 
			
		||||
            for ( ; it != end; it++)
 | 
			
		||||
            {
 | 
			
		||||
                Vec4i p = *it;
 | 
			
		||||
                line(result_cpu, Point(p[0], p[1]), Point(p[2], p[3]), Scalar(255));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            it = lines_gpu.begin<Vec4i>(), end = lines_gpu.end<Vec4i>();
 | 
			
		||||
            for ( ; it != end; it++)
 | 
			
		||||
            {
 | 
			
		||||
                Vec4i p = *it;
 | 
			
		||||
                line(result_gpu, Point(p[0], p[1]), Point(p[2], p[3]), Scalar(255));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            EXPECT_MAT_SIMILAR(result_cpu, result_gpu, eps);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(HoughLinesP, RealImage)
 | 
			
		||||
{
 | 
			
		||||
    readRealTestData();
 | 
			
		||||
 | 
			
		||||
    OCL_OFF(cv::HoughLinesP(src, dst, rhoStep, thetaStep, threshold, minLineLength, maxGap));
 | 
			
		||||
    OCL_ON(cv::HoughLinesP(usrc, udst, rhoStep, thetaStep, threshold, minLineLength, maxGap));
 | 
			
		||||
 | 
			
		||||
    Near(0.25);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, HoughLines, Combine(Values(1, 0.5),                        // rhoStep
 | 
			
		||||
                                                         Values(CV_PI / 180.0, CV_PI / 360.0),  // thetaStep
 | 
			
		||||
                                                         Values(85, 150)));                     // threshold
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, HoughLinesP, Combine(Values(100, 150),                     // threshold
 | 
			
		||||
                                                          Values(50, 100),                      // minLineLength
 | 
			
		||||
                                                          Values(5, 10)));                      // maxLineGap
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										501
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_imgproc.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_imgproc.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,501 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Niko Li, newlife20080214@gmail.com
 | 
			
		||||
//    Jia Haipeng, jiahaipeng95@gmail.com
 | 
			
		||||
//    Shengen Yan, yanshengen@gmail.com
 | 
			
		||||
//    Jiang Liyuan, lyuan001.good@163.com
 | 
			
		||||
//    Rock Li, Rock.Li@amd.com
 | 
			
		||||
//    Wu Zailong, bullet@yeah.net
 | 
			
		||||
//    Xu Pang, pangxu010@163.com
 | 
			
		||||
//    Sen Liu, swjtuls1987@126.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(ImgprocTestBase, MatType,
 | 
			
		||||
                int, // blockSize
 | 
			
		||||
                int, // border type
 | 
			
		||||
                bool) // roi or not
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType, blockSize;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        blockSize = GET_PARAM(1);
 | 
			
		||||
        borderType = GET_PARAM(2);
 | 
			
		||||
        useRoi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0, bool relative = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// copyMakeBorder ////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(CopyMakeBorder, MatDepth, // depth
 | 
			
		||||
                Channels, // channels
 | 
			
		||||
                bool, // isolated or not
 | 
			
		||||
                BorderType, // border type
 | 
			
		||||
                bool) // roi or not
 | 
			
		||||
{
 | 
			
		||||
    int type, borderType;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TestUtils::Border border;
 | 
			
		||||
    Scalar val;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
 | 
			
		||||
        if (GET_PARAM(2))
 | 
			
		||||
            borderType |= BORDER_ISOLATED;
 | 
			
		||||
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        border = randomBorder(0, MAX_VALUE << 2);
 | 
			
		||||
        val = randomScalar(-MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        dstBorder.top += border.top;
 | 
			
		||||
        dstBorder.lef += border.lef;
 | 
			
		||||
        dstBorder.rig += border.rig;
 | 
			
		||||
        dstBorder.bot += border.bot;
 | 
			
		||||
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, 0);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CopyMakeBorder, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::copyMakeBorder(src_roi, dst_roi, border.top, border.bot, border.lef, border.rig, borderType, val));
 | 
			
		||||
        OCL_ON(cv::copyMakeBorder(usrc_roi, udst_roi, border.top, border.bot, border.lef, border.rig, borderType, val));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// equalizeHist //////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef ImgprocTestBase EqualizeHist;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(EqualizeHist, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::equalizeHist(src_roi, dst_roi));
 | 
			
		||||
        OCL_ON(cv::equalizeHist(usrc_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        Near(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// Corners test //////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
struct CornerTestBase :
 | 
			
		||||
        public ImgprocTestBase
 | 
			
		||||
{
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        Mat image = readImageType("../gpu/stereobm/aloe-L.png", type);
 | 
			
		||||
        ASSERT_FALSE(image.empty());
 | 
			
		||||
 | 
			
		||||
        bool isFP = CV_MAT_DEPTH(type) >= CV_32F;
 | 
			
		||||
        float val = 255.0f;
 | 
			
		||||
        if (isFP)
 | 
			
		||||
        {
 | 
			
		||||
            image.convertTo(image, -1, 1.0 / 255);
 | 
			
		||||
            val /= 255.0f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Size roiSize = image.size();
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
 | 
			
		||||
        Size wholeSize = Size(roiSize.width + srcBorder.lef + srcBorder.rig, roiSize.height + srcBorder.top + srcBorder.bot);
 | 
			
		||||
        src = randomMat(wholeSize, type, -val, val, false);
 | 
			
		||||
        src_roi = src(Rect(srcBorder.lef, srcBorder.top, roiSize.width, roiSize.height));
 | 
			
		||||
        image.copyTo(src_roi);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_32FC1, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef CornerTestBase CornerMinEigenVal;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CornerMinEigenVal, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        int apertureSize = 3;
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::cornerMinEigenVal(src_roi, dst_roi, blockSize, apertureSize, borderType));
 | 
			
		||||
        OCL_ON(cv::cornerMinEigenVal(usrc_roi, udst_roi, blockSize, apertureSize, borderType));
 | 
			
		||||
 | 
			
		||||
        // The corner kernel uses native_sqrt() which has implementation defined accuracy.
 | 
			
		||||
        // If we're using a CL implementation that isn't intel, test with relaxed accuracy.
 | 
			
		||||
        if (!ocl::useOpenCL() || ocl::Device::getDefault().isIntel())
 | 
			
		||||
            Near(1e-5, true);
 | 
			
		||||
        else
 | 
			
		||||
            Near(0.1, true);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// cornerHarris //////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef CornerTestBase CornerHarris;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CornerHarris, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        int apertureSize = 3;
 | 
			
		||||
        double k = randomDouble(0.01, 0.9);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::cornerHarris(src_roi, dst_roi, blockSize, apertureSize, k, borderType));
 | 
			
		||||
        OCL_ON(cv::cornerHarris(usrc_roi, udst_roi, blockSize, apertureSize, k, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(1e-6, true);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////// preCornerDetect //////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef ImgprocTestBase PreCornerDetect;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(PreCornerDetect, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        const int apertureSize = blockSize;
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::preCornerDetect(src_roi, dst_roi, apertureSize, borderType));
 | 
			
		||||
        OCL_ON(cv::preCornerDetect(usrc_roi, udst_roi, apertureSize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(1e-6, true);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////// integral /////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
struct Integral :
 | 
			
		||||
        public ImgprocTestBase
 | 
			
		||||
{
 | 
			
		||||
    int sdepth, sqdepth;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst2);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        sdepth = GET_PARAM(1);
 | 
			
		||||
        sqdepth = GET_PARAM(2);
 | 
			
		||||
        useRoi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        ASSERT_EQ(CV_MAT_CN(type), 1);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE), isize = Size(roiSize.width + 1, roiSize.height + 1);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? 2 : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? 2 : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, isize, dstBorder, sdepth, 5, 16);
 | 
			
		||||
 | 
			
		||||
        Border dst2Border = randomBorder(0, useRoi ? 2 : 0);
 | 
			
		||||
        randomSubMat(dst2, dst2_roi, isize, dst2Border, sqdepth, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near2(double threshold = 0.0, bool relative = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (relative)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst2, threshold);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(dst2, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Integral, Mat1)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::integral(src_roi, dst_roi, sdepth));
 | 
			
		||||
        OCL_ON(cv::integral(usrc_roi, udst_roi, sdepth));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Integral, Mat2)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::integral(src_roi, dst_roi, dst2_roi, sdepth, sqdepth));
 | 
			
		||||
        OCL_ON(cv::integral(usrc_roi, udst_roi, udst2_roi, sdepth, sqdepth));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
        sqdepth == CV_32F ? Near2(1e-6, true) : Near2();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////  threshold //////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
struct Threshold :
 | 
			
		||||
        public ImgprocTestBase
 | 
			
		||||
{
 | 
			
		||||
    int thresholdType;
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        thresholdType = GET_PARAM(2);
 | 
			
		||||
        useRoi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Threshold, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        double maxVal = randomDouble(20.0, 127.0);
 | 
			
		||||
        double thresh = randomDouble(0.0, maxVal);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::threshold(src_roi, dst_roi, thresh, maxVal, thresholdType));
 | 
			
		||||
        OCL_ON(cv::threshold(usrc_roi, udst_roi, thresh, maxVal, thresholdType));
 | 
			
		||||
 | 
			
		||||
        Near(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////// CLAHE //////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(CLAHETest, Size, double, bool)
 | 
			
		||||
{
 | 
			
		||||
    Size gridSize;
 | 
			
		||||
    double clipLimit;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        gridSize = GET_PARAM(0);
 | 
			
		||||
        clipLimit = GET_PARAM(1);
 | 
			
		||||
        useRoi = GET_PARAM(2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        Size roiSize = randomSize(std::max(gridSize.height, gridSize.width), MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, CV_8UC1, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_8UC1, 5, 16);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(CLAHETest, Accuracy)
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < test_loop_times; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        Ptr<CLAHE> clahe = cv::createCLAHE(clipLimit, gridSize);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(clahe->apply(src_roi, dst_roi));
 | 
			
		||||
        OCL_ON(clahe->apply(usrc_roi, udst_roi));
 | 
			
		||||
 | 
			
		||||
        Near(1.0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, EqualizeHist, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values(0), // not used
 | 
			
		||||
                            Values(0), // not used
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, CornerMinEigenVal, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1, (MatType)CV_32FC1),
 | 
			
		||||
                            Values(3, 5),
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                   (BorderType)BORDER_REFLECT, (BorderType)BORDER_REFLECT101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, CornerHarris, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1, CV_32FC1),
 | 
			
		||||
                            Values(3, 5),
 | 
			
		||||
                            Values( (BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                    (BorderType)BORDER_REFLECT, (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, PreCornerDetect, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1, CV_32FC1),
 | 
			
		||||
                            Values(3, 5),
 | 
			
		||||
                            Values( (BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                    (BorderType)BORDER_REFLECT, (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, Integral, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1), // TODO does not work with CV_32F, CV_64F
 | 
			
		||||
                            Values(CV_32SC1, CV_32FC1), // desired sdepth
 | 
			
		||||
                            Values(CV_32FC1, CV_64FC1), // desired sqdepth
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, Threshold, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC2, CV_8UC3, CV_8UC4,
 | 
			
		||||
                                   CV_16SC1, CV_16SC2, CV_16SC3, CV_16SC4,
 | 
			
		||||
                                   CV_32FC1, CV_32FC2, CV_32FC3, CV_32FC4),
 | 
			
		||||
                            Values(0),
 | 
			
		||||
                            Values(ThreshOp(THRESH_BINARY),
 | 
			
		||||
                                   ThreshOp(THRESH_BINARY_INV), ThreshOp(THRESH_TRUNC),
 | 
			
		||||
                                   ThreshOp(THRESH_TOZERO), ThreshOp(THRESH_TOZERO_INV)),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(Imgproc, CLAHETest, Combine(
 | 
			
		||||
                            Values(Size(4, 4), Size(32, 8), Size(8, 64)),
 | 
			
		||||
                            Values(0.0, 10.0, 62.0, 300.0),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocTestBase, CopyMakeBorder, Combine(
 | 
			
		||||
                            testing::Values((MatDepth)CV_8U, (MatDepth)CV_16S, (MatDepth)CV_32S, (MatDepth)CV_32F),
 | 
			
		||||
                            testing::Values(Channels(1), Channels(3), (Channels)4),
 | 
			
		||||
                            Bool(), // border isolated or not
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT, (BorderType)BORDER_REPLICATE, (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                   (BorderType)BORDER_WRAP, (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										133
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_match_template.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_match_template.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,133 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////// matchTemplate //////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
CV_ENUM(MatchTemplType, CV_TM_CCORR, CV_TM_CCORR_NORMED, CV_TM_SQDIFF, CV_TM_SQDIFF_NORMED, CV_TM_CCOEFF, CV_TM_CCOEFF_NORMED)
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(MatchTemplate, MatDepth, Channels, MatchTemplType, bool)
 | 
			
		||||
{
 | 
			
		||||
    int type;
 | 
			
		||||
    int depth;
 | 
			
		||||
    int method;
 | 
			
		||||
    bool use_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(image);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(templ);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(result);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        method = GET_PARAM(2);
 | 
			
		||||
        use_roi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Size image_roiSize = randomSize(2, 100);
 | 
			
		||||
        Size templ_roiSize = Size(randomInt(1, image_roiSize.width), randomInt(1, image_roiSize.height));
 | 
			
		||||
        Size result_roiSize = Size(image_roiSize.width - templ_roiSize.width + 1,
 | 
			
		||||
                                   image_roiSize.height - templ_roiSize.height + 1);
 | 
			
		||||
 | 
			
		||||
        const double upValue = 256;
 | 
			
		||||
 | 
			
		||||
        Border imageBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(image, image_roi, image_roiSize, imageBorder, type, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        Border templBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(templ, templ_roi, templ_roiSize, templBorder, type, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        Border resultBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(result, result_roi, result_roiSize, resultBorder, CV_32FC1, -upValue, upValue);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(image);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(templ);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near()
 | 
			
		||||
    {
 | 
			
		||||
        bool isNormed =
 | 
			
		||||
        method == TM_CCORR_NORMED ||
 | 
			
		||||
        method == TM_SQDIFF_NORMED ||
 | 
			
		||||
        method == TM_CCOEFF_NORMED;
 | 
			
		||||
 | 
			
		||||
        if (isNormed)
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR(result, 3e-2);
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE_SPARSE(result, 1.5e-2);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(MatchTemplate, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        generateTestData();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::matchTemplate(image_roi, templ_roi, result_roi, method));
 | 
			
		||||
        OCL_ON(cv::matchTemplate(uimage_roi, utempl_roi, uresult_roi, method));
 | 
			
		||||
 | 
			
		||||
        Near();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, MatchTemplate, Combine(
 | 
			
		||||
                                Values(CV_8U, CV_32F),
 | 
			
		||||
                                Values(1, 2, 3, 4),
 | 
			
		||||
                                MatchTemplType::all(),
 | 
			
		||||
                                Bool())
 | 
			
		||||
                           );
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										111
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_medianfilter.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_medianfilter.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,111 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors as is and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////medianFilter//////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(MedianFilter, MatDepth, Channels, int, bool)
 | 
			
		||||
{
 | 
			
		||||
    int type;
 | 
			
		||||
    int ksize;
 | 
			
		||||
    bool use_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        ksize = GET_PARAM(2);
 | 
			
		||||
        use_roi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData()
 | 
			
		||||
    {
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        EXPECT_MAT_NEAR(dst, udst, threshold);
 | 
			
		||||
        EXPECT_MAT_NEAR(dst_roi, udst_roi, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(MedianFilter, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        generateTestData();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::medianBlur(src_roi, dst_roi, ksize));
 | 
			
		||||
        OCL_ON(cv::medianBlur(usrc_roi, udst_roi, ksize));
 | 
			
		||||
 | 
			
		||||
        Near(0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, MedianFilter, Combine(
 | 
			
		||||
                                Values(CV_8U, CV_16U, CV_16S, CV_32F),
 | 
			
		||||
                                OCL_ALL_CHANNELS,
 | 
			
		||||
                                Values(3, 5),
 | 
			
		||||
                                Bool())
 | 
			
		||||
                           );
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										171
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_pyramids.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_pyramids.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,171 @@
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Yao Wang yao@multicorewareinc.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(PyrTestBase, MatDepth, Channels, BorderType, bool)
 | 
			
		||||
{
 | 
			
		||||
    int depth, channels, borderType;
 | 
			
		||||
    bool use_roi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        depth = GET_PARAM(0);
 | 
			
		||||
        channels = GET_PARAM(1);
 | 
			
		||||
        borderType = GET_PARAM(2);
 | 
			
		||||
        use_roi = GET_PARAM(3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void generateTestData(Size src_roiSize, Size dst_roiSize)
 | 
			
		||||
    {
 | 
			
		||||
        Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, src_roiSize, srcBorder, CV_MAKETYPE(depth, channels), -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dst_roiSize, dstBorder, CV_MAKETYPE(depth, channels), -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/////////////////////// PyrDown //////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef PyrTestBase PyrDown;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(PyrDown, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        Size src_roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Size dst_roiSize = Size(randomInt((src_roiSize.width - 1) / 2, (src_roiSize.width + 3) / 2),
 | 
			
		||||
                                randomInt((src_roiSize.height - 1) / 2, (src_roiSize.height + 3) / 2));
 | 
			
		||||
        dst_roiSize = dst_roiSize.empty() ? Size((src_roiSize.width + 1) / 2, (src_roiSize.height + 1) / 2) : dst_roiSize;
 | 
			
		||||
        generateTestData(src_roiSize, dst_roiSize);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(pyrDown(src_roi, dst_roi, dst_roiSize, borderType));
 | 
			
		||||
        OCL_ON(pyrDown(usrc_roi, udst_roi, dst_roiSize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth == CV_32F ? 1e-4f : 1.0f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocPyr, PyrDown, Combine(
 | 
			
		||||
                            Values(CV_8U, CV_16U, CV_16S, CV_32F, CV_64F),
 | 
			
		||||
                            Values(1, 2, 3, 4),
 | 
			
		||||
                            Values((BorderType)BORDER_REPLICATE,
 | 
			
		||||
                            (BorderType)BORDER_REFLECT, (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()
 | 
			
		||||
                            ));
 | 
			
		||||
 | 
			
		||||
/////////////////////// PyrUp //////////////////////////
 | 
			
		||||
 | 
			
		||||
typedef PyrTestBase PyrUp;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(PyrUp, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        Size src_roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Size dst_roiSize = Size(2 * src_roiSize.width, 2 * src_roiSize.height);
 | 
			
		||||
        generateTestData(src_roiSize, dst_roiSize);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(pyrUp(src_roi, dst_roi, dst_roiSize, borderType));
 | 
			
		||||
        OCL_ON(pyrUp(usrc_roi, udst_roi, dst_roiSize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth == CV_32F ? 1e-4f : 1.0f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef PyrTestBase PyrUp_cols2;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(PyrUp_cols2, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        Size src_roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        src_roiSize.width += (src_roiSize.width % 2);
 | 
			
		||||
        Size dst_roiSize = Size(2 * src_roiSize.width, 2 * src_roiSize.height);
 | 
			
		||||
        generateTestData(src_roiSize, dst_roiSize);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(pyrUp(src_roi, dst_roi, dst_roiSize, borderType));
 | 
			
		||||
        OCL_ON(pyrUp(usrc_roi, udst_roi, dst_roiSize, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(depth == CV_32F ? 1e-4f : 1.0f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocPyr, PyrUp, Combine(
 | 
			
		||||
                            Values(CV_8U, CV_16U, CV_16S, CV_32F, CV_64F),
 | 
			
		||||
                            Values(1, 2, 3, 4),
 | 
			
		||||
                            Values((BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()
 | 
			
		||||
                            ));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocPyr, PyrUp_cols2, Combine(
 | 
			
		||||
                            Values((MatDepth)CV_8U),
 | 
			
		||||
                            Values((Channels)1),
 | 
			
		||||
                            Values((BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()
 | 
			
		||||
                            ));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										168
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_sepfilter2d.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_sepfilter2d.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,168 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// sepFilter2D
 | 
			
		||||
PARAM_TEST_CASE(SepFilter2D, MatDepth, Channels, BorderType, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    static const int kernelMinSize = 2;
 | 
			
		||||
    static const int kernelMaxSize = 10;
 | 
			
		||||
 | 
			
		||||
    int type;
 | 
			
		||||
    Point anchor;
 | 
			
		||||
    int borderType;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
    Mat kernelX, kernelY;
 | 
			
		||||
    double delta;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        borderType = GET_PARAM(2) | (GET_PARAM(3) ? BORDER_ISOLATED : 0);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi(bool bitExact)
 | 
			
		||||
    {
 | 
			
		||||
        Size ksize = randomSize(kernelMinSize, kernelMaxSize);
 | 
			
		||||
        if (1 != ksize.width % 2)
 | 
			
		||||
            ksize.width++;
 | 
			
		||||
        if (1 != ksize.height % 2)
 | 
			
		||||
            ksize.height++;
 | 
			
		||||
 | 
			
		||||
        Mat temp = randomMat(Size(ksize.width, 1), CV_32FC1, -0.5, 1.0);
 | 
			
		||||
        cv::normalize(temp, kernelX, 1.0, 0.0, NORM_L1);
 | 
			
		||||
        temp = randomMat(Size(1, ksize.height), CV_32FC1, -0.5, 1.0);
 | 
			
		||||
        cv::normalize(temp, kernelY, 1.0, 0.0, NORM_L1);
 | 
			
		||||
 | 
			
		||||
        if (bitExact)
 | 
			
		||||
        {
 | 
			
		||||
            kernelX.convertTo(temp, CV_32S, 256);
 | 
			
		||||
            temp.convertTo(kernelX, CV_32F, 1.0 / 256);
 | 
			
		||||
            kernelY.convertTo(temp, CV_32S, 256);
 | 
			
		||||
            temp.convertTo(kernelY, CV_32F, 1.0 / 256);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(ksize.width, MAX_VALUE, ksize.height, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, roiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        anchor.x = anchor.y = -1;
 | 
			
		||||
        delta = randomDouble(-100, 100);
 | 
			
		||||
 | 
			
		||||
        if (bitExact)
 | 
			
		||||
        {
 | 
			
		||||
            delta = (int)(delta * 256) / 256.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        OCL_EXPECT_MATS_NEAR(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(SepFilter2D, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times + 3; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi(false);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::sepFilter2D(src_roi, dst_roi, -1, kernelX, kernelY, anchor, delta, borderType));
 | 
			
		||||
        OCL_ON(cv::sepFilter2D(usrc_roi, udst_roi, -1, kernelX, kernelY, anchor, delta, borderType));
 | 
			
		||||
 | 
			
		||||
        Near(1.0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(SepFilter2D, Mat_BitExact)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times + 3; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi(true);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::sepFilter2D(src_roi, dst_roi, -1, kernelX, kernelY, anchor, delta, borderType));
 | 
			
		||||
        OCL_ON(cv::sepFilter2D(usrc_roi, udst_roi, -1, kernelX, kernelY, anchor, delta, borderType));
 | 
			
		||||
 | 
			
		||||
        if (src_roi.depth() < CV_32F)
 | 
			
		||||
            Near(0.0);
 | 
			
		||||
        else
 | 
			
		||||
            Near(1e-3);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImageProc, SepFilter2D,
 | 
			
		||||
                            Combine(
 | 
			
		||||
                                Values(CV_8U, CV_32F),
 | 
			
		||||
                                OCL_ALL_CHANNELS,
 | 
			
		||||
                                Values(
 | 
			
		||||
                                        (BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                        (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                        (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                        (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                                Bool(), // BORDER_ISOLATED
 | 
			
		||||
                                Bool()  // ROI
 | 
			
		||||
                                )
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
							
								
								
									
										506
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_warp.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										506
									
								
								3rdparty/opencv-4.5.4/modules/imgproc/test/ocl/test_warp.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,506 @@
 | 
			
		||||
/*M///////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | 
			
		||||
//
 | 
			
		||||
//  By downloading, copying, installing or using the software you agree to this license.
 | 
			
		||||
//  If you do not agree to this license, do not download, install,
 | 
			
		||||
//  copy or use the software.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//                           License Agreement
 | 
			
		||||
//                For Open Source Computer Vision Library
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
 | 
			
		||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
 | 
			
		||||
// Third party copyrights are property of their respective owners.
 | 
			
		||||
//
 | 
			
		||||
// @Authors
 | 
			
		||||
//    Niko Li, newlife20080214@gmail.com
 | 
			
		||||
//    Jia Haipeng, jiahaipeng95@gmail.com
 | 
			
		||||
//    Shengen Yan, yanshengen@gmail.com
 | 
			
		||||
//    Jiang Liyuan, lyuan001.good@163.com
 | 
			
		||||
//    Rock Li, Rock.Li@amd.com
 | 
			
		||||
//    Wu Zailong, bullet@yeah.net
 | 
			
		||||
//    Xu Pang, pangxu010@163.com
 | 
			
		||||
//    Sen Liu, swjtuls1987@126.com
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
// are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's of source code must retain the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
//   * Redistribution's in binary form must reproduce the above copyright notice,
 | 
			
		||||
//     this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//     and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
//   * The name of the copyright holders may not be used to endorse or promote products
 | 
			
		||||
//     derived from this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// This software is provided by the copyright holders and contributors "as is" and
 | 
			
		||||
// any express or implied warranties, including, but not limited to, the implied
 | 
			
		||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
 | 
			
		||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
 | 
			
		||||
// indirect, incidental, special, exemplary, or consequential damages
 | 
			
		||||
// (including, but not limited to, procurement of substitute goods or services;
 | 
			
		||||
// loss of use, data, or profits; or business interruption) however caused
 | 
			
		||||
// and on any theory of liability, whether in contract, strict liability,
 | 
			
		||||
// or tort (including negligence or otherwise) arising in any way out of
 | 
			
		||||
// the use of this software, even if advised of the possibility of such damage.
 | 
			
		||||
//
 | 
			
		||||
//M*/
 | 
			
		||||
 | 
			
		||||
#include "../test_precomp.hpp"
 | 
			
		||||
#include "opencv2/ts/ocl_test.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_OPENCL
 | 
			
		||||
 | 
			
		||||
namespace opencv_test {
 | 
			
		||||
namespace ocl {
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    noType = -1
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// warpAffine  & warpPerspective
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(WarpTestBase, MatType, Interpolation, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    int type, interpolation;
 | 
			
		||||
    Size dsize;
 | 
			
		||||
    bool useRoi, mapInverse;
 | 
			
		||||
    int depth;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        interpolation = GET_PARAM(1);
 | 
			
		||||
        mapInverse = GET_PARAM(2);
 | 
			
		||||
        useRoi = GET_PARAM(3);
 | 
			
		||||
        depth = CV_MAT_DEPTH(type);
 | 
			
		||||
 | 
			
		||||
        if (mapInverse)
 | 
			
		||||
            interpolation |= WARP_INVERSE_MAP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        dsize = randomSize(1, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dsize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        if (depth < CV_32F)
 | 
			
		||||
            EXPECT_MAT_N_DIFF(dst_roi, udst_roi, cvRound(dst_roi.total()*threshold));
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(WarpTest_cols4_Base, MatType, Interpolation, bool, bool)
 | 
			
		||||
{
 | 
			
		||||
    int type, interpolation;
 | 
			
		||||
    Size dsize;
 | 
			
		||||
    bool useRoi, mapInverse;
 | 
			
		||||
    int depth;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        interpolation = GET_PARAM(1);
 | 
			
		||||
        mapInverse = GET_PARAM(2);
 | 
			
		||||
        useRoi = GET_PARAM(3);
 | 
			
		||||
        depth = CV_MAT_DEPTH(type);
 | 
			
		||||
 | 
			
		||||
        if (mapInverse)
 | 
			
		||||
            interpolation |= WARP_INVERSE_MAP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        dsize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        dsize.width = ((dsize.width >> 2) + 1) * 4;
 | 
			
		||||
 | 
			
		||||
        Size roiSize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, roiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dsize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void Near(double threshold = 0.0)
 | 
			
		||||
    {
 | 
			
		||||
        if (depth < CV_32F)
 | 
			
		||||
            EXPECT_MAT_N_DIFF(dst_roi, udst_roi, cvRound(dst_roi.total()*threshold));
 | 
			
		||||
        else
 | 
			
		||||
            OCL_EXPECT_MATS_NEAR_RELATIVE(dst, threshold);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/////warpAffine
 | 
			
		||||
 | 
			
		||||
typedef WarpTestBase WarpAffine;
 | 
			
		||||
 | 
			
		||||
/////warpAffine
 | 
			
		||||
 | 
			
		||||
typedef WarpTestBase WarpAffine;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(WarpAffine, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        double eps = depth < CV_32F ? 0.04 : 0.06;
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        Mat M = getRotationMatrix2D(Point2f(src_roi.cols / 2.0f, src_roi.rows / 2.0f),
 | 
			
		||||
            rng.uniform(-180.f, 180.f), rng.uniform(0.4f, 2.0f));
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::warpAffine(src_roi, dst_roi, M, dsize, interpolation));
 | 
			
		||||
        OCL_ON(cv::warpAffine(usrc_roi, udst_roi, M, dsize, interpolation));
 | 
			
		||||
 | 
			
		||||
        Near(eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef WarpTest_cols4_Base WarpAffine_cols4;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(WarpAffine_cols4, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        double eps = depth < CV_32F ? 0.04 : 0.06;
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        Mat M = getRotationMatrix2D(Point2f(src_roi.cols / 2.0f, src_roi.rows / 2.0f),
 | 
			
		||||
            rng.uniform(-180.f, 180.f), rng.uniform(0.4f, 2.0f));
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::warpAffine(src_roi, dst_roi, M, dsize, interpolation));
 | 
			
		||||
        OCL_ON(cv::warpAffine(usrc_roi, udst_roi, M, dsize, interpolation));
 | 
			
		||||
 | 
			
		||||
        Near(eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//// warpPerspective
 | 
			
		||||
 | 
			
		||||
typedef WarpTestBase WarpPerspective;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(WarpPerspective, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        double eps = depth < CV_32F ? 0.03 : 0.06;
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        float cols = static_cast<float>(src_roi.cols), rows = static_cast<float>(src_roi.rows);
 | 
			
		||||
        float cols2 = cols / 2.0f, rows2 = rows / 2.0f;
 | 
			
		||||
        Point2f sp[] = { Point2f(0.0f, 0.0f), Point2f(cols, 0.0f), Point2f(0.0f, rows), Point2f(cols, rows) };
 | 
			
		||||
        Point2f dp[] = { Point2f(rng.uniform(0.0f, cols2), rng.uniform(0.0f, rows2)),
 | 
			
		||||
            Point2f(rng.uniform(cols2, cols), rng.uniform(0.0f, rows2)),
 | 
			
		||||
            Point2f(rng.uniform(0.0f, cols2), rng.uniform(rows2, rows)),
 | 
			
		||||
            Point2f(rng.uniform(cols2, cols), rng.uniform(rows2, rows)) };
 | 
			
		||||
        Mat M = getPerspectiveTransform(sp, dp);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::warpPerspective(src_roi, dst_roi, M, dsize, interpolation));
 | 
			
		||||
        OCL_ON(cv::warpPerspective(usrc_roi, udst_roi, M, dsize, interpolation));
 | 
			
		||||
 | 
			
		||||
        Near(eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef WarpTest_cols4_Base WarpPerspective_cols4;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(WarpPerspective_cols4, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        double eps = depth < CV_32F ? 0.03 : 0.06;
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        float cols = static_cast<float>(src_roi.cols), rows = static_cast<float>(src_roi.rows);
 | 
			
		||||
        float cols2 = cols / 2.0f, rows2 = rows / 2.0f;
 | 
			
		||||
        Point2f sp[] = { Point2f(0.0f, 0.0f), Point2f(cols, 0.0f), Point2f(0.0f, rows), Point2f(cols, rows) };
 | 
			
		||||
        Point2f dp[] = { Point2f(rng.uniform(0.0f, cols2), rng.uniform(0.0f, rows2)),
 | 
			
		||||
            Point2f(rng.uniform(cols2, cols), rng.uniform(0.0f, rows2)),
 | 
			
		||||
            Point2f(rng.uniform(0.0f, cols2), rng.uniform(rows2, rows)),
 | 
			
		||||
            Point2f(rng.uniform(cols2, cols), rng.uniform(rows2, rows)) };
 | 
			
		||||
        Mat M = getPerspectiveTransform(sp, dp);
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::warpPerspective(src_roi, dst_roi, M, dsize, interpolation));
 | 
			
		||||
        OCL_ON(cv::warpPerspective(usrc_roi, udst_roi, M, dsize, interpolation));
 | 
			
		||||
 | 
			
		||||
        Near(eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//// resize
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(Resize, MatType, double, double, Interpolation, bool, int)
 | 
			
		||||
{
 | 
			
		||||
    int type, interpolation;
 | 
			
		||||
    int widthMultiple;
 | 
			
		||||
    double fx, fy;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        type = GET_PARAM(0);
 | 
			
		||||
        fx = GET_PARAM(1);
 | 
			
		||||
        fy = GET_PARAM(2);
 | 
			
		||||
        interpolation = GET_PARAM(3);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
        widthMultiple = GET_PARAM(5);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        CV_Assert(fx > 0 && fy > 0);
 | 
			
		||||
 | 
			
		||||
        Size srcRoiSize = randomSize(10, MAX_VALUE), dstRoiSize;
 | 
			
		||||
        // Make sure the width is a multiple of the requested value, and no more
 | 
			
		||||
        srcRoiSize.width += widthMultiple - 1 - (srcRoiSize.width - 1) % widthMultiple;
 | 
			
		||||
        dstRoiSize.width = cvRound(srcRoiSize.width * fx);
 | 
			
		||||
        dstRoiSize.height = cvRound(srcRoiSize.height * fy);
 | 
			
		||||
 | 
			
		||||
        if (dstRoiSize.empty())
 | 
			
		||||
        {
 | 
			
		||||
            random_roi();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, srcRoiSize, srcBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dstRoiSize, dstBorder, type, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if defined(__aarch64__) || defined(__arm__)
 | 
			
		||||
const int integerEps = 3;
 | 
			
		||||
#else
 | 
			
		||||
const int integerEps = 1;
 | 
			
		||||
#endif
 | 
			
		||||
OCL_TEST_P(Resize, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        int depth = CV_MAT_DEPTH(type);
 | 
			
		||||
        double eps = depth <= CV_32S ? integerEps : 5e-2;
 | 
			
		||||
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::resize(src_roi, dst_roi, Size(), fx, fy, interpolation));
 | 
			
		||||
        OCL_ON(cv::resize(usrc_roi, udst_roi, Size(), fx, fy, interpolation));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MAT_N_DIFF(dst, eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// remap
 | 
			
		||||
 | 
			
		||||
PARAM_TEST_CASE(Remap, MatDepth, Channels, std::pair<MatType, MatType>, BorderType, bool)
 | 
			
		||||
{
 | 
			
		||||
    int srcType, map1Type, map2Type;
 | 
			
		||||
    int borderType;
 | 
			
		||||
    bool useRoi;
 | 
			
		||||
 | 
			
		||||
    Scalar val;
 | 
			
		||||
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(src);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(map1);
 | 
			
		||||
    TEST_DECLARE_INPUT_PARAMETER(map2);
 | 
			
		||||
    TEST_DECLARE_OUTPUT_PARAMETER(dst);
 | 
			
		||||
 | 
			
		||||
    virtual void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        srcType = CV_MAKE_TYPE(GET_PARAM(0), GET_PARAM(1));
 | 
			
		||||
        map1Type = GET_PARAM(2).first;
 | 
			
		||||
        map2Type = GET_PARAM(2).second;
 | 
			
		||||
        borderType = GET_PARAM(3);
 | 
			
		||||
        useRoi = GET_PARAM(4);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void random_roi()
 | 
			
		||||
    {
 | 
			
		||||
        val = randomScalar(-MAX_VALUE, MAX_VALUE);
 | 
			
		||||
        Size srcROISize = randomSize(1, MAX_VALUE);
 | 
			
		||||
        Size dstROISize = randomSize(1, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(src, src_roi, srcROISize, srcBorder, srcType, 5, 256);
 | 
			
		||||
 | 
			
		||||
        Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(dst, dst_roi, dstROISize, dstBorder, srcType, -MAX_VALUE, MAX_VALUE);
 | 
			
		||||
 | 
			
		||||
        int mapMaxValue = MAX_VALUE << 2;
 | 
			
		||||
        Border map1Border = randomBorder(0, useRoi ? MAX_VALUE : 0);
 | 
			
		||||
        randomSubMat(map1, map1_roi, dstROISize, map1Border, map1Type, -mapMaxValue, mapMaxValue);
 | 
			
		||||
 | 
			
		||||
        Border map2Border = randomBorder(0, useRoi ? MAX_VALUE + 1 : 0);
 | 
			
		||||
        if (map2Type != noType)
 | 
			
		||||
        {
 | 
			
		||||
            int mapMinValue = -mapMaxValue;
 | 
			
		||||
            if (map2Type == CV_16UC1 || map2Type == CV_16SC1)
 | 
			
		||||
                mapMinValue = 0, mapMaxValue = INTER_TAB_SIZE2;
 | 
			
		||||
            randomSubMat(map2, map2_roi, dstROISize, map2Border, map2Type, mapMinValue, mapMaxValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(src);
 | 
			
		||||
        UMAT_UPLOAD_INPUT_PARAMETER(map1);
 | 
			
		||||
        UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
 | 
			
		||||
        if (noType != map2Type)
 | 
			
		||||
            UMAT_UPLOAD_INPUT_PARAMETER(map2);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef Remap Remap_INTER_NEAREST;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Remap_INTER_NEAREST, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::remap(src_roi, dst_roi, map1_roi, map2_roi, INTER_NEAREST, borderType, val));
 | 
			
		||||
        OCL_ON(cv::remap(usrc_roi, udst_roi, umap1_roi, umap2_roi, INTER_NEAREST, borderType, val));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MAT_N_DIFF(dst, 1.0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef Remap Remap_INTER_LINEAR;
 | 
			
		||||
 | 
			
		||||
OCL_TEST_P(Remap_INTER_LINEAR, Mat)
 | 
			
		||||
{
 | 
			
		||||
    for (int j = 0; j < test_loop_times; j++)
 | 
			
		||||
    {
 | 
			
		||||
        random_roi();
 | 
			
		||||
 | 
			
		||||
        double eps = 2.0;
 | 
			
		||||
#ifdef __ANDROID__
 | 
			
		||||
        // TODO investigate accuracy
 | 
			
		||||
        if (cv::ocl::Device::getDefault().isNVidia())
 | 
			
		||||
            eps = 8.0;
 | 
			
		||||
#elif defined(__arm__)
 | 
			
		||||
        eps = 8.0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        OCL_OFF(cv::remap(src_roi, dst_roi, map1_roi, map2_roi, INTER_LINEAR, borderType, val));
 | 
			
		||||
        OCL_ON(cv::remap(usrc_roi, udst_roi, umap1_roi, umap2_roi, INTER_LINEAR, borderType, val));
 | 
			
		||||
 | 
			
		||||
        OCL_EXPECT_MAT_N_DIFF(dst, eps);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, WarpAffine, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
 | 
			
		||||
                            Values((Interpolation)INTER_NEAREST, (Interpolation)INTER_LINEAR, (Interpolation)INTER_CUBIC),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, WarpAffine_cols4, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values((Interpolation)INTER_NEAREST, (Interpolation)INTER_LINEAR, (Interpolation)INTER_CUBIC),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, WarpPerspective, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
 | 
			
		||||
                            Values((Interpolation)INTER_NEAREST, (Interpolation)INTER_LINEAR, (Interpolation)INTER_CUBIC),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, WarpPerspective_cols4, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1),
 | 
			
		||||
                            Values((Interpolation)INTER_NEAREST, (Interpolation)INTER_LINEAR, (Interpolation)INTER_CUBIC),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, Resize, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC4, CV_16UC2, CV_32FC1, CV_32FC4),
 | 
			
		||||
                            Values(0.5, 1.5, 2.0, 0.2),
 | 
			
		||||
                            Values(0.5, 1.5, 2.0, 0.2),
 | 
			
		||||
                            Values((Interpolation)INTER_NEAREST, (Interpolation)INTER_LINEAR),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1, 16)));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarpLinearExact, Resize, Combine(
 | 
			
		||||
                            Values(CV_8UC1, CV_8UC4, CV_16UC2),
 | 
			
		||||
                            Values(0.5, 1.5, 2.0, 0.2),
 | 
			
		||||
                            Values(0.5, 1.5, 2.0, 0.2),
 | 
			
		||||
                            Values((Interpolation)INTER_LINEAR_EXACT),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1, 16)));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarpResizeArea, Resize, Combine(
 | 
			
		||||
                            Values((MatType)CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4),
 | 
			
		||||
                            Values(0.7, 0.4, 0.5),
 | 
			
		||||
                            Values(0.3, 0.6, 0.5),
 | 
			
		||||
                            Values((Interpolation)INTER_AREA),
 | 
			
		||||
                            Bool(),
 | 
			
		||||
                            Values(1, 16)));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, Remap_INTER_LINEAR, Combine(
 | 
			
		||||
                            Values(CV_8U, CV_16U, CV_32F),
 | 
			
		||||
                            Values(1, 3, 4),
 | 
			
		||||
                            Values(std::pair<MatType, MatType>((MatType)CV_32FC1, (MatType)CV_32FC1),
 | 
			
		||||
                                   std::pair<MatType, MatType>((MatType)CV_16SC2, (MatType)CV_16UC1),
 | 
			
		||||
                                   std::pair<MatType, MatType>((MatType)CV_32FC2, noType)),
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                   (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                   (BorderType)BORDER_WRAP,
 | 
			
		||||
                                   (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                   (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
OCL_INSTANTIATE_TEST_CASE_P(ImgprocWarp, Remap_INTER_NEAREST, Combine(
 | 
			
		||||
                            Values(CV_8U, CV_16U, CV_32F),
 | 
			
		||||
                            Values(1, 3, 4),
 | 
			
		||||
                            Values(std::pair<MatType, MatType>((MatType)CV_32FC1, (MatType)CV_32FC1),
 | 
			
		||||
                                   std::pair<MatType, MatType>((MatType)CV_32FC2, noType),
 | 
			
		||||
                                   std::pair<MatType, MatType>((MatType)CV_16SC2, (MatType)CV_16UC1),
 | 
			
		||||
                                   std::pair<MatType, MatType>((MatType)CV_16SC2, noType)),
 | 
			
		||||
                            Values((BorderType)BORDER_CONSTANT,
 | 
			
		||||
                                   (BorderType)BORDER_REPLICATE,
 | 
			
		||||
                                   (BorderType)BORDER_WRAP,
 | 
			
		||||
                                   (BorderType)BORDER_REFLECT,
 | 
			
		||||
                                   (BorderType)BORDER_REFLECT_101),
 | 
			
		||||
                            Bool()));
 | 
			
		||||
 | 
			
		||||
} } // namespace opencv_test::ocl
 | 
			
		||||
 | 
			
		||||
#endif // HAVE_OPENCL
 | 
			
		||||
		Reference in New Issue
	
	Block a user