4
4
5
5
#include " test_precomp.hpp"
6
6
#include " opencv2/ximgproc/sparse_table_morphology.hpp"
7
- #include " opencv2/imgproc.hpp"
8
7
9
8
namespace opencv_test {
10
- namespace stMorph {
9
+ namespace {
11
10
12
- TEST (ximgproc_SparseTableMorph, compare_with_original_erode)
11
+ // todo: ユニットテスト追加、テンプレート型引数でMatType・minmax対応、サンプル追加
12
+
13
+ TEST (ximgproc_StMorph_dev, compare_with_original_erode)
13
14
{
14
15
// preparation
15
16
int kRadius = 15 ;
@@ -41,7 +42,7 @@ TEST(ximgproc_SparseTableMorph, compare_with_original_erode)
41
42
42
43
// proposal
43
44
timer.start ();
44
- ximgproc:: stMorph::erode (src, actual, kernel); // 217ms for Elipse, kSize = 101
45
+ stMorph::erode (src, actual, kernel); // 217ms for Elipse, kSize = 101
45
46
timer.stop ();
46
47
double proposalTime = timer.getTimeMilli ();
47
48
@@ -82,16 +83,17 @@ TEST(develop, POW2RECT_COVERING)
82
83
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
83
84
};
84
85
Mat kernel (8 , 8 , CV_8UC1, ary);
85
- std::vector<Rect> rects = ximgproc:: stMorph::genPow2RectsToCoverKernel (kernel);
86
+ std::vector<Rect> rects = stMorph::genPow2RectsToCoverKernel (kernel);
86
87
87
88
int rate = 20 ;
88
89
resize (kernel * 255 , kernel, Size (), rate, rate, InterpolationFlags::INTER_NEAREST);
89
90
cvtColor (kernel, kernel, cv::COLOR_GRAY2BGR);
90
91
Scalar color[20 ]{
91
- Scalar (83 , 89 , 73 ), Scalar (49 , 238 , 73 ), Scalar (220 , 192 , 189 ), Scalar (174 , 207 , 34 ), Scalar (144 , 169 , 187 ),
92
- Scalar (137 , 94 , 76 ), Scalar (42 , 11 , 215 ), Scalar (113 , 11 , 204 ), Scalar (71 , 124 , 8 ), Scalar (192 , 38 , 8 ),
93
- Scalar (82 , 201 , 8 ), Scalar (70 , 7 , 112 ), Scalar (166 , 219 , 201 ), Scalar (154 , 173 , 0 ), Scalar (132 , 127 , 139 ),
94
- Scalar (154 , 1 , 68 ), Scalar (231 , 131 , 56 ), Scalar (206 , 238 , 136 ), Scalar (188 , 78 , 173 ), Scalar (27 , 178 , 206 )
92
+ Scalar (83 , 89 , 73 ), Scalar (49 , 238 , 73 ), Scalar (220 , 192 , 189 ), Scalar (174 , 207 , 34 ),
93
+ Scalar (144 , 169 , 187 ), Scalar (137 , 94 , 76 ), Scalar (42 , 11 , 215 ), Scalar (113 , 11 , 204 ),
94
+ Scalar (71 , 124 , 8 ), Scalar (192 , 38 , 8 ), Scalar (82 , 201 , 8 ), Scalar (70 , 7 , 112 ),
95
+ Scalar (166 , 219 , 201 ), Scalar (154 , 173 , 0 ), Scalar (132 , 127 , 139 ), Scalar (154 , 1 , 68 ),
96
+ Scalar (231 , 131 , 56 ), Scalar (206 , 238 , 136 ), Scalar (188 , 78 , 173 ), Scalar (27 , 178 , 206 )
95
97
};
96
98
for (int i = 0 ; i < rects.size (); i++)
97
99
{
@@ -123,7 +125,7 @@ TEST(develop, PLANNING)
123
125
std::vector<bool >{0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 },
124
126
std::vector<bool >{1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 },
125
127
};
126
- auto res = ximgproc:: stMorph::planSparseTableConstruction (map);
128
+ auto res = stMorph::planSparseTableConstr (map);
127
129
128
130
int g = 30 ;
129
131
int r = map.size ();
@@ -139,7 +141,7 @@ TEST(develop, PLANNING)
139
141
for (int i = 0 ; i < res.size (); i++)
140
142
{
141
143
auto edge = res[i];
142
- if (edge.ax == ximgproc:: stMorph::Dim::Row)
144
+ if (edge.ax == stMorph::Dim::Row)
143
145
{
144
146
cv::line (m, Point (edge.dimCol * g + g / 2 , edge.dimRow * g + g / 2 ), Point (edge.dimCol * g + g / 2 , (edge.dimRow + 1 ) * g + g / 2 ), Scalar (100 , 100 , 100 ), 2 );
145
147
}
@@ -154,5 +156,126 @@ TEST(develop, PLANNING)
154
156
destroyAllWindows ();
155
157
}
156
158
157
- } //
158
- } // opencv_test
159
+
160
+ /*
161
+ * Common methods during tests.
162
+ */
163
+ void assertArraysIdentical (InputArray ary1, InputArray ary2)
164
+ {
165
+ Mat xor = ary1.getMat () ^ ary2.getMat ();
166
+ ASSERT_EQ (cv::countNonZero (xor .reshape (1 )), 0 );
167
+ }
168
+ Mat im (int type)
169
+ {
170
+ int depth = CV_MAT_DEPTH (type);
171
+ int ch = CV_MAT_CN (type);
172
+ Mat img = imread (cvtest::TS::ptr ()->get_data_path () + " cv/shared/lena.png" );
173
+ img.convertTo (img, depth);
174
+
175
+ if (ch == 1 )
176
+ {
177
+ cv::cvtColor (img, img, ColorConversionCodes::COLOR_BGR2GRAY, ch);
178
+ }
179
+ return img;
180
+ }
181
+ Mat kn5 () { return getStructuringElement (cv::MorphShapes::MORPH_ELLIPSE, Size (5 , 5 )); }
182
+ Mat kn4 () { return getStructuringElement (cv::MorphShapes::MORPH_ELLIPSE, Size (4 , 4 )); }
183
+ Mat kn1Zero () { return Mat::zeros (1 , 1 , CV_8UC1); }
184
+ Mat kn1One () { return Mat::ones (1 , 1 , CV_8UC1); }
185
+ Mat knEmpty () { return Mat (); }
186
+ Mat knZeros () { return Mat::zeros (5 , 5 , CV_8UC1); }
187
+ Mat knOnes () { return Mat::ones (5 , 5 , CV_8UC1); }
188
+ Mat knBig () { return getStructuringElement (cv::MorphShapes::MORPH_RECT, Size (201 , 201 )); }
189
+
190
+ /*
191
+ * erode regression tests.
192
+ */
193
+ void erode_rgr (InputArray src, InputArray kernel, Point anchor = Point(-1 , -1 ),
194
+ int iterations = 1,
195
+ BorderTypes bdrType = BorderTypes::BORDER_CONSTANT, Scalar& bdrVal = Scalar::all(DBL_MAX))
196
+ {
197
+ Mat expected, actual;
198
+ erode (src, expected, kernel, anchor, iterations, bdrType, bdrVal);
199
+ stMorph::erode (src, actual, kernel, anchor, iterations, bdrType, bdrVal);
200
+ assertArraysIdentical (expected, actual);
201
+ }
202
+ TEST (ximgproc_StMorph_erode, regression_8UC1) { erode_rgr (im (CV_8UC1), kn5 ()); }
203
+ TEST (ximgproc_StMorph_erode, regression_8UC3) { erode_rgr (im (CV_8UC3), kn5 ()); }
204
+ TEST (ximgproc_StMorph_erode, regression_8SC1) { erode_rgr (im (CV_8SC1), kn5 ()); }
205
+ TEST (ximgproc_StMorph_erode, regression_8SC3) { erode_rgr (im (CV_8SC3), kn5 ()); }
206
+ TEST (ximgproc_StMorph_erode, regression_16UC1) { erode_rgr (im (CV_16UC1), kn5 ()); }
207
+ TEST (ximgproc_StMorph_erode, regression_16UC3) { erode_rgr (im (CV_16UC3), kn5 ()); }
208
+ TEST (ximgproc_StMorph_erode, regression_16SC1) { erode_rgr (im (CV_16SC1), kn5 ()); }
209
+ TEST (ximgproc_StMorph_erode, regression_16SC3) { erode_rgr (im (CV_16SC3), kn5 ()); }
210
+ TEST (ximgproc_StMorph_erode, regression_32SC1) { erode_rgr (im (CV_32SC1), kn5 ()); }
211
+ TEST (ximgproc_StMorph_erode, regression_32SC3) { erode_rgr (im (CV_32SC3), kn5 ()); }
212
+ TEST (ximgproc_StMorph_erode, regression_32FC1) { erode_rgr (im (CV_32FC1), kn5 ()); }
213
+ TEST (ximgproc_StMorph_erode, regression_32FC3) { erode_rgr (im (CV_32FC3), kn5 ()); }
214
+ TEST (ximgproc_StMorph_erode, regression_64FC1) { erode_rgr (im (CV_64FC1), kn5 ()); }
215
+ TEST (ximgproc_StMorph_erode, regression_64FC3) { erode_rgr (im (CV_64FC3), kn5 ()); }
216
+ TEST (ximgproc_StMorph_erode, regression_16FC1) { erode_rgr (im (CV_16FC1), kn5 ()); }
217
+ TEST (ximgproc_StMorph_erode, regression_16FC3) { erode_rgr (im (CV_16FC3), kn5 ()); }
218
+ TEST (ximgproc_StMorph_erode, regression_kn5) { erode_rgr (im (CV_8UC3), kn5 ()); }
219
+ TEST (ximgproc_StMorph_erode, regression_kn4) { erode_rgr (im (CV_8UC3), kn4 ()); }
220
+ TEST (ximgproc_StMorph_erode, regression_kn1Zero) { erode_rgr (im (CV_8UC3), kn1Zero ()); }
221
+ TEST (ximgproc_StMorph_erode, regression_kn1One) { erode_rgr (im (CV_8UC3), kn1One ()); }
222
+ TEST (ximgproc_StMorph_erode, regression_knEmpty) { erode_rgr (im (CV_8UC3), knEmpty ()); }
223
+ TEST (ximgproc_StMorph_erode, regression_knZeros) { erode_rgr (im (CV_8UC3), knZeros ()); }
224
+ TEST (ximgproc_StMorph_erode, regression_knOnes) { erode_rgr (im (CV_8UC3), knOnes ()); }
225
+ TEST (ximgproc_StMorph_erode, regression_knBig) { erode_rgr (im (CV_8UC3), knBig ()); }
226
+ TEST (ximgproc_StMorph_erode, regression_ancMid) { erode_rgr (im (CV_8UC3), kn5 (), Point (-1 , -1 )); }
227
+ TEST (ximgproc_StMorph_erode, regression_ancEdge1) { erode_rgr (im (CV_8UC3), kn5 (), Point (0 , 0 )); }
228
+ TEST (ximgproc_StMorph_erode, regression_ancEdge2) { erode_rgr (im (CV_8UC3), kn5 (), Point (4 , 4 )); }
229
+ TEST (ximgproc_StMorph_erode, regression_it0) { erode_rgr (im (CV_8UC3), kn5 (), Point (-1 , -1 ), 0 ); }
230
+ TEST (ximgproc_StMorph_erode, regression_it1) { erode_rgr (im (CV_8UC3), kn5 (), Point (-1 , -1 ), 1 ); }
231
+ TEST (ximgproc_StMorph_erode, regression_it2) { erode_rgr (im (CV_8UC3), kn5 (), Point (-1 , -1 ), 2 ); }
232
+ /*
233
+ * erode feature tests.
234
+ */
235
+ void erode_ftr (InputArray src, InputArray kernel, Point anchor = Point(-1 , -1 ),
236
+ int iterations = 1,
237
+ BorderTypes bdrType = BorderTypes::BORDER_CONSTANT, Scalar& bdrVal = Scalar::all(DBL_MAX))
238
+ {
239
+ Mat expected, actual;
240
+ stMorph::erode (src, actual, kernel, anchor, iterations, bdrType, bdrVal);
241
+ assertArraysIdentical (expected, actual);
242
+ }
243
+ TEST (ximgproc_StMorph_erode, feature_ancOut) { erode_ftr (im (CV_8UC3), kn5 (), Point (5 , 5 )); }
244
+
245
+ /*
246
+ * dilate regression tests.
247
+ */
248
+ void dilate_rgr (InputArray src, InputArray kernel, Point anchor = Point(-1 , -1 ),
249
+ int iterations = 1,
250
+ BorderTypes bdrType = BorderTypes::BORDER_CONSTANT, Scalar& bdrVal = Scalar::all(DBL_MAX))
251
+ {
252
+ Mat expected, actual;
253
+ dilate (src, expected, kernel, anchor, iterations, bdrType, bdrVal);
254
+ stMorph::dilate (src, actual, kernel, anchor, iterations, bdrType, bdrVal);
255
+ assertArraysIdentical (expected, actual);
256
+ }
257
+ TEST (ximgproc_StMorph_dilate, regression_8UC3) { dilate_rgr (im (CV_8UC3), kn5 ()); }
258
+ TEST (ximgproc_StMorph_dilate, regression_8UC1) { dilate_rgr (im (CV_8UC1), kn5 ()); }
259
+
260
+ /*
261
+ * morphologyEx regression tests.
262
+ */
263
+ void ex_rgr (InputArray src, MorphTypes op, InputArray kernel, Point anchor = Point(-1 , -1 ),
264
+ int iterations = 1,
265
+ BorderTypes bdrType = BorderTypes::BORDER_CONSTANT, Scalar& bdrVal = Scalar::all(DBL_MAX))
266
+ {
267
+ Mat expected, actual;
268
+ morphologyEx (src, expected, op, kernel, anchor, iterations, bdrType, bdrVal);
269
+ stMorph::morphologyEx (src, actual, op, kernel, anchor, iterations, bdrType, bdrVal);
270
+ assertArraysIdentical (expected, actual);
271
+ }
272
+ TEST (ximgproc_StMorph_ex, regression_erode) { ex_rgr (im (CV_8UC3), MORPH_ERODE, kn5 ()); }
273
+ TEST (ximgproc_StMorph_ex, regression_dilage) { ex_rgr (im (CV_8UC3), MORPH_DILATE, kn5 ()); }
274
+ TEST (ximgproc_StMorph_ex, regression_open) { ex_rgr (im (CV_8UC3), MORPH_OPEN, kn5 ()); }
275
+ TEST (ximgproc_StMorph_ex, regression_close) { ex_rgr (im (CV_8UC3), MORPH_CLOSE, kn5 ()); }
276
+ TEST (ximgproc_StMorph_ex, regression_gradient) { ex_rgr (im (CV_8UC3), MORPH_GRADIENT, kn5 ()); }
277
+ TEST (ximgproc_StMorph_ex, regression_tophat) { ex_rgr (im (CV_8UC3), MORPH_TOPHAT, kn5 ()); }
278
+ TEST (ximgproc_StMorph_ex, regression_blackhat) { ex_rgr (im (CV_8UC3), MORPH_BLACKHAT, kn5 ()); }
279
+ TEST (ximgproc_StMorph_ex, regression_hitmiss) { ex_rgr (im (CV_8UC3), MORPH_HITMISS, kn5 ()); }
280
+
281
+ }} // ::opencv_test::
0 commit comments