reproducer.cpp

Ilya Lavrenov, 2013-10-22 08:28 pm

Download (3 kB)

 
1
PARAM_TEST_CASE(FilterTestBase, MatType,
2
                int, // kernel size
3
                Size, // dx, dy
4
                int, // border type, or iteration
5
                bool) // roi or not
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
    // erode or dilate kernel
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); // TODO iterations, borderType
75
76
        Near(1e-5);
77
    }
78
}
79
80
typedef ErodeDilate Dilate;
81
82
OCL_TEST_P(Dilate, Mat)
83
{
84
    // erode or dilate kernel
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); // TODO iterations, borderType
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)), // not used
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)), // not used
111
                            testing::Range(1, 4),
112
                            Bool()));