Skip to content

Commit d4276e9

Browse files
committed
テスト追加
1 parent 2db05d6 commit d4276e9

File tree

1 file changed

+136
-13
lines changed

1 file changed

+136
-13
lines changed

modules/ximgproc/test/test_sparse_table_morphology.cpp

Lines changed: 136 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
#include "test_precomp.hpp"
66
#include "opencv2/ximgproc/sparse_table_morphology.hpp"
7-
#include "opencv2/imgproc.hpp"
87

98
namespace opencv_test {
10-
namespace stMorph {
9+
namespace {
1110

12-
TEST(ximgproc_SparseTableMorph, compare_with_original_erode)
11+
// todo: ユニットテスト追加、テンプレート型引数でMatType・minmax対応、サンプル追加
12+
13+
TEST(ximgproc_StMorph_dev, compare_with_original_erode)
1314
{
1415
// preparation
1516
int kRadius = 15;
@@ -41,7 +42,7 @@ TEST(ximgproc_SparseTableMorph, compare_with_original_erode)
4142

4243
// proposal
4344
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
4546
timer.stop();
4647
double proposalTime = timer.getTimeMilli();
4748

@@ -82,16 +83,17 @@ TEST(develop, POW2RECT_COVERING)
8283
1, 1, 1, 1, 1, 1, 1, 1,
8384
};
8485
Mat kernel(8, 8, CV_8UC1, ary);
85-
std::vector<Rect> rects = ximgproc::stMorph::genPow2RectsToCoverKernel(kernel);
86+
std::vector<Rect> rects = stMorph::genPow2RectsToCoverKernel(kernel);
8687

8788
int rate = 20;
8889
resize(kernel * 255, kernel, Size(), rate, rate, InterpolationFlags::INTER_NEAREST);
8990
cvtColor(kernel, kernel, cv::COLOR_GRAY2BGR);
9091
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)
9597
};
9698
for (int i = 0; i < rects.size(); i++)
9799
{
@@ -123,7 +125,7 @@ TEST(develop, PLANNING)
123125
std::vector<bool>{0,1,0,0,0,0,0,0},
124126
std::vector<bool>{1,0,0,0,0,0,0,0},
125127
};
126-
auto res = ximgproc::stMorph::planSparseTableConstruction(map);
128+
auto res = stMorph::planSparseTableConstr(map);
127129

128130
int g = 30;
129131
int r = map.size();
@@ -139,7 +141,7 @@ TEST(develop, PLANNING)
139141
for (int i = 0; i < res.size(); i++)
140142
{
141143
auto edge = res[i];
142-
if (edge.ax == ximgproc::stMorph::Dim::Row)
144+
if (edge.ax == stMorph::Dim::Row)
143145
{
144146
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);
145147
}
@@ -154,5 +156,126 @@ TEST(develop, PLANNING)
154156
destroyAllWindows();
155157
}
156158

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

Comments
 (0)