56 #include "allheaders.h" 83 PROCNAME(
"pixFindStrokeLength");
86 return ERROR_INT(
"&length not defined", procName, 1);
89 return ERROR_INT(
"pixs not defined", procName, 1);
95 if (!tab8) LEPT_FREE(tab);
129 l_int32 i,
n, count, length, first, last;
131 l_float32 width1, width2, ratio, extra;
136 PROCNAME(
"pixFindStrokeWidth");
139 return ERROR_INT(
"&width not defined", procName, 1);
142 return ERROR_INT(
"pixs not defined", procName, 1);
153 width1 = (l_float32)count / (l_float32)length;
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.0 * (i - 1.0 + ratio + extra);
178 fprintf(stderr,
"width1 = %5.2f, width2 = %5.2f\n", width1, width2);
181 *pwidth = (width1 + width2) / 2.0;
183 if (!tab8) LEPT_FREE(tab);
213 l_int32 i,
n, same, maxd;
219 PROCNAME(
"pixaFindStrokeWidth");
222 return (
NUMA *)ERROR_PTR(
"pixa not defined", procName, NULL);
225 return (
NUMA *)ERROR_PTR(
"pix not all 1 bpp", procName, NULL);
231 for (i = 0; i <
n; i++) {
238 if (!tab8) LEPT_FREE(tab);
257 l_int32 i,
n, same, maxd;
263 PROCNAME(
"pixaModifyStrokeWidth");
266 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
268 return (
PIXA *)ERROR_PTR(
"target width < 1", procName, NULL);
271 return (
PIXA *)ERROR_PTR(
"pix not all 1 bpp", procName, NULL);
276 for (i = 0; i <
n; i++) {
305 PROCNAME(
"pixModifyStrokeWidth");
307 if (!pixs || (pixGetDepth(pixs) != 1))
308 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
310 return (
PIX *)ERROR_PTR(
"target width < 1", procName, NULL);
313 if (diff == 0)
return pixCopy(NULL, pixs);
315 size = L_ABS(diff) + 1;
317 snprintf(buf,
sizeof(buf),
"e%d.%d", size, size);
319 snprintf(buf,
sizeof(buf),
"d%d.%d", size, size);
348 l_int32 connectivity)
350 l_int32 i,
n, maxd, same;
354 PROCNAME(
"pixaSetStrokeWidth");
357 return (
PIXA *)ERROR_PTR(
"pixas not defined", procName, NULL);
358 if (width < 1 || width > 100)
359 return (
PIXA *)ERROR_PTR(
"width not in [1 ... 100]", procName, NULL);
360 if (connectivity != 4 && connectivity != 8)
361 return (
PIXA *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
364 return (
PIXA *)ERROR_PTR(
"pix are not all 1 bpp", procName, NULL);
368 for (i = 0; i <
n; i++) {
400 l_int32 connectivity)
404 PIX *pix1, *pix2, *pixd;
406 PROCNAME(
"pixSetStrokeWidth");
408 if (!pixs || (pixGetDepth(pixs) != 1))
409 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
410 if (width < 1 || width > 100)
411 return (
PIX *)ERROR_PTR(
"width not in [1 ... 100]", procName, NULL);
412 if (connectivity != 4 && connectivity != 8)
413 return (
PIX *)ERROR_PTR(
"connectivity not 4 or 8", procName, NULL);
415 if (!thinfirst && width == 1)
430 snprintf(buf,
sizeof(buf),
"D%d.%d", width, width);
432 pixCopyText(pixd, pixs);
NUMA * pixGetGrayHistogram(PIX *pixs, l_int32 factor)
pixGetGrayHistogram()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_int32 lept_roundftoi(l_float32 fval)
lept_roundftoi()
l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok numaGetNonzeroRange(NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast)
numaGetNonzeroRange()
l_ok numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()
NUMA * numaCreate(l_int32 n)
numaCreate()
NUMA * numaClipToInterval(NUMA *nas, l_int32 first, l_int32 last)
numaClipToInterval()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
PIX * pixThinConnected(PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters)
pixThinConnected()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
PIXA * pixaModifyStrokeWidth(PIXA *pixas, l_float32 targetw)
pixaModifyStrokeWidth()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
PIXA * pixaSetStrokeWidth(PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixaSetStrokeWidth()
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()
PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep)
pixMorphSequence()
l_ok pixCountPixels(PIX *pixs, l_int32 *pcount, l_int32 *tab8)
pixCountPixels()
l_int32 * makePixelSumTab8(void)
makePixelSumTab8()
PIX * pixSetStrokeWidth(PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity)
pixSetStrokeWidth()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixFindStrokeWidth(PIX *pixs, l_float32 thresh, l_int32 *tab8, l_float32 *pwidth, NUMA **pnahisto)
pixFindStrokeWidth()
void numaDestroy(NUMA **pna)
numaDestroy()
PIX * pixModifyStrokeWidth(PIX *pixs, l_float32 width, l_float32 targetw)
pixModifyStrokeWidth()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
PIX * pixDistanceFunction(PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond)
pixDistanceFunction()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
PIX * pixExtractBoundary(PIX *pixs, l_int32 type)
pixExtractBoundary()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()