61 #include "allheaders.h" 94 l_int32
w,
h, d, i, j, wplt, wpld, gx, gy, vald;
95 l_int32 val1, val2, val3, val4, val5, val6, val7, val8, val9;
96 l_uint32 *datat, *linet, *datad, *lined;
99 PROCNAME(
"pixSobelEdgeFilter");
102 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
105 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
108 return (
PIX *)ERROR_PTR(
"invalid orientflag", procName, NULL);
112 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
117 wplt = pixGetWpl(pixt);
119 wpld = pixGetWpl(pixd);
120 for (i = 0; i <
h; i++) {
121 linet = datat + i * wplt;
122 lined = datad + i * wpld;
123 for (j = 0; j <
w; j++) {
146 vald = L_ABS(val1 + 2 * val4 + val7
147 - val3 - 2 * val6 - val9) >> 3;
149 vald = L_ABS(val1 + 2 * val2 + val3 - val7
150 - 2 * val8 - val9) >> 3;
152 gx = L_ABS(val1 + 2 * val2 + val3 - val7
153 - 2 * val8 - val9) >> 3;
154 gy = L_ABS(val1 + 2 * val4 + val7
155 - val3 - 2 * val6 - val9) >> 3;
156 vald = L_MIN(255, gx + gy);
202 l_int32
w,
h, d, i, j, wpls, wpld;
203 l_int32 cval, rval, bval, val, lgrad, rgrad, tgrad, bgrad;
204 l_uint32 *datas, *lines, *datad, *lined;
207 PROCNAME(
"pixTwoSidedEdgeFilter");
210 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
213 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
215 return (
PIX *)ERROR_PTR(
"invalid orientflag", procName, NULL);
219 wpls = pixGetWpl(
pixs);
221 wpld = pixGetWpl(pixd);
223 for (i = 0; i <
h; i++) {
224 lines = datas + i * wpls;
225 lined = datad + i * wpld;
228 for (j = 1; j <
w - 1; j++) {
231 if (lgrad * rgrad > 0) {
233 val = -L_MAX(lgrad, rgrad);
235 val = L_MIN(lgrad, rgrad);
244 for (j = 0; j <
w; j++) {
245 lines = datas + wpls;
248 for (i = 1; i <
h - 1; i++) {
250 lined = datad + i * wpld;
253 if (tgrad * bgrad > 0) {
255 val = -L_MAX(tgrad, bgrad);
257 val = L_MIN(tgrad, bgrad);
316 const char *debugfile)
318 l_int32 i, n, val, nval, diff, njumps, jumpsum, nreversal;
321 PROCNAME(
"pixMeasureEdgeSmoothness");
323 if (pjpl) *pjpl = 0.0;
324 if (pjspl) *pjspl = 0.0;
325 if (prpl) *prpl = 0.0;
326 if (!pjpl && !pjspl && !prpl && !debugfile)
327 return ERROR_INT(
"no output requested", procName, 1);
328 if (!
pixs || pixGetDepth(
pixs) != 1)
329 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
332 return ERROR_INT(
"invalid side", procName, 1);
334 return ERROR_INT(
"invalid minjump; must be >= 1", procName, 1);
336 return ERROR_INT(
"invalid minreversal; must be >= 1", procName, 1);
339 return ERROR_INT(
"edge profile not made", procName, 1);
349 for (i = 1; i < n; i++) {
351 diff = L_ABS(nval - val);
352 if (diff >= minjump) {
359 *pjpl = (l_float32)njumps / (l_float32)(n - 1);
361 *pjspl = (l_float32)jumpsum / (l_float32)(n - 1);
367 *prpl = (l_float32)nreversal / (l_float32)(n - 1);
388 const char *debugfile)
390 l_int32 x, y,
w,
h, loc, index, ival;
396 PROCNAME(
"pixGetEdgeProfile");
398 if (!
pixs || pixGetDepth(
pixs) != 1)
399 return (
NUMA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
402 return (
NUMA *)ERROR_PTR(
"invalid side", procName, NULL);
411 loc = (loc ==
w - 1) ? 0 : loc + 1;
413 for (y = 1; y <
h; y++) {
419 loc = (loc ==
w - 1) ? 0 : loc + 1;
426 loc = (loc == 0) ?
w - 1 : loc - 1;
428 for (y = 1; y <
h; y++) {
434 loc = (loc == 0) ?
w - 1 : loc - 1;
441 loc = (loc ==
h - 1) ? 0 : loc + 1;
443 for (x = 1; x <
w; x++) {
449 loc = (loc ==
h - 1) ? 0 : loc + 1;
456 loc = (loc == 0) ?
h - 1 : loc - 1;
458 for (x = 1; x <
w; x++) {
464 loc = (loc == 0) ?
h - 1 : loc - 1;
472 cmap = pixGetColormap(pixt);
476 for (y = 0; y <
h; y++) {
481 for (x = 0; x <
w; x++) {
486 pixWrite(debugfile, pixt, IFF_PNG);
515 pixGetLastOffPixelInRun(
PIX *
pixs,
524 PROCNAME(
"pixGetLastOffPixelInRun");
527 return ERROR_INT(
"&loc not defined", procName, 1);
529 if (!
pixs || pixGetDepth(
pixs) != 1)
530 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
533 return ERROR_INT(
"invalid side", procName, 1);
537 for (loc = x; loc <
w; loc++) {
544 for (loc = x; loc >= 0; loc--) {
552 for (loc = y; loc <
h; loc++) {
560 for (loc = y; loc >= 0; loc--) {
587 pixGetLastOnPixelInRun(
PIX *
pixs,
596 PROCNAME(
"pixLastOnPixelInRun");
599 return ERROR_INT(
"&loc not defined", procName, 1);
601 if (!
pixs || pixGetDepth(
pixs) != 1)
602 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
605 return ERROR_INT(
"invalid side", procName, 1);
609 for (loc = x; loc <
w; loc++) {
616 for (loc = x; loc >= 0; loc--) {
624 for (loc = y; loc <
h; loc++) {
632 for (loc = y; loc >= 0; loc--) {
NUMA * pixGetEdgeProfile(PIX *pixs, l_int32 side, const char *debugfile)
pixGetEdgeProfile()
NUMA * numaFindExtrema(NUMA *nas, l_float32 delta, NUMA **pnav)
numaFindExtrema()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixAddMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddMirroredBorder()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixTwoSidedEdgeFilter(PIX *pixs, l_int32 orientflag)
pixTwoSidedEdgeFilter()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_BYTE(pdata, n)
void pixDestroy(PIX **ppix)
pixDestroy()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_ok pixMeasureEdgeSmoothness(PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile)
pixMeasureEdgeSmoothness()
l_int32 pixcmapGetCount(PIXCMAP *cmap)
pixcmapGetCount()
PIX * pixSobelEdgeFilter(PIX *pixs, l_int32 orientflag)
pixSobelEdgeFilter()
l_ok pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapAddColor()