1 | PARAM_TEST_CASE(FilterTestBase, MatType,
|
2 | int,
|
3 | Size,
|
4 | int,
|
5 | bool)
|
6 | {
|
7 | int type, borderType, ksize;
|
8 | bool useRoi;
|
9 |
|
10 | Mat src, dst_whole, src_roi, dst_roi;
|
11 | ocl::oclMat gsrc_whole, gsrc_roi, gdst_whole, gdst_roi;
|
12 |
|
13 | virtual void SetUp()
|
14 | {
|
15 | type = GET_PARAM(0);
|
16 | ksize = GET_PARAM(1);
|
17 | borderType = GET_PARAM(3);
|
18 | useRoi = GET_PARAM(4);
|
19 | }
|
20 |
|
21 | void random_roi()
|
22 | {
|
23 | Size roiSize = randomSize(1, MAX_VALUE);
|
24 | Border srcBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
|
25 | randomSubMat(src, src_roi, roiSize, srcBorder, type, 5, 256);
|
26 |
|
27 | Border dstBorder = randomBorder(0, useRoi ? MAX_VALUE : 0);
|
28 | randomSubMat(dst_whole, dst_roi, roiSize, dstBorder, type, 5, 16);
|
29 |
|
30 | generateOclMat(gsrc_whole, gsrc_roi, src, roiSize, srcBorder);
|
31 | generateOclMat(gdst_whole, gdst_roi, dst_whole, roiSize, dstBorder);
|
32 | }
|
33 |
|
34 | void Near(double threshold = 0.0)
|
35 | {
|
36 | Mat roi, whole;
|
37 | gdst_whole.download(whole);
|
38 | gdst_roi.download(roi);
|
39 |
|
40 | EXPECT_MAT_NEAR(dst_whole, whole, threshold);
|
41 | EXPECT_MAT_NEAR(dst_roi, roi, threshold);
|
42 | }
|
43 | };
|
44 |
|
45 | struct ErodeDilate :
|
46 | public FilterTestBase
|
47 | {
|
48 | int iterations;
|
49 |
|
50 | virtual void SetUp()
|
51 | {
|
52 | type = GET_PARAM(0);
|
53 | ksize = GET_PARAM(1);
|
54 | iterations = GET_PARAM(3);
|
55 | useRoi = GET_PARAM(4);
|
56 | }
|
57 | };
|
58 |
|
59 | typedef ErodeDilate Erode;
|
60 |
|
61 | OCL_TEST_P(Erode, Mat)
|
62 | {
|
63 |
|
64 | Size kernelSize(ksize, ksize);
|
65 | Mat kernel;
|
66 |
|
67 | for (int j = 0; j < LOOP_TIMES; j++)
|
68 | {
|
69 | kernel = randomMat(kernelSize, CV_8UC1, 0, 3);
|
70 |
|
71 | random_roi();
|
72 |
|
73 | cv::erode(src_roi, dst_roi, kernel, Point(-1, -1), iterations);
|
74 | ocl::erode(gsrc_roi, gdst_roi, kernel, Point(-1, -1), iterations);
|
75 |
|
76 | Near(1e-5);
|
77 | }
|
78 | }
|
79 |
|
80 | typedef ErodeDilate Dilate;
|
81 |
|
82 | OCL_TEST_P(Dilate, Mat)
|
83 | {
|
84 |
|
85 | Mat kernel;
|
86 |
|
87 | for (int j = 0; j < LOOP_TIMES; j++)
|
88 | {
|
89 | kernel = randomMat(Size(3, 3), CV_8UC1, 0, 3);
|
90 |
|
91 | random_roi();
|
92 |
|
93 | cv::dilate(src_roi, dst_roi, kernel, Point(-1, -1), iterations);
|
94 | ocl::dilate(gsrc_roi, gdst_roi, kernel, Point(-1, -1), iterations);
|
95 |
|
96 | Near(1e-5);
|
97 | }
|
98 | }
|
99 |
|
100 | INSTANTIATE_TEST_CASE_P(Filter, Erode, Combine(
|
101 | Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
|
102 | Values(3, 5, 7),
|
103 | Values(Size(0, 0)),
|
104 | testing::Range(1, 4),
|
105 | Bool()));
|
106 |
|
107 | INSTANTIATE_TEST_CASE_P(Filter, Dilate, Combine(
|
108 | Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
|
109 | Values(3, 5, 7),
|
110 | Values(Size(0, 0)),
|
111 | testing::Range(1, 4),
|
112 | Bool()));
|