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