62 #include <config_auto.h> 65 #include "allheaders.h" 97 l_int32
w,
h, d, i, j, wplt, wpld, gx, gy, vald;
98 l_int32 val1, val2, val3, val4, val5, val6, val7, val8, val9;
99 l_uint32 *datat, *linet, *datad, *lined;
102 PROCNAME(
"pixSobelEdgeFilter");
105 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
108 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
111 return (
PIX *)ERROR_PTR(
"invalid orientflag", procName, NULL);
115 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
120 wplt = pixGetWpl(pixt);
122 wpld = pixGetWpl(pixd);
123 for (i = 0; i <
h; i++) {
124 linet = datat + i * wplt;
125 lined = datad + i * wpld;
126 for (j = 0; j <
w; j++) {
149 vald = L_ABS(val1 + 2 * val4 + val7
150 - val3 - 2 * val6 - val9) >> 3;
152 vald = L_ABS(val1 + 2 * val2 + val3 - val7
153 - 2 * val8 - val9) >> 3;
155 gx = L_ABS(val1 + 2 * val2 + val3 - val7
156 - 2 * val8 - val9) >> 3;
157 gy = L_ABS(val1 + 2 * val4 + val7
158 - val3 - 2 * val6 - val9) >> 3;
159 vald = L_MIN(255, gx + gy);
205 l_int32
w,
h, d, i, j, wpls, wpld;
206 l_int32 cval, rval, bval, val, lgrad, rgrad, tgrad, bgrad;
207 l_uint32 *datas, *lines, *datad, *lined;
210 PROCNAME(
"pixTwoSidedEdgeFilter");
213 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
216 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
218 return (
PIX *)ERROR_PTR(
"invalid orientflag", procName, NULL);
222 wpls = pixGetWpl(
pixs);
224 wpld = pixGetWpl(pixd);
226 for (i = 0; i <
h; i++) {
227 lines = datas + i * wpls;
228 lined = datad + i * wpld;
231 for (j = 1; j <
w - 1; j++) {
234 if (lgrad * rgrad > 0) {
236 val = -L_MAX(lgrad, rgrad);
238 val = L_MIN(lgrad, rgrad);
247 for (j = 0; j <
w; j++) {
248 lines = datas + wpls;
251 for (i = 1; i <
h - 1; i++) {
253 lined = datad + i * wpld;
256 if (tgrad * bgrad > 0) {
258 val = -L_MAX(tgrad, bgrad);
260 val = L_MIN(tgrad, bgrad);
319 const char *debugfile)
321 l_int32 i, n, val, nval, diff, njumps, jumpsum, nreversal;
324 PROCNAME(
"pixMeasureEdgeSmoothness");
326 if (pjpl) *pjpl = 0.0;
327 if (pjspl) *pjspl = 0.0;
328 if (prpl) *prpl = 0.0;
329 if (!pjpl && !pjspl && !prpl && !debugfile)
330 return ERROR_INT(
"no output requested", procName, 1);
331 if (!
pixs || pixGetDepth(
pixs) != 1)
332 return ERROR_INT(
"pixs not defined or not 1 bpp", procName, 1);
335 return ERROR_INT(
"invalid side", procName, 1);
337 return ERROR_INT(
"invalid minjump; must be >= 1", procName, 1);
339 return ERROR_INT(
"invalid minreversal; must be >= 1", procName, 1);
342 return ERROR_INT(
"edge profile not made", procName, 1);
352 for (i = 1; i < n; i++) {
354 diff = L_ABS(nval - val);
355 if (diff >= minjump) {
362 *pjpl = (l_float32)njumps / (l_float32)(n - 1);
364 *pjspl = (l_float32)jumpsum / (l_float32)(n - 1);
370 *prpl = (l_float32)nreversal / (l_float32)(n - 1);
391 const char *debugfile)
393 l_int32 x, y,
w,
h, loc, index, ival;
399 PROCNAME(
"pixGetEdgeProfile");
401 if (!
pixs || pixGetDepth(
pixs) != 1)
402 return (
NUMA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
405 return (
NUMA *)ERROR_PTR(
"invalid side", procName, NULL);
414 loc = (loc ==
w - 1) ? 0 : loc + 1;
416 for (y = 1; y <
h; y++) {
422 loc = (loc ==
w - 1) ? 0 : loc + 1;
429 loc = (loc == 0) ?
w - 1 : loc - 1;
431 for (y = 1; y <
h; y++) {
437 loc = (loc == 0) ?
w - 1 : loc - 1;
444 loc = (loc ==
h - 1) ? 0 : loc + 1;
446 for (x = 1; x <
w; x++) {
452 loc = (loc ==
h - 1) ? 0 : loc + 1;
459 loc = (loc == 0) ?
h - 1 : loc - 1;
461 for (x = 1; x <
w; x++) {
467 loc = (loc == 0) ?
h - 1 : loc - 1;
475 cmap = pixGetColormap(pixt);
479 for (y = 0; y <
h; y++) {
484 for (x = 0; x <
w; x++) {
489 pixWrite(debugfile, pixt, IFF_PNG);
520 pixGetLastOffPixelInRun(
PIX *
pixs,
529 PROCNAME(
"pixGetLastOffPixelInRun");
532 return ERROR_INT(
"&loc not defined", procName, 1);
534 if (!
pixs || pixGetDepth(
pixs) != 1)
535 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
538 return ERROR_INT(
"invalid side", procName, 1);
542 for (loc = x; loc <
w; loc++) {
549 for (loc = x; loc >= 0; loc--) {
557 for (loc = y; loc <
h; loc++) {
565 for (loc = y; loc >= 0; loc--) {
594 pixGetLastOnPixelInRun(
PIX *
pixs,
603 PROCNAME(
"pixLastOnPixelInRun");
606 return ERROR_INT(
"&loc not defined", procName, 1);
608 if (!
pixs || pixGetDepth(
pixs) != 1)
609 return ERROR_INT(
"pixs undefined or not 1 bpp", procName, 1);
612 return ERROR_INT(
"invalid side", procName, 1);
616 for (loc = x; loc <
w; loc++) {
623 for (loc = x; loc >= 0; loc--) {
631 for (loc = y; loc <
h; loc++) {
639 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()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
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 * 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()
PIX * pixSobelEdgeFilter(PIX *pixs, l_int32 orientflag)
pixSobelEdgeFilter()
l_int32 pixcmapGetCount(const PIXCMAP *cmap)
pixcmapGetCount()
l_ok pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapAddColor()