106 if ((sela = selaCreate(0)) == NULL)
107 return (
SELA *)ERROR_PTR(
"sela not made", __func__, NULL);
113 for (i = 0; i < num_linear; i++) {
114 size = basic_linear[i];
115 sel = selCreateBrick(1, size, 0, size / 2, 1);
117 selaAddSel(sela, sel, name, 0);
119 for (i = 0; i < num_linear; i++) {
120 size = basic_linear[i];
121 sel = selCreateBrick(size, 1, size / 2, 0, 1);
123 selaAddSel(sela, sel, name, 0);
129 for (i = 2; i <= 5; i++) {
130 sel = selCreateBrick(i, i, i / 2, i / 2, 1);
132 selaAddSel(sela, sel, name, 0);
140 sel = selCreateBrick(2, 2, 0, 0, 1);
141 selSetElement(sel, 0, 0, 0);
142 selSetElement(sel, 1, 1, 0);
143 selaAddSel(sela, sel,
"sel_2dp", 0);
147 sel = selCreateBrick(2, 2, 0, 0, 1);
148 selSetElement(sel, 0, 1, 0);
149 selSetElement(sel, 1, 0, 0);
150 selaAddSel(sela, sel,
"sel_2dm", 0);
153 sel = selCreate(5, 5,
"sel_5dp");
154 selSetOrigin(sel, 2, 2);
155 selSetElement(sel, 0, 4, 1);
156 selSetElement(sel, 1, 3, 1);
157 selSetElement(sel, 2, 2, 1);
158 selSetElement(sel, 3, 1, 1);
159 selSetElement(sel, 4, 0, 1);
160 selaAddSel(sela, sel,
"sel_5dp", 0);
163 sel = selCreate(5, 5,
"sel_5dm");
164 selSetOrigin(sel, 2, 2);
165 selSetElement(sel, 0, 0, 1);
166 selSetElement(sel, 1, 1, 1);
167 selSetElement(sel, 2, 2, 1);
168 selSetElement(sel, 3, 3, 1);
169 selSetElement(sel, 4, 4, 1);
170 selaAddSel(sela, sel,
"sel_5dm", 0);
191 if ((sela = selaCreate(0)) == NULL)
192 return (
SELA *)ERROR_PTR(
"sela not made", __func__, NULL);
196 sel = selCreateBrick(3, 3, 1, 1, 2);
197 selaAddSel(sela, sel,
"sel_bad", 0);
204 sel = selCreateBrick(3, 3, 1, 1, SEL_MISS);
205 selSetElement(sel, 1, 1, SEL_HIT);
206 selaAddSel(sela, sel,
"sel_3hm", 0);
211 sel = selCreateBrick(2, 3, 0, 1, SEL_HIT);
212 selSetElement(sel, 1, 0, SEL_MISS);
213 selSetElement(sel, 1, 1, SEL_MISS);
214 selSetElement(sel, 1, 2, SEL_MISS);
215 selaAddSel(sela, sel,
"sel_3de", 0);
217 sel = selCreateBrick(2, 3, 1, 1, SEL_HIT);
218 selSetElement(sel, 0, 0, SEL_MISS);
219 selSetElement(sel, 0, 1, SEL_MISS);
220 selSetElement(sel, 0, 2, SEL_MISS);
221 selaAddSel(sela, sel,
"sel_3ue", 0);
223 sel = selCreateBrick(3, 2, 1, 0, SEL_HIT);
224 selSetElement(sel, 0, 1, SEL_MISS);
225 selSetElement(sel, 1, 1, SEL_MISS);
226 selSetElement(sel, 2, 1, SEL_MISS);
227 selaAddSel(sela, sel,
"sel_3re", 0);
229 sel = selCreateBrick(3, 2, 1, 1, SEL_HIT);
230 selSetElement(sel, 0, 0, SEL_MISS);
231 selSetElement(sel, 1, 0, SEL_MISS);
232 selSetElement(sel, 2, 0, SEL_MISS);
233 selaAddSel(sela, sel,
"sel_3le", 0);
238 sel = selCreateBrick(13, 6, 6, 2, SEL_DONT_CARE);
239 selSetElement(sel, 0, 3, SEL_MISS);
240 selSetElement(sel, 0, 5, SEL_HIT);
241 selSetElement(sel, 4, 2, SEL_MISS);
242 selSetElement(sel, 4, 4, SEL_HIT);
243 selSetElement(sel, 8, 1, SEL_MISS);
244 selSetElement(sel, 8, 3, SEL_HIT);
245 selSetElement(sel, 12, 0, SEL_MISS);
246 selSetElement(sel, 12, 2, SEL_HIT);
247 selaAddSel(sela, sel,
"sel_sl1", 0);
253 sel = selCreateBrick(4, 4, 1, 1, SEL_MISS);
254 selSetElement(sel, 1, 1, SEL_DONT_CARE);
255 selSetElement(sel, 1, 2, SEL_DONT_CARE);
256 selSetElement(sel, 2, 1, SEL_DONT_CARE);
257 selSetElement(sel, 1, 3, SEL_HIT);
258 selSetElement(sel, 2, 2, SEL_HIT);
259 selSetElement(sel, 2, 3, SEL_HIT);
260 selSetElement(sel, 3, 1, SEL_HIT);
261 selSetElement(sel, 3, 2, SEL_HIT);
262 selSetElement(sel, 3, 3, SEL_HIT);
263 selaAddSel(sela, sel,
"sel_ulc", 0);
265 sel = selCreateBrick(4, 4, 1, 2, SEL_MISS);
266 selSetElement(sel, 1, 1, SEL_DONT_CARE);
267 selSetElement(sel, 1, 2, SEL_DONT_CARE);
268 selSetElement(sel, 2, 2, SEL_DONT_CARE);
269 selSetElement(sel, 1, 0, SEL_HIT);
270 selSetElement(sel, 2, 0, SEL_HIT);
271 selSetElement(sel, 2, 1, SEL_HIT);
272 selSetElement(sel, 3, 0, SEL_HIT);
273 selSetElement(sel, 3, 1, SEL_HIT);
274 selSetElement(sel, 3, 2, SEL_HIT);
275 selaAddSel(sela, sel,
"sel_urc", 0);
277 sel = selCreateBrick(4, 4, 2, 1, SEL_MISS);
278 selSetElement(sel, 1, 1, SEL_DONT_CARE);
279 selSetElement(sel, 2, 1, SEL_DONT_CARE);
280 selSetElement(sel, 2, 2, SEL_DONT_CARE);
281 selSetElement(sel, 0, 1, SEL_HIT);
282 selSetElement(sel, 0, 2, SEL_HIT);
283 selSetElement(sel, 0, 3, SEL_HIT);
284 selSetElement(sel, 1, 2, SEL_HIT);
285 selSetElement(sel, 1, 3, SEL_HIT);
286 selSetElement(sel, 2, 3, SEL_HIT);
287 selaAddSel(sela, sel,
"sel_llc", 0);
289 sel = selCreateBrick(4, 4, 2, 2, SEL_MISS);
290 selSetElement(sel, 1, 2, SEL_DONT_CARE);
291 selSetElement(sel, 2, 1, SEL_DONT_CARE);
292 selSetElement(sel, 2, 2, SEL_DONT_CARE);
293 selSetElement(sel, 0, 0, SEL_HIT);
294 selSetElement(sel, 0, 1, SEL_HIT);
295 selSetElement(sel, 0, 2, SEL_HIT);
296 selSetElement(sel, 1, 0, SEL_HIT);
297 selSetElement(sel, 1, 1, SEL_HIT);
298 selSetElement(sel, 2, 0, SEL_HIT);
299 selaAddSel(sela, sel,
"sel_lrc", 0);
437l_int32 i, j, w, xc, yc;
438l_float64 pi, halfpi, radincr, radang;
440PIX *pixc, *pixm, *pixt;
442PTA *pta1, *pta2, *pta3, *pta4;
446 return (
SELA *)ERROR_PTR(
"hlsize not > 0", __func__, NULL);
447 if (norient < 1 || norient > 8)
448 return (
SELA *)ERROR_PTR(
"norient not in [1, ... 8]", __func__, NULL);
451 if ((sela = selaCreate(0)) == NULL)
452 return (
SELA *)ERROR_PTR(
"sela not made", __func__, NULL);
456 halfpi = 3.1415926535 / 2.0;
457 radincr = halfpi / (l_float64)norient;
458 w = (l_int32)(2.2 * (L_MAX(hlsize, mdist) + 0.5));
464 pixa = pixaCreate(norient);
465 for (i = 0; i < norient; i++) {
468 pixc = pixCreate(w, w, 32);
472 pixm = pixCreate(w, w, 1);
473 radang = (l_float32)i * radincr;
474 pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang);
475 pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + halfpi);
476 pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi);
477 pta4 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi + halfpi);
478 ptaJoin(pta1, pta2, 0, -1);
479 ptaJoin(pta1, pta3, 0, -1);
480 ptaJoin(pta1, pta4, 0, -1);
482 pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000);
489 for (j = 0; j < 4; j++) {
490 angle = radang + (j - 0.5) * halfpi;
491 pixSetPixel(pixc, xc + (l_int32)(mdist * cos(angle)),
492 yc + (l_int32)(mdist * sin(angle)), 0xff000000);
496 pixSetPixel(pixc, xc, yc, 0x00550000);
499 sel = selCreateFromColorPix(pixc, NULL);
500 snprintf(name,
sizeof(name),
"sel_cross_%d", i);
501 selaAddSel(sela, sel, name, 0);
504 pixt = pixScaleBySampling(pixc, 10.0, 10.0);
513 lept_mkdir(
"lept/sel");
514 pixaGetPixDimensions(pixa, 0, &w, NULL, NULL);
515 pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 1, 0, 10, 2);
516 pixWriteDebug(
"/tmp/lept/sel/xsel1.png", pixt, IFF_PNG);
517 pixDisplay(pixt, 0, 100);
519 pixt = selaDisplayInPix(sela, 15, 2, 20, 1);
520 pixWriteDebug(
"/tmp/lept/sel/xsel2.png", pixt, IFF_PNG);
521 pixDisplay(pixt, 500, 100);
523 selaWriteStream(stderr, sela);
560l_int32 i, j, k, w, xc, yc;
561l_float64 pi, halfpi, radincr, jang, radang;
562l_float64 angle[3], dist[3];
563PIX *pixc, *pixm, *pixt;
565PTA *pta1, *pta2, *pta3;
569 return (
SELA *)ERROR_PTR(
"hlsizel not > 1", __func__, NULL);
570 if (norient < 1 || norient > 8)
571 return (
SELA *)ERROR_PTR(
"norient not in [1, ... 8]", __func__, NULL);
574 if ((sela = selaCreate(0)) == NULL)
575 return (
SELA *)ERROR_PTR(
"sela not made", __func__, NULL);
579 halfpi = 3.1415926535 / 2.0;
580 radincr = halfpi / (l_float32)norient;
581 w = (l_int32)(2.4 * (L_MAX(hlsize, mdist) + 0.5));
587 pixa = pixaCreate(4 * norient);
588 for (i = 0; i < norient; i++) {
589 for (j = 0; j < 4; j++) {
590 jang = (l_float32)j * halfpi;
593 pixc = pixCreate(w, w, 32);
597 pixm = pixCreate(w, w, 1);
598 radang = (l_float32)i * radincr;
599 pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang);
600 pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1,
601 jang + radang + halfpi);
602 pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1,
604 ptaJoin(pta1, pta2, 0, -1);
605 ptaJoin(pta1, pta3, 0, -1);
607 pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000);
613 angle[0] = radang + jang - halfpi;
614 angle[1] = radang + jang + 0.5 * halfpi;
615 angle[2] = radang + jang + 1.5 * halfpi;
616 dist[0] = 0.8 * mdist;
617 dist[1] = dist[2] = mdist;
618 for (k = 0; k < 3; k++) {
619 pixSetPixel(pixc, xc + (l_int32)(dist[k] * cos(angle[k])),
620 yc + (l_int32)(dist[k] * sin(angle[k])),
625 pixSetPixel(pixc, xc, yc, 0x00550000);
628 sel = selCreateFromColorPix(pixc, NULL);
629 snprintf(name,
sizeof(name),
"sel_cross_%d", 4 * i + j);
630 selaAddSel(sela, sel, name, 0);
633 pixt = pixScaleBySampling(pixc, 10.0, 10.0);
643 lept_mkdir(
"lept/sel");
644 pixaGetPixDimensions(pixa, 0, &w, NULL, NULL);
645 pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 4, 0, 10, 2);
646 pixWriteDebug(
"/tmp/lept/sel/tsel1.png", pixt, IFF_PNG);
647 pixDisplay(pixt, 0, 100);
649 pixt = selaDisplayInPix(sela, 15, 2, 20, 4);
650 pixWriteDebug(
"/tmp/lept/sel/tsel2.png", pixt, IFF_PNG);
651 pixDisplay(pixt, 500, 100);
653 selaWriteStream(stderr, sela);
756 if (!sela) sela = selaCreate(9);
758 sel = selCreateFromString(sel_4_1, 3, 3,
"sel_4_1");
759 selaAddSel(sela, sel, NULL, 0);
760 sel = selCreateFromString(sel_4_2, 3, 3,
"sel_4_2");
761 selaAddSel(sela, sel, NULL, 0);
762 sel = selCreateFromString(sel_4_3, 3, 3,
"sel_4_3");
763 selaAddSel(sela, sel, NULL, 0);
764 sel = selCreateFromString(sel_4_4, 3, 3,
"sel_4_4");
765 selaAddSel(sela, sel, NULL, 0);
766 sel = selCreateFromString(sel_4_5, 3, 3,
"sel_4_5");
767 selaAddSel(sela, sel, NULL, 0);
768 sel = selCreateFromString(sel_4_6, 3, 3,
"sel_4_6");
769 selaAddSel(sela, sel, NULL, 0);
770 sel = selCreateFromString(sel_4_7, 3, 3,
"sel_4_7");
771 selaAddSel(sela, sel, NULL, 0);
772 sel = selCreateFromString(sel_4_8, 3, 3,
"sel_4_8");
773 selaAddSel(sela, sel, NULL, 0);
774 sel = selCreateFromString(sel_4_9, 3, 3,
"sel_4_9");
775 selaAddSel(sela, sel, NULL, 0);
797 if (!sela) sela = selaCreate(9);
799 sel = selCreateFromString(sel_8_1, 3, 3,
"sel_8_1");
800 selaAddSel(sela, sel, NULL, 0);
801 sel = selCreateFromString(sel_8_2, 3, 3,
"sel_8_2");
802 selaAddSel(sela, sel, NULL, 0);
803 sel = selCreateFromString(sel_8_3, 3, 3,
"sel_8_3");
804 selaAddSel(sela, sel, NULL, 0);
805 sel = selCreateFromString(sel_8_4, 3, 3,
"sel_8_4");
806 selaAddSel(sela, sel, NULL, 0);
807 sel = selCreateFromString(sel_8_5, 3, 3,
"sel_8_5");
808 selaAddSel(sela, sel, NULL, 0);
809 sel = selCreateFromString(sel_8_6, 3, 3,
"sel_8_6");
810 selaAddSel(sela, sel, NULL, 0);
811 sel = selCreateFromString(sel_8_7, 3, 3,
"sel_8_7");
812 selaAddSel(sela, sel, NULL, 0);
813 sel = selCreateFromString(sel_8_8, 3, 3,
"sel_8_8");
814 selaAddSel(sela, sel, NULL, 0);
815 sel = selCreateFromString(sel_8_9, 3, 3,
"sel_8_9");
816 selaAddSel(sela, sel, NULL, 0);