57 #include <config_auto.h>
60 #include "allheaders.h"
87 PROCNAME(
"pixFindStrokeLength");
90 return ERROR_INT(
"&length not defined", procName, 1);
93 return ERROR_INT(
"pixs not defined", procName, 1);
99 if (!tab8) LEPT_FREE(tab);
133 l_int32 i, n, count, length, first, last;
135 l_float32 width1, width2, ratio, extra;
140 PROCNAME(
"pixFindStrokeWidth");
143 return ERROR_INT(
"&width not defined", procName, 1);
146 return ERROR_INT(
"pixs not defined", procName, 1);
157 width1 = (l_float32)count / (l_float32)length;
172 for (i = n - 1; i > 0; i--) {
173 ratio = fa[i] / fa[1];
174 if (ratio > thresh)
break;
180 extra = (i < n - 1) ? fa[i + 1] / fa[1] : 0;
181 width2 = 2.0 * (i - 1.0 + ratio + extra);
182 lept_stderr(
"width1 = %5.2f, width2 = %5.2f\n", width1, width2);
185 *pwidth = (width1 + width2) / 2.0;
187 if (!tab8) LEPT_FREE(tab);
217 l_int32 i, n, same, maxd;
223 PROCNAME(
"pixaFindStrokeWidth");
226 return (
NUMA *)ERROR_PTR(
"pixa not defined", procName, NULL);
229 return (
NUMA *)ERROR_PTR(
"pix not all 1 bpp", procName, NULL);
235 for (i = 0; i < n; i++) {
242 if (!tab8) LEPT_FREE(tab);
261 l_int32 i, n, same, maxd;
267 PROCNAME(
"pixaModifyStrokeWidth");
270 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
272 return (
PIXA *)ERROR_PTR(
"target width < 1", procName, NULL);
275 return (
PIXA *)ERROR_PTR(
"pix not all 1 bpp", procName, NULL);
280 for (i = 0; i < n; i++) {
309 PROCNAME(
"pixModifyStrokeWidth");
311 if (!pixs || (pixGetDepth(pixs) != 1))
312 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
314 return (
PIX *)ERROR_PTR(
"target width < 1", procName, NULL);
317 if (diff == 0)
return pixCopy(NULL, pixs);
319 size = L_ABS(diff) + 1;
321 snprintf(buf,
sizeof(buf),
"e%d.%d", size, size);
323 snprintf(buf,
sizeof(buf),
"d%d.%d", size, size);
352 l_int32 connectivity)
354 l_int32 i, n, maxd, same;
358 PROCNAME(
"pixaSetStrokeWidth");
361 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
362 if (width < 1 || width > 100)
363 return (
PIXA *)ERROR_PTR(
"width not in [1 ... 100]", procName, NULL);
364 if (connectivity != 4 && connectivity != 8)
365 return (
PIXA *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
368 return (
PIXA *)ERROR_PTR(
"pix are not all 1 bpp", procName, NULL);
372 for (i = 0; i < n; i++) {
404 l_int32 connectivity)
408 PIX *pix1, *pix2, *pixd;
410 PROCNAME(
"pixSetStrokeWidth");
412 if (!pixs || (pixGetDepth(pixs) != 1))
413 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
414 if (width < 1 || width > 100)
415 return (
PIX *)ERROR_PTR(
"width not in [1 ... 100]", procName, NULL);
416 if (connectivity != 4 && connectivity != 8)
417 return (
PIX *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
419 if (!thinfirst && width == 1)
434 snprintf(buf,
sizeof(buf),
"D%d.%d", width, width);
436 pixCopyText(pixd, pixs);
PIX * pixThinConnected(PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters)
pixThinConnected()
PIX * pixExtractBoundary(PIX *pixs, l_int32 type)
pixExtractBoundary()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_ok numaWriteStderr(NUMA *na)
numaWriteStderr()
NUMA * numaCreate(l_int32 n)
numaCreate()
void numaDestroy(NUMA **pna)
numaDestroy()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
NUMA * numaClipToInterval(NUMA *nas, l_int32 first, l_int32 last)
numaClipToInterval()
l_ok numaGetNonzeroRange(NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast)
numaGetNonzeroRange()
void pixDestroy(PIX **ppix)
pixDestroy()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
NUMA * pixGetGrayHistogram(PIX *pixs, l_int32 factor)
pixGetGrayHistogram()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixDistanceFunction(PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond)
pixDistanceFunction()
PIX * pixSetStrokeWidth(PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixSetStrokeWidth()
NUMA * pixaFindStrokeWidth(PIXA *pixa, l_float32 thresh, l_int32 *tab8, l_int32 debug)
pixaFindStrokeWidth()
l_ok pixFindStrokeLength(PIX *pixs, l_int32 *tab8, l_int32 *plength)
pixFindStrokeLength()
PIXA * pixaSetStrokeWidth(PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixaSetStrokeWidth()
l_ok pixFindStrokeWidth(PIX *pixs, l_float32 thresh, l_int32 *tab8, l_float32 *pwidth, NUMA **pnahisto)
pixFindStrokeWidth()
PIXA * pixaModifyStrokeWidth(PIXA *pixas, l_float32 targetw)
pixaModifyStrokeWidth()
PIX * pixModifyStrokeWidth(PIX *pixs, l_float32 width, l_float32 targetw)
pixModifyStrokeWidth()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_int32 lept_roundftoi(l_float32 fval)
lept_roundftoi()