10
10
#include < algorithm>
11
11
12
12
namespace cv {
13
- namespace ximgproc {
14
13
namespace stMorph {
15
14
16
15
std::vector<Rect> genPow2RectsToCoverKernel (InputArray _kernel)
@@ -20,7 +19,7 @@ std::vector<Rect> genPow2RectsToCoverKernel(InputArray _kernel)
20
19
Mat kernel = _kernel.getMat ();
21
20
22
21
// generate log2 table
23
- int len = max (kernel.rows , kernel.cols ) + 1 ;
22
+ int len = std:: max (kernel.rows , kernel.cols ) + 1 ;
24
23
std::vector<int > log2 (len);
25
24
for (int i = 2 ; i < len; i++) log2[i] = log2[i >> 1 ] + 1 ;
26
25
@@ -103,8 +102,10 @@ std::vector<Rect> genPow2RectsToCoverKernel(InputArray _kernel)
103
102
if (ptr[0 ] == 0 ) continue ;
104
103
105
104
// ignore if both sides are white by each axis
106
- if (col > 0 && ptr[-1 ] == 1 && col < colLim && ptr[1 ] == 1 ) continue ;
107
- if (row > 0 && ptr[-kernel.cols ] && row < rowLim && ptr[kernel.cols ] == 1 ) continue ;
105
+ if (col > 0 && ptr[-1 ] == 1
106
+ && col < colLim && ptr[1 ] == 1 ) continue ;
107
+ if (row > 0 && ptr[-kernel.cols ]
108
+ && row < rowLim && ptr[kernel.cols ] == 1 ) continue ;
108
109
109
110
// ignore one of neighbor block is white; will be alive in deeper table
110
111
if (col + colOfst <= colLim && ptr[colOfst] == 1 ) continue ;
@@ -122,7 +123,7 @@ std::vector<Rect> genPow2RectsToCoverKernel(InputArray _kernel)
122
123
return p2Rects;
123
124
}
124
125
125
- std::vector<StStep> planSparseTableConstruction (std::vector<std::vector<bool >> sparseMatMap)
126
+ std::vector<StStep> planSparseTableConstr (std::vector<std::vector<bool >> sparseMatMap)
126
127
{
127
128
/*
128
129
*
@@ -150,8 +151,8 @@ std::vector<StStep> planSparseTableConstruction(std::vector<std::vector<bool>> s
150
151
{
151
152
for (int j = i + 1 ; j < pos.size (); j++)
152
153
{
153
- int _x = min (pos[i].x , pos[j].x );
154
- int _y = min (pos[i].y , pos[j].y );
154
+ int _x = std:: min (pos[i].x , pos[j].x );
155
+ int _y = std:: min (pos[i].y , pos[j].y );
155
156
int cost = _x + _y;
156
157
if (maxCost < cost)
157
158
{
@@ -163,17 +164,21 @@ std::vector<StStep> planSparseTableConstruction(std::vector<std::vector<bool>> s
163
164
}
164
165
}
165
166
}
166
- for (int col = pos[maxI].x - 1 ; col >= maxX; col--) plan.emplace_back (pos[maxI].y , col, Dim::Col);
167
- for (int row = pos[maxI].y - 1 ; row >= maxY; row--) plan.emplace_back (row, maxX, Dim::Row);
168
- for (int col = pos[maxJ].x - 1 ; col >= maxX; col--) plan.emplace_back (pos[maxJ].y , col, Dim::Col);
169
- for (int row = pos[maxJ].y - 1 ; row >= maxY; row--) plan.emplace_back (row, maxX, Dim::Row);
167
+ for (int col = pos[maxI].x - 1 ; col >= maxX; col--)
168
+ plan.emplace_back (pos[maxI].y , col, Dim::Col);
169
+ for (int row = pos[maxI].y - 1 ; row >= maxY; row--)
170
+ plan.emplace_back (row, maxX, Dim::Row);
171
+ for (int col = pos[maxJ].x - 1 ; col >= maxX; col--)
172
+ plan.emplace_back (pos[maxJ].y , col, Dim::Col);
173
+ for (int row = pos[maxJ].y - 1 ; row >= maxY; row--)
174
+ plan.emplace_back (row, maxX, Dim::Row);
170
175
171
176
pos[maxI] = Point (maxX, maxY);
172
- std:: swap (pos[maxJ], pos[pos.size () - 1 ]);
177
+ swap (pos[maxJ], pos[pos.size () - 1 ]);
173
178
pos.pop_back ();
174
179
}
175
180
176
- std:: reverse (plan.begin (), plan.end ());
181
+ reverse (plan.begin (), plan.end ());
177
182
return plan;
178
183
}
179
184
@@ -195,7 +200,7 @@ void makeMinSparseTableMat(InputArray src, OutputArray dst, int rowStep, int col
195
200
{
196
201
for (int colCh = 0 ; colCh < colChLim; colCh++)
197
202
{
198
- // Somehow min(a,b) or a<b?a:b are slower.
203
+ // Somehow std:: min(a,b) or a<b?a:b are slower.
199
204
if (*srcPtr1 < *srcPtr2)
200
205
{
201
206
*dstPtr++ = *srcPtr1++;
@@ -247,12 +252,14 @@ void makeMaxSparseTableMat(InputArray src, OutputArray dst, int rowStep, int col
247
252
}
248
253
}
249
254
250
- void dilate (InputArray src, OutputArray dst, InputArray kernel, Point anchor,
255
+ void dilate (InputArray src, OutputArray dst, InputArray kernel,
256
+ Point anchor, int iterations,
251
257
int borderType, const Scalar& borderValue)
252
258
{
253
259
}
254
260
255
- void erode (InputArray _src, OutputArray _dst, InputArray _kernel, Point anchor,
261
+ void erode (InputArray _src, OutputArray _dst, InputArray _kernel,
262
+ Point anchor, int iterations,
256
263
int borderType, const Scalar& borderValue)
257
264
{
258
265
uchar ZERO = 255 ;
@@ -262,7 +269,7 @@ void erode(InputArray _src, OutputArray _dst, InputArray _kernel, Point anchor,
262
269
anchor = stMorph::normalizeAnchor (anchor, kernel.size ());
263
270
264
271
Scalar bV = borderValue;
265
- if (borderType == cv:: BorderTypes::BORDER_CONSTANT && borderValue == cv:: morphologyDefaultBorderValue ())
272
+ if (borderType == BorderTypes::BORDER_CONSTANT && borderValue == morphologyDefaultBorderValue ())
266
273
{
267
274
bV = Scalar::all (ZERO);
268
275
// see morph.dispatch.cpp:111
@@ -285,14 +292,18 @@ void erode(InputArray _src, OutputArray _dst, InputArray _kernel, Point anchor,
285
292
286
293
// list up required sparse table nodes.
287
294
std::vector<std::vector<bool >> sparseMatMap (rowDepthLim, std::vector<bool >(colDepthLim, false ));
288
- for (int i = 0 ; i < pow2Rects.size (); i++) sparseMatMap[pow2Rects[i].height ][pow2Rects[i].width ] = true ;
295
+ for (int i = 0 ; i < pow2Rects.size (); i++)
296
+ sparseMatMap[pow2Rects[i].height ][pow2Rects[i].width ] = true ;
289
297
290
298
// plan how to calculate required nodes of 2D sparse table.
291
- std::vector<StStep> stPlan = planSparseTableConstruction (sparseMatMap);
299
+ std::vector<StStep> stPlan = planSparseTableConstr (sparseMatMap);
292
300
293
301
// adding border to the source.
294
302
Mat expandedSrc (src.rows + kernel.rows , src.cols + kernel.cols , src.type ());
295
- cv::copyMakeBorder (src, expandedSrc, anchor.y , kernel.cols - 1 - anchor.y , anchor.x , kernel.rows - 1 - anchor.x , borderType, bV);
303
+ copyMakeBorder (src, expandedSrc,
304
+ anchor.y , kernel.cols - 1 - anchor.y ,
305
+ anchor.x , kernel.rows - 1 - anchor.x ,
306
+ borderType, bV);
296
307
297
308
// calculate sparse table nodes
298
309
std::vector<std::vector<Mat>> st (rowDepthLim, std::vector<Mat>(colDepthLim));
@@ -303,10 +314,12 @@ void erode(InputArray _src, OutputArray _dst, InputArray _kernel, Point anchor,
303
314
switch (step.ax )
304
315
{
305
316
case Dim::Col:
306
- makeMinSparseTableMat (st[step.dimRow ][step.dimCol ], st[step.dimRow ][step.dimCol + 1 ], 0 , 1 << step.dimCol );
317
+ makeMinSparseTableMat (st[step.dimRow ][step.dimCol ], st[step.dimRow ][step.dimCol + 1 ],
318
+ 0 , 1 << step.dimCol );
307
319
break ;
308
320
case Dim::Row:
309
- makeMinSparseTableMat (st[step.dimRow ][step.dimCol ], st[step.dimRow + 1 ][step.dimCol ], 1 << step.dimRow , 0 );
321
+ makeMinSparseTableMat (st[step.dimRow ][step.dimCol ], st[step.dimRow + 1 ][step.dimCol ],
322
+ 1 << step.dimRow , 0 );
310
323
break ;
311
324
}
312
325
}
@@ -342,6 +355,4 @@ void morphologyEx(InputArray _src, OutputArray _dst, int op,
342
355
{
343
356
}
344
357
345
- } // namespace st
346
- } // namespace ximgproc
347
- } // namespace cv
358
+ }} // cv::st::
0 commit comments