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) 2013, OpenCV Foundation, 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 Intel Corporation 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
43 #include "test_precomp.hpp"
44 #include "opencv2/photo.hpp"
45 #include <string>
46
47 using namespace cv;
48 using namespace std;
49
50 static const double numerical_precision = 100.;
51
TEST(Photo_NPR_EdgePreserveSmoothing_RecursiveFilter,regression)52 TEST(Photo_NPR_EdgePreserveSmoothing_RecursiveFilter, regression)
53 {
54 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/";
55 string original_path = folder + "test1.png";
56
57 Mat source = imread(original_path, IMREAD_COLOR);
58
59 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path;
60
61 Mat result;
62 edgePreservingFilter(source,result,1);
63
64 Mat reference = imread(folder + "smoothened_RF_reference.png");
65 double error = cvtest::norm(reference, result, NORM_L1);
66 EXPECT_LE(error, numerical_precision);
67 }
68
TEST(Photo_NPR_EdgePreserveSmoothing_NormConvFilter,regression)69 TEST(Photo_NPR_EdgePreserveSmoothing_NormConvFilter, regression)
70 {
71 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/";
72 string original_path = folder + "test1.png";
73
74 Mat source = imread(original_path, IMREAD_COLOR);
75
76 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path;
77
78 Mat result;
79 edgePreservingFilter(source,result,2);
80
81 Mat reference = imread(folder + "smoothened_NCF_reference.png");
82 double error = cvtest::norm(reference, result, NORM_L1);
83 EXPECT_LE(error, numerical_precision);
84
85 }
86
TEST(Photo_NPR_DetailEnhance,regression)87 TEST(Photo_NPR_DetailEnhance, regression)
88 {
89 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/";
90 string original_path = folder + "test1.png";
91
92 Mat source = imread(original_path, IMREAD_COLOR);
93
94 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path;
95
96 Mat result;
97 detailEnhance(source,result);
98
99 Mat reference = imread(folder + "detail_enhanced_reference.png");
100 double error = cvtest::norm(reference, result, NORM_L1);
101 EXPECT_LE(error, numerical_precision);
102 }
103
TEST(Photo_NPR_PencilSketch,regression)104 TEST(Photo_NPR_PencilSketch, regression)
105 {
106 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/";
107 string original_path = folder + "test1.png";
108
109 Mat source = imread(original_path, IMREAD_COLOR);
110
111 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path;
112
113 Mat pencil_result, color_pencil_result;
114 pencilSketch(source,pencil_result, color_pencil_result, 10, 0.1f, 0.03f);
115
116 Mat pencil_reference = imread(folder + "pencil_sketch_reference.png", 0 /* == grayscale*/);
117 double pencil_error = norm(pencil_reference, pencil_result, NORM_L1);
118 EXPECT_LE(pencil_error, numerical_precision);
119
120 Mat color_pencil_reference = imread(folder + "color_pencil_sketch_reference.png");
121 double color_pencil_error = cvtest::norm(color_pencil_reference, color_pencil_result, NORM_L1);
122 EXPECT_LE(color_pencil_error, numerical_precision);
123 }
124
TEST(Photo_NPR_Stylization,regression)125 TEST(Photo_NPR_Stylization, regression)
126 {
127 string folder = string(cvtest::TS::ptr()->get_data_path()) + "npr/";
128 string original_path = folder + "test1.png";
129
130 Mat source = imread(original_path, IMREAD_COLOR);
131
132 ASSERT_FALSE(source.empty()) << "Could not load input image " << original_path;
133
134 Mat result;
135 stylization(source,result);
136
137 Mat stylized_reference = imread(folder + "stylized_reference.png");
138 double stylized_error = cvtest::norm(stylized_reference, result, NORM_L1);
139 EXPECT_LE(stylized_error, numerical_precision);
140
141 }
142