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-2013, Advanced Micro Devices, Inc., all rights reserved.
14 // Third party copyrights are property of their respective owners.
15 //
16 // Redistribution and use in source and binary forms, with or without modification,
17 // are permitted provided that the following conditions are met:
18 //
19 // * Redistribution's of source code must retain the above copyright notice,
20 // this list of conditions and the following disclaimer.
21 //
22 // * Redistribution's in binary form must reproduce the above copyright notice,
23 // this list of conditions and the following disclaimer in the documentation
24 // and/or other materials provided with the distribution.
25 //
26 // * The name of the copyright holders may not be used to endorse or promote products
27 // derived from this software without specific prior written permission.
28 //
29 // This software is provided by the copyright holders and contributors "as is" and
30 // any express or implied warranties, including, but not limited to, the implied
31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
32 // In no event shall the OpenCV Foundation or contributors be liable for any direct,
33 // indirect, incidental, special, exemplary, or consequential damages
34 // (including, but not limited to, procurement of substitute goods or services;
35 // loss of use, data, or profits; or business interruption) however caused
36 // and on any theory of liability, whether in contract, strict liability,
37 // or tort (including negligence or otherwise) arising in any way out of
38 // the use of this software, even if advised of the possibility of such damage.
39 //
40 //M*/
41
42 #include "../test_precomp.hpp"
43 #include "opencv2/ts/ocl_test.hpp"
44
45 #include <cmath>
46
47 #ifdef HAVE_OPENCL
48
49 namespace cvtest {
50 namespace ocl {
51
52 //////////////////////////////// LUT /////////////////////////////////////////////////
53
PARAM_TEST_CASE(Lut,MatDepth,MatDepth,Channels,bool,bool)54 PARAM_TEST_CASE(Lut, MatDepth, MatDepth, Channels, bool, bool)
55 {
56 int src_depth, lut_depth;
57 int cn;
58 bool use_roi, same_cn;
59
60 TEST_DECLARE_INPUT_PARAMETER(src);
61 TEST_DECLARE_INPUT_PARAMETER(lut);
62 TEST_DECLARE_OUTPUT_PARAMETER(dst);
63
64 virtual void SetUp()
65 {
66 src_depth = GET_PARAM(0);
67 lut_depth = GET_PARAM(1);
68 cn = GET_PARAM(2);
69 same_cn = GET_PARAM(3);
70 use_roi = GET_PARAM(4);
71 }
72
73 void generateTestData()
74 {
75 const int src_type = CV_MAKE_TYPE(src_depth, cn);
76 const int lut_type = CV_MAKE_TYPE(lut_depth, same_cn ? cn : 1);
77 const int dst_type = CV_MAKE_TYPE(lut_depth, cn);
78
79 Size roiSize = randomSize(1, MAX_VALUE);
80 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
81 randomSubMat(src, src_roi, roiSize, srcBorder, src_type, 0, 256);
82
83 Size lutRoiSize = Size(256, 1);
84 Border lutBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
85 randomSubMat(lut, lut_roi, lutRoiSize, lutBorder, lut_type, 5, 16);
86
87 Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
88 randomSubMat(dst, dst_roi, roiSize, dstBorder, dst_type, 5, 16);
89
90 UMAT_UPLOAD_INPUT_PARAMETER(src);
91 UMAT_UPLOAD_INPUT_PARAMETER(lut);
92 UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
93 }
94
95 void Near(double threshold = 0.)
96 {
97 OCL_EXPECT_MATS_NEAR(dst, threshold);
98 }
99 };
100
OCL_TEST_P(Lut,Mat)101 OCL_TEST_P(Lut, Mat)
102 {
103 for (int j = 0; j < test_loop_times; j++)
104 {
105 generateTestData();
106
107 OCL_OFF(cv::LUT(src_roi, lut_roi, dst_roi));
108 OCL_ON(cv::LUT(usrc_roi, ulut_roi, udst_roi));
109
110 Near();
111 }
112 }
113
114 ///////////////////////// ArithmTestBase ///////////////////////////
115
PARAM_TEST_CASE(ArithmTestBase,MatDepth,Channels,bool)116 PARAM_TEST_CASE(ArithmTestBase, MatDepth, Channels, bool)
117 {
118 int depth;
119 int cn;
120 bool use_roi;
121 cv::Scalar val;
122 cv::Scalar val_in_range;
123
124 TEST_DECLARE_INPUT_PARAMETER(src1);
125 TEST_DECLARE_INPUT_PARAMETER(src2);
126 TEST_DECLARE_INPUT_PARAMETER(mask);
127 TEST_DECLARE_OUTPUT_PARAMETER(dst1);
128 TEST_DECLARE_OUTPUT_PARAMETER(dst2);
129
130 virtual void SetUp()
131 {
132 depth = GET_PARAM(0);
133 cn = GET_PARAM(1);
134 use_roi = GET_PARAM(2);
135 }
136
137 virtual void generateTestData(bool with_val_in_range = false)
138 {
139 const int type = CV_MAKE_TYPE(depth, cn);
140
141 double minV = getMinVal(type);
142 double maxV = getMaxVal(type);
143
144 Size roiSize = randomSize(1, MAX_VALUE);
145 Border src1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
146 randomSubMat(src1, src1_roi, roiSize, src1Border, type, 2, 11); // FIXIT: Test with minV, maxV
147
148 Border src2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
149 randomSubMat(src2, src2_roi, roiSize, src2Border, type, std::max(-1540., minV), std::min(1740., maxV));
150
151 Border dst1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
152 randomSubMat(dst1, dst1_roi, roiSize, dst1Border, type, 5, 16);
153
154 Border dst2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
155 randomSubMat(dst2, dst2_roi, roiSize, dst2Border, type, 5, 16);
156
157 Border maskBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
158 randomSubMat(mask, mask_roi, roiSize, maskBorder, CV_8UC1, 0, 2);
159 cv::threshold(mask, mask, 0.5, 255., CV_8UC1);
160 *mask.ptr(0) = 255; // prevent test case with mask filled 0 only
161
162 val = cv::Scalar(rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0),
163 rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0));
164
165 if (with_val_in_range)
166 {
167 val_in_range = cv::Scalar(rng.uniform(minV, maxV), rng.uniform(minV, maxV),
168 rng.uniform(minV, maxV), rng.uniform(minV, maxV));
169 }
170
171 UMAT_UPLOAD_INPUT_PARAMETER(src1);
172 UMAT_UPLOAD_INPUT_PARAMETER(src2);
173 UMAT_UPLOAD_INPUT_PARAMETER(mask);
174 UMAT_UPLOAD_OUTPUT_PARAMETER(dst1);
175 UMAT_UPLOAD_OUTPUT_PARAMETER(dst2);
176 }
177
178 void Near(double threshold = 0., bool relative = false)
179 {
180 if (!relative)
181 OCL_EXPECT_MATS_NEAR(dst1, threshold);
182 else
183 OCL_EXPECT_MATS_NEAR_RELATIVE(dst1, threshold);
184 }
185
186 void Near1(double threshold = 0.)
187 {
188 OCL_EXPECT_MATS_NEAR(dst2, threshold);
189 }
190 };
191
192 //////////////////////////////// Add /////////////////////////////////////////////////
193
194 typedef ArithmTestBase Add;
195
OCL_TEST_P(Add,Mat)196 OCL_TEST_P(Add, Mat)
197 {
198 for (int j = 0; j < test_loop_times; j++)
199 {
200 generateTestData();
201
202 OCL_OFF(cv::add(src1_roi, src2_roi, dst1_roi));
203 OCL_ON(cv::add(usrc1_roi, usrc2_roi, udst1_roi));
204 Near(0);
205 }
206 }
207
OCL_TEST_P(Add,Mat_Mask)208 OCL_TEST_P(Add, Mat_Mask)
209 {
210 for (int j = 0; j < test_loop_times; j++)
211 {
212 generateTestData();
213
214 OCL_OFF(cv::add(src1_roi, src2_roi, dst1_roi, mask_roi));
215 OCL_ON(cv::add(usrc1_roi, usrc2_roi, udst1_roi, umask_roi));
216 Near(0);
217 }
218 }
219
OCL_TEST_P(Add,Scalar)220 OCL_TEST_P(Add, Scalar)
221 {
222 for (int j = 0; j < test_loop_times; j++)
223 {
224 generateTestData();
225
226 OCL_OFF(cv::add(src1_roi, val, dst1_roi));
227 OCL_ON(cv::add(val, usrc1_roi, udst1_roi));
228 Near(1e-5);
229 }
230 }
231
OCL_TEST_P(Add,Scalar_Mask)232 OCL_TEST_P(Add, Scalar_Mask)
233 {
234 for (int j = 0; j < test_loop_times; j++)
235 {
236 generateTestData();
237
238 OCL_OFF(cv::add(src1_roi, val, dst1_roi, mask_roi));
239 OCL_ON(cv::add(usrc1_roi, val, udst1_roi, umask_roi));
240 Near(1e-5);
241 }
242 }
243
244 //////////////////////////////////////// Subtract //////////////////////////////////////////////
245
246 typedef ArithmTestBase Subtract;
247
OCL_TEST_P(Subtract,Mat)248 OCL_TEST_P(Subtract, Mat)
249 {
250 for (int j = 0; j < test_loop_times; j++)
251 {
252 generateTestData();
253
254 OCL_OFF(cv::subtract(src1_roi, src2_roi, dst1_roi));
255 OCL_ON(cv::subtract(usrc1_roi, usrc2_roi, udst1_roi));
256 Near(0);
257 }
258 }
259
OCL_TEST_P(Subtract,Mat_Mask)260 OCL_TEST_P(Subtract, Mat_Mask)
261 {
262 for (int j = 0; j < test_loop_times; j++)
263 {
264 generateTestData();
265
266 OCL_OFF(cv::subtract(src1_roi, src2_roi, dst1_roi, mask_roi));
267 OCL_ON(cv::subtract(usrc1_roi, usrc2_roi, udst1_roi, umask_roi));
268 Near(0);
269 }
270 }
271
OCL_TEST_P(Subtract,Scalar)272 OCL_TEST_P(Subtract, Scalar)
273 {
274 for (int j = 0; j < test_loop_times; j++)
275 {
276 generateTestData();
277
278 OCL_OFF(cv::subtract(val, src1_roi, dst1_roi));
279 OCL_ON(cv::subtract(val, usrc1_roi, udst1_roi));
280 Near(1e-5);
281 }
282 }
283
OCL_TEST_P(Subtract,Scalar_Mask)284 OCL_TEST_P(Subtract, Scalar_Mask)
285 {
286 for (int j = 0; j < test_loop_times; j++)
287 {
288 generateTestData();
289
290 OCL_OFF(cv::subtract(src1_roi, val, dst1_roi, mask_roi));
291 OCL_ON(cv::subtract(usrc1_roi, val, udst1_roi, umask_roi));
292 Near(1e-5);
293 }
294 }
295
296 //////////////////////////////// Mul /////////////////////////////////////////////////
297
298 typedef ArithmTestBase Mul;
299
OCL_TEST_P(Mul,Mat)300 OCL_TEST_P(Mul, Mat)
301 {
302 for (int j = 0; j < test_loop_times; j++)
303 {
304 generateTestData();
305
306 OCL_OFF(cv::multiply(src1_roi, src2_roi, dst1_roi));
307 OCL_ON(cv::multiply(usrc1_roi, usrc2_roi, udst1_roi));
308 Near(0);
309 }
310 }
311
OCL_TEST_P(Mul,Scalar)312 OCL_TEST_P(Mul, Scalar)
313 {
314 for (int j = 0; j < test_loop_times; j++)
315 {
316 generateTestData();
317
318 OCL_OFF(cv::multiply(src1_roi, val, dst1_roi));
319 OCL_ON(cv::multiply(val, usrc1_roi, udst1_roi));
320
321 Near(udst1_roi.depth() >= CV_32F ? 1e-3 : 1);
322 }
323 }
324
OCL_TEST_P(Mul,Mat_Scale)325 OCL_TEST_P(Mul, Mat_Scale)
326 {
327 for (int j = 0; j < test_loop_times; j++)
328 {
329 generateTestData();
330
331 OCL_OFF(cv::multiply(src1_roi, src2_roi, dst1_roi, val[0]));
332 OCL_ON(cv::multiply(usrc1_roi, usrc2_roi, udst1_roi, val[0]));
333
334 #ifdef ANDROID
335 Near(udst1_roi.depth() >= CV_32F ? 2e-1 : 1);
336 #else
337 Near(udst1_roi.depth() >= CV_32F ? 1e-3 : 1);
338 #endif
339 }
340 }
341
OCL_TEST_P(Mul,Mat_Scalar_Scale)342 OCL_TEST_P(Mul, Mat_Scalar_Scale)
343 {
344 for (int j = 0; j < test_loop_times; j++)
345 {
346 generateTestData();
347
348 OCL_OFF(cv::multiply(src1_roi, val, dst1_roi, val[0]));
349 OCL_ON(cv::multiply(usrc1_roi, val, udst1_roi, val[0]));
350
351 if (udst1_roi.depth() >= CV_32F)
352 Near(1e-6, true);
353 else
354 Near(1);
355 }
356 }
357
358
359 //////////////////////////////// Div /////////////////////////////////////////////////
360
361 typedef ArithmTestBase Div;
362
OCL_TEST_P(Div,Mat)363 OCL_TEST_P(Div, Mat)
364 {
365 for (int j = 0; j < test_loop_times; j++)
366 {
367 generateTestData();
368
369 OCL_OFF(cv::divide(src1_roi, src2_roi, dst1_roi));
370 OCL_ON(cv::divide(usrc1_roi, usrc2_roi, udst1_roi));
371 Near(1);
372 }
373 }
374
OCL_TEST_P(Div,Scalar)375 OCL_TEST_P(Div, Scalar)
376 {
377 for (int j = 0; j < test_loop_times; j++)
378 {
379 generateTestData();
380
381 OCL_OFF(cv::divide(val, src1_roi, dst1_roi));
382 OCL_ON(cv::divide(val, usrc1_roi, udst1_roi));
383
384 Near(udst1_roi.depth() >= CV_32F ? 1e-3 : 1);
385 }
386 }
387
OCL_TEST_P(Div,Scalar2)388 OCL_TEST_P(Div, Scalar2)
389 {
390 for (int j = 0; j < test_loop_times; j++)
391 {
392 generateTestData();
393
394 OCL_OFF(cv::divide(src1_roi, val, dst1_roi));
395 OCL_ON(cv::divide(usrc1_roi, val, udst1_roi));
396
397 Near(udst1_roi.depth() >= CV_32F ? 1e-3 : 1);
398 }
399 }
400
OCL_TEST_P(Div,Mat_Scale)401 OCL_TEST_P(Div, Mat_Scale)
402 {
403 for (int j = 0; j < test_loop_times; j++)
404 {
405 generateTestData();
406
407 OCL_OFF(cv::divide(src1_roi, src2_roi, dst1_roi, val[0]));
408 OCL_ON(cv::divide(usrc1_roi, usrc2_roi, udst1_roi, val[0]));
409
410 Near(udst1_roi.depth() >= CV_32F ? 4e-3 : 1);
411 }
412 }
413
OCL_TEST_P(Div,Mat_Scalar_Scale)414 OCL_TEST_P(Div, Mat_Scalar_Scale)
415 {
416 for (int j = 0; j < test_loop_times; j++)
417 {
418 generateTestData();
419
420 OCL_OFF(cv::divide(src1_roi, val, dst1_roi, val[0]));
421 OCL_ON(cv::divide(usrc1_roi, val, udst1_roi, val[0]));
422
423 Near(udst1_roi.depth() >= CV_32F ? 4e-3 : 1);
424 }
425 }
426
OCL_TEST_P(Div,Recip)427 OCL_TEST_P(Div, Recip)
428 {
429 for (int j = 0; j < test_loop_times; j++)
430 {
431 generateTestData();
432
433 OCL_OFF(cv::divide(val[0], src1_roi, dst1_roi));
434 OCL_ON(cv::divide(val[0], usrc1_roi, udst1_roi));
435
436 Near(udst1_roi.depth() >= CV_32F ? 1e-3 : 1);
437 }
438 }
439
440 //////////////////////////////// Min/Max /////////////////////////////////////////////////
441
442 typedef ArithmTestBase Min;
443
OCL_TEST_P(Min,Mat)444 OCL_TEST_P(Min, Mat)
445 {
446 for (int j = 0; j < test_loop_times; j++)
447 {
448 generateTestData();
449
450 OCL_OFF(cv::max(src1_roi, src2_roi, dst1_roi));
451 OCL_ON(cv::max(usrc1_roi, usrc2_roi, udst1_roi));
452 Near(0);
453 }
454 }
455
456 typedef ArithmTestBase Max;
457
OCL_TEST_P(Max,Mat)458 OCL_TEST_P(Max, Mat)
459 {
460 for (int j = 0; j < test_loop_times; j++)
461 {
462 generateTestData();
463
464 OCL_OFF(cv::min(src1_roi, src2_roi, dst1_roi));
465 OCL_ON(cv::min(usrc1_roi, usrc2_roi, udst1_roi));
466 Near(0);
467 }
468 }
469
470 //////////////////////////////// Absdiff /////////////////////////////////////////////////
471
472 typedef ArithmTestBase Absdiff;
473
OCL_TEST_P(Absdiff,Mat)474 OCL_TEST_P(Absdiff, Mat)
475 {
476 for (int j = 0; j < test_loop_times; j++)
477 {
478 generateTestData();
479
480 OCL_OFF(cv::absdiff(src1_roi, src2_roi, dst1_roi));
481 OCL_ON(cv::absdiff(usrc1_roi, usrc2_roi, udst1_roi));
482 Near(0);
483 }
484 }
485
OCL_TEST_P(Absdiff,Scalar)486 OCL_TEST_P(Absdiff, Scalar)
487 {
488 for (int j = 0; j < test_loop_times; j++)
489 {
490 generateTestData();
491
492 OCL_OFF(cv::absdiff(src1_roi, val, dst1_roi));
493 OCL_ON(cv::absdiff(usrc1_roi, val, udst1_roi));
494 Near(1e-5);
495 }
496 }
497
498 //////////////////////////////// CartToPolar /////////////////////////////////////////////////
499
500 typedef ArithmTestBase CartToPolar;
501
OCL_TEST_P(CartToPolar,angleInDegree)502 OCL_TEST_P(CartToPolar, angleInDegree)
503 {
504 for (int j = 0; j < test_loop_times; j++)
505 {
506 generateTestData();
507
508 OCL_OFF(cv::cartToPolar(src1_roi, src2_roi, dst1_roi, dst2_roi, true));
509 OCL_ON(cv::cartToPolar(usrc1_roi, usrc2_roi, udst1_roi, udst2_roi, true));
510 Near(0.5);
511 Near1(0.5);
512 }
513 }
514
OCL_TEST_P(CartToPolar,angleInRadians)515 OCL_TEST_P(CartToPolar, angleInRadians)
516 {
517 for (int j = 0; j < test_loop_times; j++)
518 {
519 generateTestData();
520
521 OCL_OFF(cv::cartToPolar(src1_roi, src2_roi, dst1_roi, dst2_roi));
522 OCL_ON(cv::cartToPolar(usrc1_roi, usrc2_roi, udst1_roi, udst2_roi));
523 Near(0.5);
524 Near1(0.5);
525 }
526 }
527
528 //////////////////////////////// PolarToCart /////////////////////////////////////////////////
529
530 typedef ArithmTestBase PolarToCart;
531
OCL_TEST_P(PolarToCart,angleInDegree)532 OCL_TEST_P(PolarToCart, angleInDegree)
533 {
534 for (int j = 0; j < test_loop_times; j++)
535 {
536 generateTestData();
537
538 OCL_OFF(cv::polarToCart(src1_roi, src2_roi, dst1_roi, dst2_roi, true));
539 OCL_ON(cv::polarToCart(usrc1_roi, usrc2_roi, udst1_roi, udst2_roi, true));
540
541 Near(0.5);
542 Near1(0.5);
543 }
544 }
545
OCL_TEST_P(PolarToCart,angleInRadians)546 OCL_TEST_P(PolarToCart, angleInRadians)
547 {
548 for (int j = 0; j < test_loop_times; j++)
549 {
550 generateTestData();
551
552 OCL_OFF(cv::polarToCart(src1_roi, src2_roi, dst1_roi, dst2_roi));
553 OCL_ON(cv::polarToCart(usrc1_roi, usrc2_roi, udst1_roi, udst2_roi));
554
555 Near(0.5);
556 Near1(0.5);
557 }
558 }
559
560 //////////////////////////////// Transpose /////////////////////////////////////////////////
561
562 typedef ArithmTestBase Transpose;
563
OCL_TEST_P(Transpose,Mat)564 OCL_TEST_P(Transpose, Mat)
565 {
566 for (int j = 0; j < test_loop_times; j++)
567 {
568 generateTestData();
569
570 Size roiSize = src1_roi.size();
571 Border dst1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
572 randomSubMat(dst1, dst1_roi, Size(roiSize.height, roiSize.width), dst1Border, src1.type(), 5, 16);
573
574 UMAT_UPLOAD_INPUT_PARAMETER(dst1);
575
576 OCL_OFF(cv::transpose(src1_roi, dst1_roi));
577 OCL_ON(cv::transpose(usrc1_roi, udst1_roi));
578
579 Near(1e-5);
580 }
581 }
582
OCL_TEST_P(Transpose,SquareInplace)583 OCL_TEST_P(Transpose, SquareInplace)
584 {
585 const int type = CV_MAKE_TYPE(depth, cn);
586
587 for (int j = 0; j < test_loop_times; j++)
588 {
589 Size roiSize = randomSize(1, MAX_VALUE);
590 roiSize.height = roiSize.width; // make it square
591
592 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
593 randomSubMat(src1, src1_roi, roiSize, srcBorder, type, 5, 16);
594
595 UMAT_UPLOAD_OUTPUT_PARAMETER(src1);
596
597 OCL_OFF(cv::transpose(src1_roi, src1_roi));
598 OCL_ON(cv::transpose(usrc1_roi, usrc1_roi));
599
600 OCL_EXPECT_MATS_NEAR(src1, 0);
601 }
602 }
603
604 //////////////////////////////// Bitwise_and /////////////////////////////////////////////////
605
606 typedef ArithmTestBase Bitwise_and;
607
OCL_TEST_P(Bitwise_and,Mat)608 OCL_TEST_P(Bitwise_and, Mat)
609 {
610 for (int j = 0; j < test_loop_times; j++)
611 {
612 generateTestData();
613
614 OCL_OFF(cv::bitwise_and(src1_roi, src2_roi, dst1_roi));
615 OCL_ON(cv::bitwise_and(usrc1_roi, usrc2_roi, udst1_roi));
616 Near(0);
617 }
618 }
619
OCL_TEST_P(Bitwise_and,Mat_Mask)620 OCL_TEST_P(Bitwise_and, Mat_Mask)
621 {
622 for (int j = 0; j < test_loop_times; j++)
623 {
624 generateTestData();
625
626 OCL_OFF(cv::bitwise_and(src1_roi, src2_roi, dst1_roi, mask_roi));
627 OCL_ON(cv::bitwise_and(usrc1_roi, usrc2_roi, udst1_roi, umask_roi));
628 Near(0);
629 }
630 }
631
OCL_TEST_P(Bitwise_and,Scalar)632 OCL_TEST_P(Bitwise_and, Scalar)
633 {
634 for (int j = 0; j < test_loop_times; j++)
635 {
636 generateTestData();
637
638 OCL_OFF(cv::bitwise_and(src1_roi, val, dst1_roi));
639 OCL_ON(cv::bitwise_and(usrc1_roi, val, udst1_roi));
640 Near(1e-5);
641 }
642 }
643
OCL_TEST_P(Bitwise_and,Scalar_Mask)644 OCL_TEST_P(Bitwise_and, Scalar_Mask)
645 {
646 for (int j = 0; j < test_loop_times; j++)
647 {
648 generateTestData();
649
650 OCL_OFF(cv::bitwise_and(src1_roi, val, dst1_roi, mask_roi));
651 OCL_ON(cv::bitwise_and(usrc1_roi, val, udst1_roi, umask_roi));
652 Near(1e-5);
653 }
654 }
655
656 //////////////////////////////// Bitwise_or /////////////////////////////////////////////////
657
658 typedef ArithmTestBase Bitwise_or;
659
OCL_TEST_P(Bitwise_or,Mat)660 OCL_TEST_P(Bitwise_or, Mat)
661 {
662 for (int j = 0; j < test_loop_times; j++)
663 {
664 generateTestData();
665
666 OCL_OFF(cv::bitwise_or(src1_roi, src2_roi, dst1_roi));
667 OCL_ON(cv::bitwise_or(usrc1_roi, usrc2_roi, udst1_roi));
668 Near(0);
669 }
670 }
671
OCL_TEST_P(Bitwise_or,Mat_Mask)672 OCL_TEST_P(Bitwise_or, Mat_Mask)
673 {
674 for (int j = 0; j < test_loop_times; j++)
675 {
676 generateTestData();
677
678 OCL_OFF(cv::bitwise_or(src1_roi, src2_roi, dst1_roi, mask_roi));
679 OCL_ON(cv::bitwise_or(usrc1_roi, usrc2_roi, udst1_roi, umask_roi));
680 Near(0);
681 }
682 }
683
OCL_TEST_P(Bitwise_or,Scalar)684 OCL_TEST_P(Bitwise_or, Scalar)
685 {
686 for (int j = 0; j < test_loop_times; j++)
687 {
688 generateTestData();
689
690 OCL_OFF(cv::bitwise_or(src1_roi, val, dst1_roi));
691 OCL_ON(cv::bitwise_or(usrc1_roi, val, udst1_roi));
692 Near(1e-5);
693 }
694 }
695
OCL_TEST_P(Bitwise_or,Scalar_Mask)696 OCL_TEST_P(Bitwise_or, Scalar_Mask)
697 {
698 for (int j = 0; j < test_loop_times; j++)
699 {
700 generateTestData();
701
702 OCL_OFF(cv::bitwise_or(src1_roi, val, dst1_roi, mask_roi));
703 OCL_ON(cv::bitwise_or(val, usrc1_roi, udst1_roi, umask_roi));
704 Near(1e-5);
705 }
706 }
707
708 //////////////////////////////// Bitwise_xor /////////////////////////////////////////////////
709
710 typedef ArithmTestBase Bitwise_xor;
711
OCL_TEST_P(Bitwise_xor,Mat)712 OCL_TEST_P(Bitwise_xor, Mat)
713 {
714 for (int j = 0; j < test_loop_times; j++)
715 {
716 generateTestData();
717
718 OCL_OFF(cv::bitwise_xor(src1_roi, src2_roi, dst1_roi));
719 OCL_ON(cv::bitwise_xor(usrc1_roi, usrc2_roi, udst1_roi));
720 Near(0);
721 }
722 }
723
OCL_TEST_P(Bitwise_xor,Mat_Mask)724 OCL_TEST_P(Bitwise_xor, Mat_Mask)
725 {
726 for (int j = 0; j < test_loop_times; j++)
727 {
728 generateTestData();
729
730 OCL_OFF(cv::bitwise_xor(src1_roi, src2_roi, dst1_roi, mask_roi));
731 OCL_ON(cv::bitwise_xor(usrc1_roi, usrc2_roi, udst1_roi, umask_roi));
732 Near(0);
733 }
734 }
735
OCL_TEST_P(Bitwise_xor,Scalar)736 OCL_TEST_P(Bitwise_xor, Scalar)
737 {
738 for (int j = 0; j < test_loop_times; j++)
739 {
740 generateTestData();
741
742 OCL_OFF(cv::bitwise_xor(src1_roi, val, dst1_roi));
743 OCL_ON(cv::bitwise_xor(usrc1_roi, val, udst1_roi));
744 Near(1e-5);
745 }
746 }
747
OCL_TEST_P(Bitwise_xor,Scalar_Mask)748 OCL_TEST_P(Bitwise_xor, Scalar_Mask)
749 {
750 for (int j = 0; j < test_loop_times; j++)
751 {
752 generateTestData();
753
754 OCL_OFF(cv::bitwise_xor(src1_roi, val, dst1_roi, mask_roi));
755 OCL_ON(cv::bitwise_xor(usrc1_roi, val, udst1_roi, umask_roi));
756 Near(1e-5);
757 }
758 }
759
760 //////////////////////////////// Bitwise_not /////////////////////////////////////////////////
761
762 typedef ArithmTestBase Bitwise_not;
763
OCL_TEST_P(Bitwise_not,Mat)764 OCL_TEST_P(Bitwise_not, Mat)
765 {
766 for (int j = 0; j < test_loop_times; j++)
767 {
768 generateTestData();
769
770 OCL_OFF(cv::bitwise_not(src1_roi, dst1_roi));
771 OCL_ON(cv::bitwise_not(usrc1_roi, udst1_roi));
772 Near(0);
773 }
774 }
775
776 //////////////////////////////// Compare /////////////////////////////////////////////////
777
778 typedef ArithmTestBase Compare;
779
780 static const int cmp_codes[] = { CMP_EQ, CMP_GT, CMP_GE, CMP_LT, CMP_LE, CMP_NE };
781 static const char * cmp_strs[] = { "CMP_EQ", "CMP_GT", "CMP_GE", "CMP_LT", "CMP_LE", "CMP_NE" };
782 static const int cmp_num = sizeof(cmp_codes) / sizeof(int);
783
OCL_TEST_P(Compare,Mat)784 OCL_TEST_P(Compare, Mat)
785 {
786 for (int i = 0; i < cmp_num; ++i)
787 {
788 SCOPED_TRACE(cmp_strs[i]);
789 for (int j = 0; j < test_loop_times; j++)
790 {
791 generateTestData();
792
793 OCL_OFF(cv::compare(src1_roi, src2_roi, dst1_roi, cmp_codes[i]));
794 OCL_ON(cv::compare(usrc1_roi, usrc2_roi, udst1_roi, cmp_codes[i]));
795
796 Near(0);
797 }
798 }
799 }
800
OCL_TEST_P(Compare,Scalar)801 OCL_TEST_P(Compare, Scalar)
802 {
803 for (int i = 0; i < cmp_num; ++i)
804 {
805 SCOPED_TRACE(cmp_strs[i]);
806 for (int j = 0; j < test_loop_times; j++)
807 {
808 generateTestData(true);
809
810 OCL_OFF(cv::compare(src1_roi, val_in_range, dst1_roi, cmp_codes[i]));
811 OCL_ON(cv::compare(usrc1_roi, val_in_range, udst1_roi, cmp_codes[i]));
812
813 Near(0);
814 }
815 }
816 }
817
OCL_TEST_P(Compare,Scalar2)818 OCL_TEST_P(Compare, Scalar2)
819 {
820 for (int i = 0; i < cmp_num; ++i)
821 {
822 SCOPED_TRACE(cmp_strs[i]);
823 for (int j = 0; j < test_loop_times; j++)
824 {
825 generateTestData(true);
826
827 OCL_OFF(cv::compare(val_in_range, src1_roi, dst1_roi, cmp_codes[i]));
828 OCL_ON(cv::compare(val_in_range, usrc1_roi, udst1_roi, cmp_codes[i]));
829
830 Near(0);
831 }
832 }
833 }
834
835 //////////////////////////////// Pow /////////////////////////////////////////////////
836
837 typedef ArithmTestBase Pow;
838
OCL_TEST_P(Pow,Mat)839 OCL_TEST_P(Pow, Mat)
840 {
841 static const double pows[] = { -4, -1, -2.5, 0, 1, 2, 3.7, 4 };
842
843 for (int j = 0; j < 1/*test_loop_times*/; j++)
844 for (int k = 0, size = sizeof(pows) / sizeof(double); k < size; ++k)
845 {
846 SCOPED_TRACE(pows[k]);
847
848 generateTestData();
849
850 OCL_OFF(cv::pow(src1_roi, pows[k], dst1_roi));
851 OCL_ON(cv::pow(usrc1_roi, pows[k], udst1_roi));
852
853 OCL_EXPECT_MATS_NEAR_RELATIVE(dst1, 1e-5);
854 }
855 }
856
857 //////////////////////////////// AddWeighted /////////////////////////////////////////////////
858
859 typedef ArithmTestBase AddWeighted;
860
OCL_TEST_P(AddWeighted,Mat)861 OCL_TEST_P(AddWeighted, Mat)
862 {
863 for (int j = 0; j < test_loop_times; j++)
864 {
865 generateTestData();
866
867 const double alpha = 2.0, beta = 1.0, gama = 3.0;
868
869 OCL_OFF(cv::addWeighted(src1_roi, alpha, src2_roi, beta, gama, dst1_roi));
870 OCL_ON(cv::addWeighted(usrc1_roi, alpha, usrc2_roi, beta, gama, udst1_roi));
871
872 Near(3e-4);
873 }
874 }
875
876 //////////////////////////////// setIdentity /////////////////////////////////////////////////
877
878 typedef ArithmTestBase SetIdentity;
879
OCL_TEST_P(SetIdentity,Mat)880 OCL_TEST_P(SetIdentity, Mat)
881 {
882 for (int j = 0; j < test_loop_times; j++)
883 {
884 generateTestData();
885
886 OCL_OFF(cv::setIdentity(dst1_roi, val));
887 OCL_ON(cv::setIdentity(udst1_roi, val));
888
889 Near(0);
890 }
891 }
892
893 //// Repeat
894
895 struct RepeatTestCase :
896 public ArithmTestBase
897 {
898 int nx, ny;
899
generateTestDatacvtest::ocl::RepeatTestCase900 virtual void generateTestData()
901 {
902 const int type = CV_MAKE_TYPE(depth, cn);
903
904 nx = randomInt(1, 4);
905 ny = randomInt(1, 4);
906
907 Size srcRoiSize = randomSize(1, MAX_VALUE);
908 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
909 randomSubMat(src1, src1_roi, srcRoiSize, srcBorder, type, 2, 11);
910
911 Size dstRoiSize(srcRoiSize.width * nx, srcRoiSize.height * ny);
912 Border dst1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
913 randomSubMat(dst1, dst1_roi, dstRoiSize, dst1Border, type, 5, 16);
914
915 UMAT_UPLOAD_INPUT_PARAMETER(src1);
916 UMAT_UPLOAD_OUTPUT_PARAMETER(dst1);
917 }
918 };
919
920 typedef RepeatTestCase Repeat;
921
OCL_TEST_P(Repeat,Mat)922 OCL_TEST_P(Repeat, Mat)
923 {
924 for (int i = 0; i < test_loop_times; ++i)
925 {
926 generateTestData();
927
928 OCL_OFF(cv::repeat(src1_roi, ny, nx, dst1_roi));
929 OCL_ON(cv::repeat(usrc1_roi, ny, nx, udst1_roi));
930
931 Near();
932 }
933 }
934
935 //////////////////////////////// CountNonZero /////////////////////////////////////////////////
936
937 typedef ArithmTestBase CountNonZero;
938
OCL_TEST_P(CountNonZero,MAT)939 OCL_TEST_P(CountNonZero, MAT)
940 {
941 for (int j = 0; j < test_loop_times; j++)
942 {
943 generateTestData();
944
945 int cpures, gpures;
946 OCL_OFF(cpures = cv::countNonZero(src1_roi));
947 OCL_ON(gpures = cv::countNonZero(usrc1_roi));
948
949 EXPECT_EQ(cpures, gpures);
950 }
951 }
952
953 //////////////////////////////// Sum /////////////////////////////////////////////////
954
955 typedef ArithmTestBase Sum;
956
OCL_TEST_P(Sum,MAT)957 OCL_TEST_P(Sum, MAT)
958 {
959 for (int j = 0; j < test_loop_times; j++)
960 {
961 generateTestData();
962
963 Scalar cpures, gpures;
964 OCL_OFF(cpures = cv::sum(src1_roi));
965 OCL_ON(gpures = cv::sum(usrc1_roi));
966
967 for (int i = 0; i < cn; ++i)
968 EXPECT_NEAR(cpures[i], gpures[i], 0.1);
969 }
970 }
971
972 //////////////////////////////// meanStdDev /////////////////////////////////////////////////
973
974 typedef ArithmTestBase MeanStdDev;
975
OCL_TEST_P(MeanStdDev,Mat)976 OCL_TEST_P(MeanStdDev, Mat)
977 {
978 for (int j = 0; j < test_loop_times; j++)
979 {
980 generateTestData();
981
982 Scalar cpu_mean, cpu_stddev;
983 Scalar gpu_mean, gpu_stddev;
984
985 OCL_OFF(cv::meanStdDev(src1_roi, cpu_mean, cpu_stddev));
986 OCL_ON(cv::meanStdDev(usrc1_roi, gpu_mean, gpu_stddev));
987
988 for (int i = 0; i < cn; ++i)
989 {
990 EXPECT_NEAR(cpu_mean[i], gpu_mean[i], 0.1);
991 EXPECT_NEAR(cpu_stddev[i], gpu_stddev[i], 0.1);
992 }
993 }
994 }
995
OCL_TEST_P(MeanStdDev,Mat_Mask)996 OCL_TEST_P(MeanStdDev, Mat_Mask)
997 {
998 for (int j = 0; j < test_loop_times; j++)
999 {
1000 generateTestData();
1001
1002 Scalar cpu_mean, cpu_stddev;
1003 Scalar gpu_mean, gpu_stddev;
1004
1005 OCL_OFF(cv::meanStdDev(src1_roi, cpu_mean, cpu_stddev, mask_roi));
1006 OCL_ON(cv::meanStdDev(usrc1_roi, gpu_mean, gpu_stddev, umask_roi));
1007
1008 for (int i = 0; i < cn; ++i)
1009 {
1010 EXPECT_NEAR(cpu_mean[i], gpu_mean[i], 0.1);
1011 EXPECT_NEAR(cpu_stddev[i], gpu_stddev[i], 0.1);
1012 }
1013 }
1014 }
1015
OCL_TEST(MeanStdDev_,ZeroMask)1016 OCL_TEST(MeanStdDev_, ZeroMask)
1017 {
1018 Size size(5, 5);
1019 UMat um(size, CV_32SC1), umask(size, CV_8UC1, Scalar::all(0));
1020 Mat m(size, CV_32SC1), mask(size, CV_8UC1, Scalar::all(0));
1021
1022 Scalar cpu_mean, cpu_stddev;
1023 Scalar gpu_mean, gpu_stddev;
1024
1025 OCL_OFF(cv::meanStdDev(m, cpu_mean, cpu_stddev, mask));
1026 OCL_ON(cv::meanStdDev(um, gpu_mean, gpu_stddev, umask));
1027
1028 for (int i = 0; i < 4; ++i)
1029 {
1030 EXPECT_NEAR(cpu_mean[i], gpu_mean[i], 0.1);
1031 EXPECT_NEAR(cpu_stddev[i], gpu_stddev[i], 0.1);
1032 }
1033 }
1034
1035 //////////////////////////////////////// Log /////////////////////////////////////////
1036
1037 typedef ArithmTestBase Log;
1038
OCL_TEST_P(Log,Mat)1039 OCL_TEST_P(Log, Mat)
1040 {
1041 for (int j = 0; j < test_loop_times; j++)
1042 {
1043 generateTestData();
1044
1045 OCL_OFF(cv::log(src1_roi, dst1_roi));
1046 OCL_ON(cv::log(usrc1_roi, udst1_roi));
1047 Near(1);
1048 }
1049 }
1050
1051 //////////////////////////////////////// Exp /////////////////////////////////////////
1052
1053 typedef ArithmTestBase Exp;
1054
OCL_TEST_P(Exp,Mat)1055 OCL_TEST_P(Exp, Mat)
1056 {
1057 for (int j = 0; j < test_loop_times; j++)
1058 {
1059 generateTestData();
1060
1061 OCL_OFF(cv::exp(src1_roi, dst1_roi));
1062 OCL_ON(cv::exp(usrc1_roi, udst1_roi));
1063 Near(2);
1064 }
1065 }
1066
1067 //////////////////////////////////////// Phase /////////////////////////////////////////
1068
1069 typedef ArithmTestBase Phase;
1070
OCL_TEST_P(Phase,angleInDegree)1071 OCL_TEST_P(Phase, angleInDegree)
1072 {
1073 for (int j = 0; j < test_loop_times; j++)
1074 {
1075 generateTestData();
1076
1077 OCL_OFF(cv::phase(src1_roi, src2_roi, dst1_roi, true));
1078 OCL_ON(cv::phase(usrc1_roi, usrc2_roi, udst1_roi, true));
1079 Near(1e-2);
1080 }
1081 }
1082
OCL_TEST_P(Phase,angleInRadians)1083 OCL_TEST_P(Phase, angleInRadians)
1084 {
1085 for (int j = 0; j < test_loop_times; j++)
1086 {
1087 generateTestData();
1088
1089 OCL_OFF(cv::phase(src1_roi, src2_roi, dst1_roi));
1090 OCL_ON(cv::phase(usrc1_roi, usrc2_roi, udst1_roi));
1091 Near(1e-2);
1092 }
1093 }
1094
1095 //////////////////////////////////////// Magnitude /////////////////////////////////////////
1096
1097 typedef ArithmTestBase Magnitude;
1098
OCL_TEST_P(Magnitude,Mat)1099 OCL_TEST_P(Magnitude, Mat)
1100 {
1101 for (int j = 0; j < test_loop_times; j++)
1102 {
1103 generateTestData();
1104
1105 OCL_OFF(cv::magnitude(src1_roi, src2_roi, dst1_roi));
1106 OCL_ON(cv::magnitude(usrc1_roi, usrc2_roi, udst1_roi));
1107 Near(depth == CV_64F ? 1e-5 : 1e-2);
1108 }
1109 }
1110
1111 //////////////////////////////// Flip /////////////////////////////////////////////////
1112
1113 typedef ArithmTestBase Flip;
1114
OCL_TEST_P(Flip,X)1115 OCL_TEST_P(Flip, X)
1116 {
1117 for (int j = 0; j < test_loop_times; j++)
1118 {
1119 generateTestData();
1120
1121 OCL_OFF(cv::flip(src1_roi, dst1_roi, 0));
1122 OCL_ON(cv::flip(usrc1_roi, udst1_roi, 0));
1123 Near(0);
1124 }
1125 }
1126
OCL_TEST_P(Flip,Y)1127 OCL_TEST_P(Flip, Y)
1128 {
1129 for (int j = 0; j < test_loop_times; j++)
1130 {
1131 generateTestData();
1132
1133 OCL_OFF(cv::flip(src1_roi, dst1_roi, 1));
1134 OCL_ON(cv::flip(usrc1_roi, udst1_roi, 1));
1135 Near(0);
1136 }
1137 }
1138
OCL_TEST_P(Flip,BOTH)1139 OCL_TEST_P(Flip, BOTH)
1140 {
1141 for (int j = 0; j < test_loop_times; j++)
1142 {
1143 generateTestData();
1144
1145 OCL_OFF(cv::flip(src1_roi, dst1_roi, -1));
1146 OCL_ON(cv::flip(usrc1_roi, udst1_roi, -1));
1147 Near(0);
1148 }
1149 }
1150 //////////////////////////////////////// minMaxIdx /////////////////////////////////////////
1151
1152 typedef ArithmTestBase MinMaxIdx;
1153
OCL_TEST_P(MinMaxIdx,Mat)1154 OCL_TEST_P(MinMaxIdx, Mat)
1155 {
1156 for (int j = 0; j < test_loop_times; j++)
1157 {
1158 generateTestData();
1159
1160 int p1[2], p2[2], up1[2], up2[2];
1161 double minv, maxv, uminv, umaxv;
1162
1163 if (cn > 1)
1164 {
1165 OCL_OFF(cv::minMaxIdx(src2_roi, &minv, &maxv) );
1166 OCL_ON(cv::minMaxIdx(usrc2_roi, &uminv, &umaxv));
1167
1168 EXPECT_DOUBLE_EQ(minv, uminv);
1169 EXPECT_DOUBLE_EQ(maxv, umaxv);
1170 }
1171 else
1172 {
1173 OCL_OFF(cv::minMaxIdx(src2_roi, &minv, &maxv, p1, p2, noArray()));
1174 OCL_ON(cv::minMaxIdx(usrc2_roi, &uminv, &umaxv, up1, up2, noArray()));
1175
1176 EXPECT_DOUBLE_EQ(minv, uminv);
1177 EXPECT_DOUBLE_EQ(maxv, umaxv);
1178
1179 for (int i = 0; i < 2; i++)
1180 {
1181 EXPECT_EQ(p1[i], up1[i]);
1182 EXPECT_EQ(p2[i], up2[i]);
1183 }
1184 }
1185 }
1186 }
1187
1188 typedef ArithmTestBase MinMaxIdx_Mask;
1189
OCL_TEST_P(MinMaxIdx_Mask,Mat)1190 OCL_TEST_P(MinMaxIdx_Mask, Mat)
1191 {
1192 for (int j = 0; j < test_loop_times; j++)
1193 {
1194 generateTestData();
1195
1196 int p1[2], p2[2], up1[2], up2[2];
1197 double minv, maxv, uminv, umaxv;
1198
1199 OCL_OFF(cv::minMaxIdx(src2_roi, &minv, &maxv, p1, p2, mask_roi));
1200 OCL_ON(cv::minMaxIdx(usrc2_roi, &uminv, &umaxv, up1, up2, umask_roi));
1201
1202 EXPECT_DOUBLE_EQ(minv, uminv);
1203 EXPECT_DOUBLE_EQ(maxv, umaxv);
1204 for( int i = 0; i < 2; i++)
1205 {
1206 EXPECT_EQ(p1[i], up1[i]);
1207 EXPECT_EQ(p2[i], up2[i]);
1208 }
1209
1210 }
1211 }
1212
1213 //////////////////////////////// Norm /////////////////////////////////////////////////
1214
relativeError(double actual,double expected,double eps)1215 static bool relativeError(double actual, double expected, double eps)
1216 {
1217 return std::abs(actual - expected) < eps*(1 + std::abs(actual));
1218 }
1219
1220 typedef ArithmTestBase Norm;
1221
OCL_TEST_P(Norm,NORM_INF_1arg)1222 OCL_TEST_P(Norm, NORM_INF_1arg)
1223 {
1224 for (int j = 0; j < test_loop_times; j++)
1225 {
1226 generateTestData();
1227
1228 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_INF));
1229 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_INF));
1230
1231 EXPECT_NEAR(cpuRes, gpuRes, 0.1);
1232 }
1233 }
1234
OCL_TEST_P(Norm,NORM_INF_1arg_mask)1235 OCL_TEST_P(Norm, NORM_INF_1arg_mask)
1236 {
1237 for (int j = 0; j < test_loop_times; j++)
1238 {
1239 generateTestData();
1240
1241 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_INF, mask_roi));
1242 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_INF, umask_roi));
1243
1244 EXPECT_NEAR(cpuRes, gpuRes, 0.2);
1245 }
1246 }
1247
OCL_TEST_P(Norm,NORM_L1_1arg)1248 OCL_TEST_P(Norm, NORM_L1_1arg)
1249 {
1250 for (int j = 0; j < test_loop_times; j++)
1251 {
1252 generateTestData();
1253
1254 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_L1));
1255 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_L1));
1256
1257 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1258 }
1259 }
1260
OCL_TEST_P(Norm,NORM_L1_1arg_mask)1261 OCL_TEST_P(Norm, NORM_L1_1arg_mask)
1262 {
1263 for (int j = 0; j < test_loop_times; j++)
1264 {
1265 generateTestData();
1266
1267 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_L1, mask_roi));
1268 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_L1, umask_roi));
1269
1270 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1271 }
1272 }
1273
OCL_TEST_P(Norm,NORM_L2_1arg)1274 OCL_TEST_P(Norm, NORM_L2_1arg)
1275 {
1276 for (int j = 0; j < test_loop_times; j++)
1277 {
1278 generateTestData();
1279
1280 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_L2));
1281 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_L2));
1282
1283 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1284 }
1285 }
1286
OCL_TEST_P(Norm,NORM_L2_1arg_mask)1287 OCL_TEST_P(Norm, NORM_L2_1arg_mask)
1288 {
1289 for (int j = 0; j < test_loop_times; j++)
1290 {
1291 generateTestData();
1292
1293 OCL_OFF(const double cpuRes = cv::norm(src1_roi, NORM_L2, mask_roi));
1294 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, NORM_L2, umask_roi));
1295
1296 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1297 }
1298 }
1299
OCL_TEST_P(Norm,NORM_INF_2args)1300 OCL_TEST_P(Norm, NORM_INF_2args)
1301 {
1302 for (int relative = 0; relative < 2; ++relative)
1303 for (int j = 0; j < test_loop_times; j++)
1304 {
1305 generateTestData();
1306
1307 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1308
1309 int type = NORM_INF;
1310 if (relative == 1)
1311 type |= NORM_RELATIVE;
1312
1313 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type));
1314 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type));
1315
1316 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1317 }
1318 }
1319
OCL_TEST_P(Norm,NORM_INF_2args_mask)1320 OCL_TEST_P(Norm, NORM_INF_2args_mask)
1321 {
1322 for (int relative = 0; relative < 2; ++relative)
1323 for (int j = 0; j < test_loop_times; j++)
1324 {
1325 generateTestData();
1326
1327 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1328
1329 int type = NORM_INF;
1330 if (relative == 1)
1331 type |= NORM_RELATIVE;
1332
1333 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type, mask_roi));
1334 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type, umask_roi));
1335
1336 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1337 }
1338 }
1339
OCL_TEST_P(Norm,NORM_L1_2args)1340 OCL_TEST_P(Norm, NORM_L1_2args)
1341 {
1342 for (int relative = 0; relative < 2; ++relative)
1343 for (int j = 0; j < test_loop_times; j++)
1344 {
1345 generateTestData();
1346
1347 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1348
1349 int type = NORM_L1;
1350 if (relative == 1)
1351 type |= NORM_RELATIVE;
1352
1353 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type));
1354 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type));
1355
1356 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1357 }
1358 }
1359
OCL_TEST_P(Norm,NORM_L1_2args_mask)1360 OCL_TEST_P(Norm, NORM_L1_2args_mask)
1361 {
1362 for (int relative = 0; relative < 2; ++relative)
1363 for (int j = 0; j < test_loop_times; j++)
1364 {
1365 generateTestData();
1366
1367 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1368
1369 int type = NORM_L1;
1370 if (relative == 1)
1371 type |= NORM_RELATIVE;
1372
1373 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type, mask_roi));
1374 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type, umask_roi));
1375
1376 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1377 }
1378 }
1379
OCL_TEST_P(Norm,NORM_L2_2args)1380 OCL_TEST_P(Norm, NORM_L2_2args)
1381 {
1382 for (int relative = 0; relative < 2; ++relative)
1383 for (int j = 0; j < test_loop_times; j++)
1384 {
1385 generateTestData();
1386
1387 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1388
1389 int type = NORM_L2;
1390 if (relative == 1)
1391 type |= NORM_RELATIVE;
1392
1393 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type));
1394 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type));
1395
1396 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1397 }
1398 }
1399
OCL_TEST_P(Norm,NORM_L2_2args_mask)1400 OCL_TEST_P(Norm, NORM_L2_2args_mask)
1401 {
1402 for (int relative = 0; relative < 2; ++relative)
1403 for (int j = 0; j < test_loop_times; j++)
1404 {
1405 generateTestData();
1406
1407 SCOPED_TRACE(relative ? "NORM_RELATIVE" : "");
1408
1409 int type = NORM_L2;
1410 if (relative == 1)
1411 type |= NORM_RELATIVE;
1412
1413 OCL_OFF(const double cpuRes = cv::norm(src1_roi, src2_roi, type, mask_roi));
1414 OCL_ON(const double gpuRes = cv::norm(usrc1_roi, usrc2_roi, type, umask_roi));
1415
1416 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1417 }
1418 }
1419
1420 //////////////////////////////// UMat::dot ////////////////////////////////////////////////
1421
1422 typedef ArithmTestBase UMatDot;
1423
OCL_TEST_P(UMatDot,Mat)1424 OCL_TEST_P(UMatDot, Mat)
1425 {
1426 for (int j = 0; j < test_loop_times; j++)
1427 {
1428 generateTestData();
1429
1430 OCL_OFF(const double cpuRes = src1_roi.dot(src2_roi));
1431 OCL_ON(const double gpuRes = usrc1_roi.dot(usrc2_roi));
1432
1433 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-5);
1434 }
1435 }
1436
1437 //////////////////////////////// Sqrt ////////////////////////////////////////////////
1438
1439 typedef ArithmTestBase Sqrt;
1440
OCL_TEST_P(Sqrt,Mat)1441 OCL_TEST_P(Sqrt, Mat)
1442 {
1443 for (int j = 0; j < test_loop_times; j++)
1444 {
1445 generateTestData();
1446
1447 OCL_OFF(cv::sqrt(src1_roi, dst1_roi));
1448 OCL_ON(cv::sqrt(usrc1_roi, udst1_roi));
1449
1450 Near(1);
1451 }
1452 }
1453
1454 //////////////////////////////// Normalize ////////////////////////////////////////////////
1455
1456 typedef ArithmTestBase Normalize;
1457
OCL_TEST_P(Normalize,Mat)1458 OCL_TEST_P(Normalize, Mat)
1459 {
1460 static int modes[] = { CV_MINMAX, CV_L2, CV_L1, CV_C };
1461
1462 for (int j = 0; j < test_loop_times; j++)
1463 {
1464 generateTestData();
1465
1466 for (int i = 0, size = sizeof(modes) / sizeof(modes[0]); i < size; ++i)
1467 {
1468 OCL_OFF(cv::normalize(src1_roi, dst1_roi, 10, 110, modes[i], src1_roi.type(), mask_roi));
1469 OCL_ON(cv::normalize(usrc1_roi, udst1_roi, 10, 110, modes[i], src1_roi.type(), umask_roi));
1470
1471 Near(1);
1472 }
1473 }
1474 }
1475
1476 //////////////////////////////////////// InRange ///////////////////////////////////////////////
1477
PARAM_TEST_CASE(InRange,MatDepth,Channels,bool,bool)1478 PARAM_TEST_CASE(InRange, MatDepth, Channels, bool /*Scalar or not*/, bool /*Roi*/)
1479 {
1480 int depth;
1481 int cn;
1482 bool scalars, use_roi;
1483 cv::Scalar val1, val2;
1484
1485 TEST_DECLARE_INPUT_PARAMETER(src1);
1486 TEST_DECLARE_INPUT_PARAMETER(src2);
1487 TEST_DECLARE_INPUT_PARAMETER(src3);
1488 TEST_DECLARE_OUTPUT_PARAMETER(dst);
1489
1490 virtual void SetUp()
1491 {
1492 depth = GET_PARAM(0);
1493 cn = GET_PARAM(1);
1494 scalars = GET_PARAM(2);
1495 use_roi = GET_PARAM(3);
1496 }
1497
1498 virtual void generateTestData()
1499 {
1500 const int type = CV_MAKE_TYPE(depth, cn);
1501
1502 Size roiSize = randomSize(1, MAX_VALUE);
1503 Border src1Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
1504 randomSubMat(src1, src1_roi, roiSize, src1Border, type, -40, 40);
1505
1506 Border src2Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
1507 randomSubMat(src2, src2_roi, roiSize, src2Border, type, -40, 40);
1508
1509 Border src3Border = randomBorder(0, use_roi ? MAX_VALUE : 0);
1510 randomSubMat(src3, src3_roi, roiSize, src3Border, type, -40, 40);
1511
1512 Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1513 randomSubMat(dst, dst_roi, roiSize, dstBorder, CV_8UC1, 5, 16);
1514
1515 val1 = cv::Scalar(rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0),
1516 rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0));
1517 val2 = cv::Scalar(rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0),
1518 rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0));
1519
1520 UMAT_UPLOAD_INPUT_PARAMETER(src1);
1521 UMAT_UPLOAD_INPUT_PARAMETER(src2);
1522 UMAT_UPLOAD_INPUT_PARAMETER(src3);
1523 UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
1524 }
1525
1526 void Near()
1527 {
1528 OCL_EXPECT_MATS_NEAR(dst, 0);
1529 }
1530 };
1531
OCL_TEST_P(InRange,Mat)1532 OCL_TEST_P(InRange, Mat)
1533 {
1534 for (int j = 0; j < test_loop_times; j++)
1535 {
1536 generateTestData();
1537
1538 OCL_OFF(cv::inRange(src1_roi, src2_roi, src3_roi, dst_roi));
1539 OCL_ON(cv::inRange(usrc1_roi, usrc2_roi, usrc3_roi, udst_roi));
1540
1541 Near();
1542 }
1543 }
1544
OCL_TEST_P(InRange,Scalar)1545 OCL_TEST_P(InRange, Scalar)
1546 {
1547 for (int j = 0; j < test_loop_times; j++)
1548 {
1549 generateTestData();
1550
1551 OCL_OFF(cv::inRange(src1_roi, val1, val2, dst_roi));
1552 OCL_ON(cv::inRange(usrc1_roi, val1, val2, udst_roi));
1553
1554 Near();
1555 }
1556 }
1557
1558 //////////////////////////////// ConvertScaleAbs ////////////////////////////////////////////////
1559
PARAM_TEST_CASE(ConvertScaleAbs,MatDepth,Channels,bool)1560 PARAM_TEST_CASE(ConvertScaleAbs, MatDepth, Channels, bool)
1561 {
1562 int depth;
1563 int cn;
1564 bool use_roi;
1565 cv::Scalar val;
1566
1567 TEST_DECLARE_INPUT_PARAMETER(src);
1568 TEST_DECLARE_OUTPUT_PARAMETER(dst);
1569
1570 virtual void SetUp()
1571 {
1572 depth = GET_PARAM(0);
1573 cn = GET_PARAM(1);
1574 use_roi = GET_PARAM(2);
1575 }
1576
1577 virtual void generateTestData()
1578 {
1579 const int stype = CV_MAKE_TYPE(depth, cn);
1580 const int dtype = CV_MAKE_TYPE(CV_8U, cn);
1581
1582 Size roiSize = randomSize(1, MAX_VALUE);
1583 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1584 randomSubMat(src, src_roi, roiSize, srcBorder, stype, -11, 11); // FIXIT: Test with minV, maxV
1585
1586 Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1587 randomSubMat(dst, dst_roi, roiSize, dstBorder, dtype, 5, 16);
1588
1589 val = cv::Scalar(rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0),
1590 rng.uniform(-100.0, 100.0), rng.uniform(-100.0, 100.0));
1591
1592 UMAT_UPLOAD_INPUT_PARAMETER(src);
1593 UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
1594 }
1595
1596 void Near(double threshold = 0.)
1597 {
1598 OCL_EXPECT_MATS_NEAR(dst, threshold);
1599 }
1600
1601 };
1602
1603
OCL_TEST_P(ConvertScaleAbs,Mat)1604 OCL_TEST_P(ConvertScaleAbs, Mat)
1605 {
1606 for (int j = 0; j < test_loop_times; j++)
1607 {
1608 generateTestData();
1609
1610 OCL_OFF(cv::convertScaleAbs(src_roi, dst_roi, val[0], val[1]));
1611 OCL_ON(cv::convertScaleAbs(usrc_roi, udst_roi, val[0], val[1]));
1612
1613 Near(1);
1614 }
1615 }
1616
1617 //////////////////////////////// ScaleAdd ////////////////////////////////////////////////
1618
1619 typedef ArithmTestBase ScaleAdd;
1620
OCL_TEST_P(ScaleAdd,Mat)1621 OCL_TEST_P(ScaleAdd, Mat)
1622 {
1623 for (int j = 0; j < test_loop_times; j++)
1624 {
1625 generateTestData();
1626
1627 OCL_OFF(cv::scaleAdd(src1_roi, val[0], src2_roi, dst1_roi));
1628 OCL_ON(cv::scaleAdd(usrc1_roi, val[0], usrc2_roi, udst1_roi));
1629
1630 Near(depth <= CV_32S ? 1 : 1e-3);
1631 }
1632 }
1633
1634 //////////////////////////////// PatchNans ////////////////////////////////////////////////
1635
PARAM_TEST_CASE(PatchNaNs,Channels,bool)1636 PARAM_TEST_CASE(PatchNaNs, Channels, bool)
1637 {
1638 int cn;
1639 bool use_roi;
1640 double value;
1641
1642 TEST_DECLARE_INPUT_PARAMETER(src);
1643
1644 virtual void SetUp()
1645 {
1646 cn = GET_PARAM(0);
1647 use_roi = GET_PARAM(1);
1648 }
1649
1650 virtual void generateTestData()
1651 {
1652 const int type = CV_MAKE_TYPE(CV_32F, cn);
1653
1654 Size roiSize = randomSize(1, 10);
1655 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1656 randomSubMat(src, src_roi, roiSize, srcBorder, type, -40, 40);
1657
1658 // generating NaNs
1659 roiSize.width *= cn;
1660 for (int y = 0; y < roiSize.height; ++y)
1661 {
1662 float * const ptr = src_roi.ptr<float>(y);
1663 for (int x = 0; x < roiSize.width; ++x)
1664 ptr[x] = randomInt(-1, 1) == 0 ? std::numeric_limits<float>::quiet_NaN() : ptr[x];
1665 }
1666
1667 value = randomDouble(-100, 100);
1668
1669 UMAT_UPLOAD_INPUT_PARAMETER(src);
1670 }
1671
1672 void Near()
1673 {
1674 OCL_EXPECT_MATS_NEAR(src, 0);
1675 }
1676 };
1677
OCL_TEST_P(PatchNaNs,Mat)1678 OCL_TEST_P(PatchNaNs, Mat)
1679 {
1680 for (int j = 0; j < test_loop_times; j++)
1681 {
1682 generateTestData();
1683
1684 OCL_OFF(cv::patchNaNs(src_roi, value));
1685 OCL_ON(cv::patchNaNs(usrc_roi, value));
1686
1687 Near();
1688 }
1689 }
1690
1691 //////////////////////////////// Psnr ////////////////////////////////////////////////
1692
1693 typedef ArithmTestBase Psnr;
1694
OCL_TEST_P(Psnr,Mat)1695 OCL_TEST_P(Psnr, Mat)
1696 {
1697 for (int j = 0; j < test_loop_times; j++)
1698 {
1699 generateTestData();
1700
1701 double cpuRes = 0, gpuRes = 0;
1702
1703 OCL_OFF(cpuRes = cv::PSNR(src1_roi, src2_roi));
1704 OCL_ON(gpuRes = cv::PSNR(usrc1_roi, usrc2_roi));
1705
1706 EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
1707 }
1708 }
1709
1710 //////////////////////////////////////// Reduce /////////////////////////////////////////////
1711
PARAM_TEST_CASE(Reduce,std::pair<MatDepth,MatDepth>,Channels,int,bool)1712 PARAM_TEST_CASE(Reduce, std::pair<MatDepth, MatDepth>, Channels, int, bool)
1713 {
1714 int sdepth, ddepth, cn, dim, dtype;
1715 bool use_roi;
1716
1717 TEST_DECLARE_INPUT_PARAMETER(src);
1718 TEST_DECLARE_OUTPUT_PARAMETER(dst);
1719
1720 virtual void SetUp()
1721 {
1722 const std::pair<MatDepth, MatDepth> p = GET_PARAM(0);
1723 sdepth = p.first;
1724 ddepth = p.second;
1725 cn = GET_PARAM(1);
1726 dim = GET_PARAM(2);
1727 use_roi = GET_PARAM(3);
1728 }
1729
1730 virtual void generateTestData()
1731 {
1732 const int stype = CV_MAKE_TYPE(sdepth, cn);
1733 dtype = CV_MAKE_TYPE(ddepth, cn);
1734
1735 Size roiSize = randomSize(1, MAX_VALUE);
1736 Border srcBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1737 randomSubMat(src, src_roi, roiSize, srcBorder, stype, -40, 40);
1738
1739 Size dstRoiSize = Size(dim == 0 ? roiSize.width : 1, dim == 0 ? 1 : roiSize.height);
1740 Border dstBorder = randomBorder(0, use_roi ? MAX_VALUE : 0);
1741 randomSubMat(dst, dst_roi, dstRoiSize, dstBorder, dtype, 5, 16);
1742
1743 UMAT_UPLOAD_INPUT_PARAMETER(src);
1744 UMAT_UPLOAD_OUTPUT_PARAMETER(dst);
1745 }
1746 };
1747
1748 typedef Reduce ReduceSum;
1749
OCL_TEST_P(ReduceSum,Mat)1750 OCL_TEST_P(ReduceSum, Mat)
1751 {
1752 for (int j = 0; j < test_loop_times; j++)
1753 {
1754 generateTestData();
1755
1756 OCL_OFF(cv::reduce(src_roi, dst_roi, dim, CV_REDUCE_SUM, dtype));
1757 OCL_ON(cv::reduce(usrc_roi, udst_roi, dim, CV_REDUCE_SUM, dtype));
1758
1759 double eps = ddepth <= CV_32S ? 1 : 7e-4;
1760 OCL_EXPECT_MATS_NEAR(dst, eps);
1761 }
1762 }
1763
1764 typedef Reduce ReduceMax;
1765
OCL_TEST_P(ReduceMax,Mat)1766 OCL_TEST_P(ReduceMax, Mat)
1767 {
1768 for (int j = 0; j < test_loop_times; j++)
1769 {
1770 generateTestData();
1771
1772 OCL_OFF(cv::reduce(src_roi, dst_roi, dim, CV_REDUCE_MAX, dtype));
1773 OCL_ON(cv::reduce(usrc_roi, udst_roi, dim, CV_REDUCE_MAX, dtype));
1774
1775 OCL_EXPECT_MATS_NEAR(dst, 0);
1776 }
1777 }
1778
1779 typedef Reduce ReduceMin;
1780
OCL_TEST_P(ReduceMin,Mat)1781 OCL_TEST_P(ReduceMin, Mat)
1782 {
1783 for (int j = 0; j < test_loop_times; j++)
1784 {
1785 generateTestData();
1786
1787 OCL_OFF(cv::reduce(src_roi, dst_roi, dim, CV_REDUCE_MIN, dtype));
1788 OCL_ON(cv::reduce(usrc_roi, udst_roi, dim, CV_REDUCE_MIN, dtype));
1789
1790 OCL_EXPECT_MATS_NEAR(dst, 0);
1791 }
1792 }
1793
1794 typedef Reduce ReduceAvg;
1795
OCL_TEST_P(ReduceAvg,Mat)1796 OCL_TEST_P(ReduceAvg, Mat)
1797 {
1798 for (int j = 0; j < test_loop_times; j++)
1799 {
1800 generateTestData();
1801
1802 OCL_OFF(cv::reduce(src_roi, dst_roi, dim, CV_REDUCE_AVG, dtype));
1803 OCL_ON(cv::reduce(usrc_roi, udst_roi, dim, CV_REDUCE_AVG, dtype));
1804
1805 double eps = ddepth <= CV_32S ? 1 : 6e-6;
1806 OCL_EXPECT_MATS_NEAR(dst, eps);
1807 }
1808 }
1809
1810 //////////////////////////////////////// Instantiation /////////////////////////////////////////
1811
1812 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Lut, Combine(::testing::Values(CV_8U, CV_8S), OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool(), Bool()));
1813 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Add, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1814 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Subtract, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1815 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Mul, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1816 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Div, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1817 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Min, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1818 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Max, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1819 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Absdiff, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1820 OCL_INSTANTIATE_TEST_CASE_P(Arithm, CartToPolar, Combine(testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1821 OCL_INSTANTIATE_TEST_CASE_P(Arithm, PolarToCart, Combine(testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1822 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Transpose, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1823 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Bitwise_and, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1824 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Bitwise_not, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1825 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Bitwise_xor, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1826 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Bitwise_or, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1827 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Pow, Combine(testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1828 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Compare, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1829 OCL_INSTANTIATE_TEST_CASE_P(Arithm, AddWeighted, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1830 OCL_INSTANTIATE_TEST_CASE_P(Arithm, SetIdentity, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1831 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Repeat, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1832 OCL_INSTANTIATE_TEST_CASE_P(Arithm, CountNonZero, Combine(OCL_ALL_DEPTHS, testing::Values(Channels(1)), Bool()));
1833 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Sum, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1834 OCL_INSTANTIATE_TEST_CASE_P(Arithm, MeanStdDev, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1835 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Log, Combine(::testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1836 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Exp, Combine(::testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1837 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Phase, Combine(::testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1838 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Magnitude, Combine(::testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1839 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Flip, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1840 OCL_INSTANTIATE_TEST_CASE_P(Arithm, MinMaxIdx, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1841 OCL_INSTANTIATE_TEST_CASE_P(Arithm, MinMaxIdx_Mask, Combine(OCL_ALL_DEPTHS, ::testing::Values(Channels(1)), Bool()));
1842 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Norm, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1843 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Sqrt, Combine(::testing::Values(CV_32F, CV_64F), OCL_ALL_CHANNELS, Bool()));
1844 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Normalize, Combine(OCL_ALL_DEPTHS, Values(Channels(1)), Bool()));
1845 OCL_INSTANTIATE_TEST_CASE_P(Arithm, InRange, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool(), Bool()));
1846 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ConvertScaleAbs, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1847 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ScaleAdd, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1848 OCL_INSTANTIATE_TEST_CASE_P(Arithm, PatchNaNs, Combine(OCL_ALL_CHANNELS, Bool()));
1849 OCL_INSTANTIATE_TEST_CASE_P(Arithm, Psnr, Combine(::testing::Values((MatDepth)CV_8U), OCL_ALL_CHANNELS, Bool()));
1850 OCL_INSTANTIATE_TEST_CASE_P(Arithm, UMatDot, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
1851
1852 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ReduceSum, Combine(testing::Values(std::make_pair<MatDepth, MatDepth>(CV_8U, CV_32S),
1853 std::make_pair<MatDepth, MatDepth>(CV_8U, CV_32F),
1854 std::make_pair<MatDepth, MatDepth>(CV_8U, CV_64F),
1855 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_32F),
1856 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_64F),
1857 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_32F),
1858 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_64F),
1859 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_32F),
1860 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_64F),
1861 std::make_pair<MatDepth, MatDepth>(CV_64F, CV_64F)),
1862 OCL_ALL_CHANNELS, testing::Values(0, 1), Bool()));
1863 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ReduceAvg, Combine(testing::Values(std::make_pair<MatDepth, MatDepth>(CV_8U, CV_32S),
1864 std::make_pair<MatDepth, MatDepth>(CV_8U, CV_32F),
1865 std::make_pair<MatDepth, MatDepth>(CV_8U, CV_64F),
1866 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_32F),
1867 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_64F),
1868 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_32F),
1869 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_64F),
1870 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_32F),
1871 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_64F),
1872 std::make_pair<MatDepth, MatDepth>(CV_64F, CV_64F)),
1873 OCL_ALL_CHANNELS, testing::Values(0, 1), Bool()));
1874 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ReduceMax, Combine(testing::Values(std::make_pair<MatDepth, MatDepth>(CV_8U, CV_8U),
1875 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_16U),
1876 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_16S),
1877 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_32F),
1878 std::make_pair<MatDepth, MatDepth>(CV_64F, CV_64F)),
1879 OCL_ALL_CHANNELS, testing::Values(0, 1), Bool()));
1880 OCL_INSTANTIATE_TEST_CASE_P(Arithm, ReduceMin, Combine(testing::Values(std::make_pair<MatDepth, MatDepth>(CV_8U, CV_8U),
1881 std::make_pair<MatDepth, MatDepth>(CV_16U, CV_16U),
1882 std::make_pair<MatDepth, MatDepth>(CV_16S, CV_16S),
1883 std::make_pair<MatDepth, MatDepth>(CV_32F, CV_32F),
1884 std::make_pair<MatDepth, MatDepth>(CV_64F, CV_64F)),
1885 OCL_ALL_CHANNELS, testing::Values(0, 1), Bool()));
1886
1887
1888 } } // namespace cvtest::ocl
1889
1890 #endif // HAVE_OPENCL
1891