Path: blob/master/modules/gapi/test/cpu/gapi_imgproc_tests_fluid.cpp
16337 views
// This file is part of OpenCV project.1// It is subject to the license terms in the LICENSE file found in the top-level directory2// of this distribution and at http://opencv.org/license.html.3//4// Copyright (C) 2018 Intel Corporation567#include "../test_precomp.hpp"8#include "../common/gapi_imgproc_tests.hpp"9#include "backends/fluid/gfluidimgproc.hpp"1011#define IMGPROC_FLUID cv::gapi::imgproc::fluid::kernels()1213namespace opencv_test14{1516class AbsExactFluid : public Wrappable<AbsExactFluid>17{18public:19AbsExactFluid() {}20bool operator() (const cv::Mat& in1, const cv::Mat& in2) const { return cv::countNonZero(in1 != in2) == 0; }21private:22};232425class AbsToleranceFluid : public Wrappable<AbsToleranceFluid>26{27public:28AbsToleranceFluid(double tol) : _tol(tol) {}29bool operator() (const cv::Mat& in1, const cv::Mat& in2) const30{31cv::Mat absDiff; cv::absdiff(in1, in2, absDiff);32return cv::countNonZero(absDiff > _tol) == 0;33}34private:35double _tol;36};3738class AbsTolerance32FFluid : public Wrappable<AbsTolerance32FFluid>39{40public:41AbsTolerance32FFluid(double tol) : _tol(tol) {}42bool operator() (const cv::Mat& in1, const cv::Mat& in2) const43{44if (CV_MAT_DEPTH(in1.type()) == CV_32F)45return ((cv::countNonZero(cv::abs(in1 - in2) > (_tol)*cv::abs(in2))) ? false : true);46else47return ((cv::countNonZero(in1 != in2) <= (_tol * 100) * in2.total()) ? true : false);48}49private:50double _tol;51};5253class AbsToleranceSepFilterFluid : public Wrappable<AbsToleranceSepFilterFluid>54{55public:56AbsToleranceSepFilterFluid(double tol) : _tol(tol) {}57bool operator() (const cv::Mat& in1, const cv::Mat& in2) const58{59return ((cv::countNonZero(cv::abs(in1 - in2) > (_tol)* cv::abs(in2)) <= 0.01 * in2.total()) ? true : false);60}61private:62double _tol;63};6465class AbsToleranceGaussianBlurFluid : public Wrappable<AbsToleranceGaussianBlurFluid>66{67public:68AbsToleranceGaussianBlurFluid(double tol) : _tol(tol) {}69bool operator() (const cv::Mat& in1, const cv::Mat& in2) const70{71if (CV_MAT_DEPTH(in1.type()) == CV_32F || CV_MAT_DEPTH(in1.type()) == CV_64F)72{73return ((cv::countNonZero(cv::abs(in1 - in2) > (_tol)*cv::abs(in2))) ? false : true);74}75else76{77if (CV_MAT_DEPTH(in1.type()) == CV_8U)78{79bool a = (cv::countNonZero(cv::abs(in1 - in2) > 1) <= _tol * in2.total());80return ((a == 1 ? 0 : 1) && ((cv::countNonZero(cv::abs(in1 - in2) > 2) <= 0) == 1 ? 0 : 1)) == 1 ? false : true;81}82else return cv::countNonZero(in1 != in2)==0;83}84}85private:86double _tol;87};8889class AbsToleranceRGBBGRFluid : public Wrappable<AbsToleranceRGBBGRFluid>90{91public:92AbsToleranceRGBBGRFluid(double tol) : _tol(tol) {}93bool operator() (const cv::Mat& in1, const cv::Mat& in2) const94{95bool a = (cv::countNonZero((in1 - in2) > 0) <= _tol * in2.total());96return ((a == 1 ? 0 : 1) && ((cv::countNonZero((in1 - in2) > 1) <= 0) == 1 ? 0 : 1)) == 1 ? false : true;97}98private:99double _tol;100};101102class ToleranceTripleFluid : public Wrappable<ToleranceTripleFluid>103{104public:105ToleranceTripleFluid(double tol1, double tol2, double tol3) : _tol1(tol1), _tol2(tol2), _tol3(tol3) {}106bool operator() (const cv::Mat& in1, const cv::Mat& in2) const107{108bool a = (cv::countNonZero((in1 - in2) > 0) <= _tol1 * in2.total());109return (((a == 1 ? 0 : 1) &&110((cv::countNonZero((in1 - in2) > 1) <= _tol2 * in2.total()) == 1 ? 0 : 1) &&111((cv::countNonZero((in1 - in2) > 2) <= _tol3 * in2.total()) == 1 ? 0 : 1))) == 1 ? false : true;112}113private:114double _tol1, _tol2, _tol3;115};116117INSTANTIATE_TEST_CASE_P(RGB2GrayTestFluid, RGB2GrayTest,118Combine(Values(AbsToleranceRGBBGRFluid(0.001).to_compare_f()),119Values(cv::Size(1280, 720),120cv::Size(640, 480)),121Values(true, false),122Values(cv::compile_args(IMGPROC_FLUID))));123124INSTANTIATE_TEST_CASE_P(BGR2GrayTestFluid, BGR2GrayTest,125Combine(Values(AbsToleranceRGBBGRFluid(0.001).to_compare_f()),126Values(cv::Size(1280, 720),127cv::Size(640, 480)),128Values(true, false),129Values(cv::compile_args(IMGPROC_FLUID))));130131INSTANTIATE_TEST_CASE_P(RGB2YUVTestFluid, RGB2YUVTest,132Combine(Values(AbsToleranceRGBBGRFluid(0.15*3).to_compare_f()),133Values(cv::Size(1280, 720),134cv::Size(640, 480)),135Values(true, false),136Values(cv::compile_args(IMGPROC_FLUID))));137138INSTANTIATE_TEST_CASE_P(YUV2RGBTestFluid, YUV2RGBTest,139Combine(Values(ToleranceTripleFluid(0.25 * 3, 0.01 * 3, 1e-5 * 3).to_compare_f()),140Values(cv::Size(1280, 720),141cv::Size(640, 480)),142Values(true, false),143Values(cv::compile_args(IMGPROC_FLUID))));144145INSTANTIATE_TEST_CASE_P(RGB2LabTestFluid, RGB2LabTest,146Combine(Values(ToleranceTripleFluid(0.25 * 3, 0.0, 1e-5 * 3).to_compare_f()),147Values(cv::Size(1280, 720),148cv::Size(640, 480)),149Values(true, false),150Values(cv::compile_args(IMGPROC_FLUID))));151152// FIXME: Not supported by Fluid yet (no kernel implemented)153INSTANTIATE_TEST_CASE_P(BGR2LUVTestFluid, BGR2LUVTest,154Combine(Values(ToleranceTripleFluid(0.25 * 3, 0.01 * 3, 0.0001 * 3).to_compare_f()),155Values(cv::Size(1280, 720),156cv::Size(640, 480)),157Values(true, false),158Values(cv::compile_args(IMGPROC_FLUID))));159160INSTANTIATE_TEST_CASE_P(blurTestFluid, BlurTest,161Combine(Values(AbsToleranceFluid(0.0).to_compare_f()),162Values(CV_8UC1, CV_16UC1, CV_16SC1),163Values(3), // add kernel size=5 when implementation is ready164Values(cv::Size(1280, 720),165cv::Size(640, 480)),166Values(cv::BORDER_DEFAULT),167Values(true, false),168Values(cv::compile_args(IMGPROC_FLUID))));169170INSTANTIATE_TEST_CASE_P(gaussBlurTestFluid, GaussianBlurTest,171Combine(Values(AbsToleranceGaussianBlurFluid(1e-6).to_compare_f()),172Values(CV_8UC1, CV_16UC1, CV_16SC1),173Values(3), // add kernel size=5 when implementation is ready174Values(cv::Size(1280, 720),175cv::Size(640, 480)),176Values(true, false),177Values(cv::compile_args(IMGPROC_FLUID))));178179INSTANTIATE_TEST_CASE_P(medianBlurTestFluid, MedianBlurTest,180Combine(Values(AbsExactFluid().to_compare_f()),181Values(CV_8UC1, CV_16UC1, CV_16SC1),182Values(3), // add kernel size=5 when implementation is ready183Values(cv::Size(1280, 720),184cv::Size(640, 480)),185Values(true, false),186Values(cv::compile_args(IMGPROC_FLUID))));187188INSTANTIATE_TEST_CASE_P(erodeTestFluid, ErodeTest,189Combine(Values(AbsExactFluid().to_compare_f()),190Values(CV_8UC1, CV_16UC1, CV_16SC1),191Values(3), // add kernel size=5 when implementation is ready192Values(cv::Size(1280, 720),193cv::Size(640, 480)),194Values(cv::MorphShapes::MORPH_RECT,195cv::MorphShapes::MORPH_CROSS,196cv::MorphShapes::MORPH_ELLIPSE),197Values(true, false),198Values(cv::compile_args(IMGPROC_FLUID))));199200INSTANTIATE_TEST_CASE_P(dilateTestFluid, DilateTest,201Combine(Values(AbsExactFluid().to_compare_f()),202Values(CV_8UC1, CV_16UC1, CV_16SC1),203Values(3), // add kernel size=5 when implementation is ready204Values(cv::Size(1280, 720),205cv::Size(640, 480)),206Values(cv::MorphShapes::MORPH_RECT,207cv::MorphShapes::MORPH_CROSS,208cv::MorphShapes::MORPH_ELLIPSE),209Values(true, false),210Values(cv::compile_args(IMGPROC_FLUID))));211212INSTANTIATE_TEST_CASE_P(SobelTestFluid, SobelTest,213Combine(Values(AbsExactFluid().to_compare_f()),214Values(CV_8UC1, CV_16UC1, CV_16SC1),215Values(3), // add kernel size=5 when implementation is ready216Values(cv::Size(1280, 720),217cv::Size(640, 480)),218Values(-1, CV_32F),219Values(0, 1),220Values(1, 2),221Values(true, false),222Values(cv::compile_args(IMGPROC_FLUID))));223224INSTANTIATE_TEST_CASE_P(boxFilterTestFluid32, BoxFilterTest,225Combine(Values(AbsTolerance32FFluid(1e-6).to_compare_f()),226Values(CV_8UC1, CV_16UC1, CV_16SC1),227Values(3), // add kernel size=5 when implementation is ready228Values(cv::Size(1280, 720),229cv::Size(640, 480)),230Values(cv::BORDER_DEFAULT),231Values(-1, CV_32F),232Values(true, false),233Values(cv::compile_args(IMGPROC_FLUID))));234235INSTANTIATE_TEST_CASE_P(sepFilterTestFluid, SepFilterTest,236Combine(Values(AbsToleranceSepFilterFluid(1e-5f).to_compare_f()),237Values(CV_32FC1),238Values(3), // add kernel size=5 when implementation is ready239Values(cv::Size(1280, 720),240cv::Size(640, 480)),241Values(-1, CV_32F),242Values(true, false),243Values(cv::compile_args(IMGPROC_FLUID))));244245INSTANTIATE_TEST_CASE_P(filter2DTestFluid, Filter2DTest,246Combine(Values(AbsTolerance32FFluid(1e-6).to_compare_f()),247Values(CV_8UC1, CV_16UC1, CV_16SC1),248Values(3), // add kernel size=4,5,7 when implementation ready249Values(cv::Size(1280, 720),250cv::Size(640, 480),251cv::Size(128, 128)),252Values(cv::BORDER_DEFAULT),253Values(-1, CV_32F),254Values(true, false),255Values(cv::compile_args(IMGPROC_FLUID))));256257} // opencv_test258259260