131l_int32 i, n, count, length, first, last;
133l_float32 width1, width2, ratio, extra;
139 return ERROR_INT(
"&width not defined", __func__, 1);
142 return ERROR_INT(
"pixs not defined", __func__, 1);
144 tab = (tab8) ? tab8 : makePixelSumTab8();
152 pixCountPixels(pixs, &count, tab8);
153 width1 = (l_float32)count / (l_float32)length;
157 pix1 = pixDistanceFunction(pixs, 8, 8, L_BOUNDARY_BG);
158 na1 = pixGetGrayHistogram(pix1, 1);
160 numaGetNonzeroRange(na1, 0.1f, &first, &last);
161 na2 = numaClipToInterval(na1, 0, last);
162 numaWriteStderr(na2);
167 n = numaGetCount(na2);
168 for (i = n - 1; i > 0; i--) {
169 ratio = fa[i] / fa[1];
170 if (ratio > thresh)
break;
176 extra = (i < n - 1) ? fa[i + 1] / fa[1] : 0;
177 width2 = 2.0f * (i - 1.0f + ratio + extra);
178 lept_stderr(
"width1 = %5.2f, width2 = %5.2f\n", width1, width2);
181 *pwidth = (width1 + width2) / 2.0f;
183 if (!tab8) LEPT_FREE(tab);
213l_int32 i, n, same, maxd;
220 return (
NUMA *)ERROR_PTR(
"pixa not defined", __func__, NULL);
221 pixaVerifyDepth(pixa, &same, &maxd);
223 return (
NUMA *)ERROR_PTR(
"pix not all 1 bpp", __func__, NULL);
225 tab = (tab8) ? tab8 : makePixelSumTab8();
227 n = pixaGetCount(pixa);
229 for (i = 0; i < n; i++) {
230 pix = pixaGetPix(pixa, i,
L_CLONE);
232 numaAddNumber(na, width);
236 if (!tab8) LEPT_FREE(tab);
255l_int32 i, n, same, maxd;
262 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
264 return (
PIXA *)ERROR_PTR(
"target width < 1", __func__, NULL);
265 pixaVerifyDepth(pixas, &same, &maxd);
267 return (
PIXA *)ERROR_PTR(
"pix not all 1 bpp", __func__, NULL);
270 n = pixaGetCount(pixas);
271 pixad = pixaCreate(n);
272 for (i = 0; i < n; i++) {
273 pix1 = pixaGetPix(pixas, i,
L_CLONE);
274 numaGetFValue(na, i, &width);
342 l_int32 connectivity)
344l_int32 i, n, maxd, same;
349 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
350 if (width < 1 || width > 100)
351 return (
PIXA *)ERROR_PTR(
"width not in [1 ... 100]", __func__, NULL);
352 if (connectivity != 4 && connectivity != 8)
353 return (
PIXA *)ERROR_PTR(
"connectivity not 4 or 8", __func__, NULL);
354 pixaVerifyDepth(pixas, &same, &maxd);
356 return (
PIXA *)ERROR_PTR(
"pix are not all 1 bpp", __func__, NULL);
358 n = pixaGetCount(pixas);
359 pixad = pixaCreate(n);
360 for (i = 0; i < n; i++) {
361 pix1 = pixaGetPix(pixas, i,
L_CLONE);
392 l_int32 connectivity)
396PIX *pix1, *pix2, *pixd;
398 if (!pixs || (pixGetDepth(pixs) != 1))
399 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", __func__, NULL);
400 if (width < 1 || width > 100)
401 return (
PIX *)ERROR_PTR(
"width not in [1 ... 100]", __func__, NULL);
402 if (connectivity != 4 && connectivity != 8)
403 return (
PIX *)ERROR_PTR(
"connectivity not 4 or 8", __func__, NULL);
405 if (!thinfirst && width == 1)
406 return pixCopy(NULL, pixs);
410 pix1 = pixAddBorder(pixs, border, 0);
414 pix2 = pixThinConnected(pix1,
L_THIN_FG, connectivity, 0);
416 pix2 = pixClone(pix1);
420 snprintf(buf,
sizeof(buf),
"D%d.%d", width, width);
421 pixd = pixMorphSequence(pix2, buf, 0);
422 pixCopyText(pixd, pixs);