122 #include <config_auto.h>
125 #include "allheaders.h"
159 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
160 if (pixGetColormap(pixs) != NULL)
161 return (
PIX *)ERROR_PTR(
"pixs has colormap", __func__, NULL);
162 d = pixGetDepth(pixs);
163 if (d != 8 && d != 32)
164 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", __func__, NULL);
165 if (wf < 1 || hf < 1)
166 return (
PIX *)ERROR_PTR(
"wf < 1 || hf < 1", __func__, NULL);
167 if (rank < 0.0 || rank > 1.0)
168 return (
PIX *)ERROR_PTR(
"rank must be in [0.0, 1.0]", __func__, NULL);
169 if (wf == 1 && hf == 1)
206 PIX *pixr, *pixg, *pixb, *pixrf, *pixgf, *pixbf, *pixd;
209 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
210 if (pixGetDepth(pixs) != 32)
211 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", __func__, NULL);
212 if (wf < 1 || hf < 1)
213 return (
PIX *)ERROR_PTR(
"wf < 1 || hf < 1", __func__, NULL);
214 if (rank < 0.0 || rank > 1.0)
215 return (
PIX *)ERROR_PTR(
"rank must be in [0.0, 1.0]", __func__, NULL);
216 if (wf == 1 && hf == 1)
272 l_int32 w, h, d, i, j, k, m, n, rankloc, wplt, wpld, val, sum;
273 l_int32 *histo, *histo16;
274 l_uint32 *datat, *linet, *datad, *lined;
278 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
279 if (pixGetColormap(pixs) != NULL)
280 return (
PIX *)ERROR_PTR(
"pixs has colormap", __func__, NULL);
283 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", __func__, NULL);
284 if (wf < 1 || hf < 1)
285 return (
PIX *)ERROR_PTR(
"wf < 1 || hf < 1", __func__, NULL);
286 if (rank < 0.0 || rank > 1.0)
287 return (
PIX *)ERROR_PTR(
"rank must be in [0.0, 1.0]", __func__, NULL);
288 if (wf == 1 && hf == 1)
297 if (wf % 2 && hf % 2) {
300 else if (rank == 1.0)
303 if (rank == 0.0) rank = 0.0001;
304 if (rank == 1.0) rank = 0.9999;
311 return (
PIX *)ERROR_PTR(
"pixt not made", __func__, NULL);
314 histo = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32));
315 histo16 = (l_int32 *)LEPT_CALLOC(16,
sizeof(l_int32));
316 rankloc = (l_int32)(rank * wf * hf);
323 wplt = pixGetWpl(pixt);
325 wpld = pixGetWpl(pixd);
330 for (j = 0; j < w; j++) {
332 for (n = 0; n < 256; n++)
334 for (n = 0; n < 16; n++)
337 for (i = 0; i < h; i++) {
339 lined = datad + i * wpld;
341 for (k = 0; k < hf; k++) {
342 linet = datat + (i + k) * wplt;
343 for (m = 0; m < wf; m++) {
350 linet = datat + (i - 1) * wplt;
351 for (m = 0; m < wf; m++) {
356 linet = datat + (i + hf - 1) * wplt;
357 for (m = 0; m < wf; m++) {
366 for (n = 0; n < 16; n++) {
374 L_WARNING(
"n = 16; reducing\n", __func__);
379 for (m = 0; m < 16; m++) {
390 for (i = 0; i < h; i++) {
392 for (n = 0; n < 256; n++)
394 for (n = 0; n < 16; n++)
396 lined = datad + i * wpld;
397 for (j = 0; j < w; j++) {
400 for (k = 0; k < hf; k++) {
401 linet = datat + (i + k) * wplt;
402 for (m = 0; m < wf; m++) {
409 for (k = 0; k < hf; k++) {
410 linet = datat + (i + k) * wplt;
422 for (n = 0; n < 16; n++) {
430 L_WARNING(
"n = 16; reducing\n", __func__);
435 for (m = 0; m < 16; m++) {
470 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
502 l_float32 scalefactor)
504 l_int32 w, h, d, wfs, hfs;
505 PIX *pix1, *pix2, *pixd;
508 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
509 if (pixGetColormap(pixs) != NULL)
510 return (
PIX *)ERROR_PTR(
"pixs has colormap", __func__, NULL);
511 d = pixGetDepth(pixs);
512 if (d != 8 && d != 32)
513 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", __func__, NULL);
514 if (wf < 1 || hf < 1)
515 return (
PIX *)ERROR_PTR(
"wf < 1 || hf < 1", __func__, NULL);
516 if (rank < 0.0 || rank > 1.0)
517 return (
PIX *)ERROR_PTR(
"rank must be in [0.0, 1.0]", __func__, NULL);
518 if (wf == 1 && hf == 1)
520 if (scalefactor < 0.2 || scalefactor > 0.7) {
521 L_ERROR(
"invalid scale factor; no scaling used\n", __func__);
526 wfs = L_MAX(1, (l_int32)(scalefactor * wf + 0.5));
527 hfs = L_MAX(1, (l_int32)(scalefactor * hf + 0.5));
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
PIX * pixDilateGray(PIX *pixs, l_int32 hsize, l_int32 vsize)
pixDilateGray()
PIX * pixErodeGray(PIX *pixs, l_int32 hsize, l_int32 vsize)
pixErodeGray()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
PIX * pixAddMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddMirroredBorder()
PIX * pixRankFilterGray(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank)
pixRankFilterGray()
PIX * pixMedianFilter(PIX *pixs, l_int32 wf, l_int32 hf)
pixMedianFilter()
PIX * pixRankFilterRGB(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank)
pixRankFilterRGB()
PIX * pixRankFilterWithScaling(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor)
pixRankFilterWithScaling()
PIX * pixRankFilter(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank)
pixRankFilter()
PIX * pixScaleAreaMap(PIX *pix, l_float32 scalex, l_float32 scaley)
pixScaleAreaMap()
PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleToSize()