Skip to content

Commit 6f815a0

Browse files
committed
部分最適化
1 parent a49323b commit 6f815a0

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

modules/ximgproc/src/sparse_table_morphology.cpp

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -144,24 +144,31 @@ void MakeMinStMat(InputArray src, OutputArray dst, int rowStep, int colStep)
144144

145145
Mat src_ = src.getMat();
146146
Mat dst_ = dst.getMat();
147+
int rowLim = src.rows() - rowStep;
148+
int colChLim = (src.cols() - colStep) * src.channels();
149+
int borderSkipStep = colStep * src.channels();
150+
147151
uchar* srcPtr1 = src_.ptr<uchar>(0, 0);
148152
uchar* srcPtr2 = src_.ptr<uchar>(rowStep, colStep);
149153
uchar* dstPtr = dst_.ptr<uchar>(0, 0);
150-
for (int row = 0; row < src.rows() - rowStep; row++)
154+
for (int row = 0; row < rowLim; row++)
151155
{
152-
for (int col = 0; col < src.cols() - colStep; col++)
156+
for (int colCh = 0; colCh < colChLim; colCh++)
153157
{
154-
for (int c = 0; c < src.channels(); c++)
158+
if (*srcPtr1 < *srcPtr2)
155159
{
156-
*dstPtr = min(*srcPtr1, *srcPtr2);
157-
srcPtr1++;
160+
*dstPtr++ = *srcPtr1++;
158161
srcPtr2++;
159-
dstPtr++;
162+
}
163+
else
164+
{
165+
*dstPtr++ = *srcPtr2++;
166+
srcPtr1++;
160167
}
161168
}
162-
srcPtr1 += colStep * src.channels();
163-
srcPtr2 += colStep * src.channels();
164-
dstPtr += colStep * src.channels();
169+
srcPtr1 += borderSkipStep;
170+
srcPtr2 += borderSkipStep;
171+
dstPtr += borderSkipStep;
165172
}
166173
}
167174
void MakeMaxStMat(InputArray src, OutputArray dst, int rowStep, int colStep)
@@ -275,25 +282,22 @@ void erode(InputArray _src, OutputArray _dst, InputArray _kernel,
275282
}
276283

277284
// 結果構築
278-
int aaa; //???
279285
for (int i = 0; i < powerOf2Rects.size(); i++)
280286
{
281287
Rect rect = powerOf2Rects[i];
282-
Mat* sparseMat = st[rect.height][rect.width];
283-
uchar* srcPtr = sparseMat->ptr() + sparseMat->step.p[0] * rect.y + sparseMat->step.p[1] * rect.x;
284-
uchar* dstPtr = dst.ptr();
285-
int sideBorderSkipStep = (kernel.cols - 1) * sparseMat->step.p[1];
288+
Mat sparseMat = *st[rect.height][rect.width];
289+
int sideBorderSkipStep = (kernel.cols - 1) * sparseMat.step.p[1];
290+
int colChLim = src.cols * src.channels();
286291

292+
uchar* srcPtr = sparseMat.ptr(rect.y, rect.x);
293+
uchar* dstPtr = dst.ptr();
287294
for (int row = 0; row < src.rows; row++)
288295
{
289-
for (int col = 0; col < src.cols; col++)
296+
for (int col = 0; col < colChLim; col++)
290297
{
291-
for (int c = 0; c < src.channels(); c++)
292-
{
293-
*dstPtr = min(*dstPtr, *srcPtr);
294-
srcPtr++;
295-
dstPtr++;
296-
}
298+
if (*srcPtr < *dstPtr) *dstPtr = *srcPtr;
299+
srcPtr++;
300+
dstPtr++;
297301
}
298302
srcPtr += sideBorderSkipStep;
299303
}

0 commit comments

Comments
 (0)