1 module dcv.features.corner.fast.fast_12; 2 3 /* 4 Authors: Edward Rosten 5 Copyright: Copyright (c) 2006, 2008 Edward Rosten, All rights reserved. 6 7 Additional notice: 8 Module integrates FAST implementation present in the Edward Rosten's 9 github repository: https://github.com/edrosten/fast-C-src 10 */ 11 12 import core.stdc.stdlib : malloc, free, realloc; 13 14 import dcv.features.corner.fast.base; 15 16 17 int fast12_corner_score(const ubyte* p, const int *pixel, int bstart) 18 { 19 int bmin = bstart; 20 int bmax = 255; 21 int b = (bmax + bmin)/2; 22 23 /*Compute the score using binary search*/ 24 for(;;) 25 { 26 int cb = *p + b; 27 int c_b= *p - b; 28 29 30 if( p[pixel[0]] > cb) 31 if( p[pixel[1]] > cb) 32 if( p[pixel[2]] > cb) 33 if( p[pixel[3]] > cb) 34 if( p[pixel[4]] > cb) 35 if( p[pixel[5]] > cb) 36 if( p[pixel[6]] > cb) 37 if( p[pixel[7]] > cb) 38 if( p[pixel[8]] > cb) 39 if( p[pixel[9]] > cb) 40 if( p[pixel[10]] > cb) 41 if( p[pixel[11]] > cb) 42 goto is_a_corner; 43 else 44 if( p[pixel[15]] > cb) 45 goto is_a_corner; 46 else 47 goto is_not_a_corner; 48 else 49 if( p[pixel[14]] > cb) 50 if( p[pixel[15]] > cb) 51 goto is_a_corner; 52 else 53 goto is_not_a_corner; 54 else 55 goto is_not_a_corner; 56 else 57 if( p[pixel[13]] > cb) 58 if( p[pixel[14]] > cb) 59 if( p[pixel[15]] > cb) 60 goto is_a_corner; 61 else 62 goto is_not_a_corner; 63 else 64 goto is_not_a_corner; 65 else 66 goto is_not_a_corner; 67 else 68 if( p[pixel[12]] > cb) 69 if( p[pixel[13]] > cb) 70 if( p[pixel[14]] > cb) 71 if( p[pixel[15]] > cb) 72 goto is_a_corner; 73 else 74 goto is_not_a_corner; 75 else 76 goto is_not_a_corner; 77 else 78 goto is_not_a_corner; 79 else 80 goto is_not_a_corner; 81 else 82 if( p[pixel[11]] > cb) 83 if( p[pixel[12]] > cb) 84 if( p[pixel[13]] > cb) 85 if( p[pixel[14]] > cb) 86 if( p[pixel[15]] > cb) 87 goto is_a_corner; 88 else 89 goto is_not_a_corner; 90 else 91 goto is_not_a_corner; 92 else 93 goto is_not_a_corner; 94 else 95 goto is_not_a_corner; 96 else 97 goto is_not_a_corner; 98 else 99 if( p[pixel[10]] > cb) 100 if( p[pixel[11]] > cb) 101 if( p[pixel[12]] > cb) 102 if( p[pixel[13]] > cb) 103 if( p[pixel[14]] > cb) 104 if( p[pixel[15]] > cb) 105 goto is_a_corner; 106 else 107 goto is_not_a_corner; 108 else 109 goto is_not_a_corner; 110 else 111 goto is_not_a_corner; 112 else 113 goto is_not_a_corner; 114 else 115 goto is_not_a_corner; 116 else 117 goto is_not_a_corner; 118 else 119 if( p[pixel[9]] > cb) 120 if( p[pixel[10]] > cb) 121 if( p[pixel[11]] > cb) 122 if( p[pixel[12]] > cb) 123 if( p[pixel[13]] > cb) 124 if( p[pixel[14]] > cb) 125 if( p[pixel[15]] > cb) 126 goto is_a_corner; 127 else 128 goto is_not_a_corner; 129 else 130 goto is_not_a_corner; 131 else 132 goto is_not_a_corner; 133 else 134 goto is_not_a_corner; 135 else 136 goto is_not_a_corner; 137 else 138 goto is_not_a_corner; 139 else 140 goto is_not_a_corner; 141 else if( p[pixel[4]] < c_b) 142 if( p[pixel[8]] > cb) 143 if( p[pixel[9]] > cb) 144 if( p[pixel[10]] > cb) 145 if( p[pixel[11]] > cb) 146 if( p[pixel[12]] > cb) 147 if( p[pixel[13]] > cb) 148 if( p[pixel[14]] > cb) 149 if( p[pixel[15]] > cb) 150 goto is_a_corner; 151 else 152 goto is_not_a_corner; 153 else 154 goto is_not_a_corner; 155 else 156 goto is_not_a_corner; 157 else 158 goto is_not_a_corner; 159 else 160 goto is_not_a_corner; 161 else 162 goto is_not_a_corner; 163 else 164 goto is_not_a_corner; 165 else if( p[pixel[8]] < c_b) 166 if( p[pixel[5]] < c_b) 167 if( p[pixel[6]] < c_b) 168 if( p[pixel[7]] < c_b) 169 if( p[pixel[9]] < c_b) 170 if( p[pixel[10]] < c_b) 171 if( p[pixel[11]] < c_b) 172 if( p[pixel[12]] < c_b) 173 if( p[pixel[13]] < c_b) 174 if( p[pixel[14]] < c_b) 175 if( p[pixel[15]] < c_b) 176 goto is_a_corner; 177 else 178 goto is_not_a_corner; 179 else 180 goto is_not_a_corner; 181 else 182 goto is_not_a_corner; 183 else 184 goto is_not_a_corner; 185 else 186 goto is_not_a_corner; 187 else 188 goto is_not_a_corner; 189 else 190 goto is_not_a_corner; 191 else 192 goto is_not_a_corner; 193 else 194 goto is_not_a_corner; 195 else 196 goto is_not_a_corner; 197 else 198 goto is_not_a_corner; 199 else 200 if( p[pixel[8]] > cb) 201 if( p[pixel[9]] > cb) 202 if( p[pixel[10]] > cb) 203 if( p[pixel[11]] > cb) 204 if( p[pixel[12]] > cb) 205 if( p[pixel[13]] > cb) 206 if( p[pixel[14]] > cb) 207 if( p[pixel[15]] > cb) 208 goto is_a_corner; 209 else 210 goto is_not_a_corner; 211 else 212 goto is_not_a_corner; 213 else 214 goto is_not_a_corner; 215 else 216 goto is_not_a_corner; 217 else 218 goto is_not_a_corner; 219 else 220 goto is_not_a_corner; 221 else 222 goto is_not_a_corner; 223 else 224 goto is_not_a_corner; 225 else if( p[pixel[3]] < c_b) 226 if( p[pixel[15]] > cb) 227 if( p[pixel[7]] > cb) 228 if( p[pixel[8]] > cb) 229 if( p[pixel[9]] > cb) 230 if( p[pixel[10]] > cb) 231 if( p[pixel[11]] > cb) 232 if( p[pixel[12]] > cb) 233 if( p[pixel[13]] > cb) 234 if( p[pixel[14]] > cb) 235 goto is_a_corner; 236 else 237 goto is_not_a_corner; 238 else 239 goto is_not_a_corner; 240 else 241 goto is_not_a_corner; 242 else 243 goto is_not_a_corner; 244 else 245 goto is_not_a_corner; 246 else 247 goto is_not_a_corner; 248 else 249 goto is_not_a_corner; 250 else if( p[pixel[7]] < c_b) 251 if( p[pixel[4]] < c_b) 252 if( p[pixel[5]] < c_b) 253 if( p[pixel[6]] < c_b) 254 if( p[pixel[8]] < c_b) 255 if( p[pixel[9]] < c_b) 256 if( p[pixel[10]] < c_b) 257 if( p[pixel[11]] < c_b) 258 if( p[pixel[12]] < c_b) 259 if( p[pixel[13]] < c_b) 260 if( p[pixel[14]] < c_b) 261 goto is_a_corner; 262 else 263 goto is_not_a_corner; 264 else 265 goto is_not_a_corner; 266 else 267 goto is_not_a_corner; 268 else 269 goto is_not_a_corner; 270 else 271 goto is_not_a_corner; 272 else 273 goto is_not_a_corner; 274 else 275 goto is_not_a_corner; 276 else 277 goto is_not_a_corner; 278 else 279 goto is_not_a_corner; 280 else 281 goto is_not_a_corner; 282 else 283 goto is_not_a_corner; 284 else 285 if( p[pixel[4]] < c_b) 286 if( p[pixel[5]] < c_b) 287 if( p[pixel[6]] < c_b) 288 if( p[pixel[7]] < c_b) 289 if( p[pixel[8]] < c_b) 290 if( p[pixel[9]] < c_b) 291 if( p[pixel[10]] < c_b) 292 if( p[pixel[11]] < c_b) 293 if( p[pixel[12]] < c_b) 294 if( p[pixel[13]] < c_b) 295 if( p[pixel[14]] < c_b) 296 goto is_a_corner; 297 else 298 goto is_not_a_corner; 299 else 300 goto is_not_a_corner; 301 else 302 goto is_not_a_corner; 303 else 304 goto is_not_a_corner; 305 else 306 goto is_not_a_corner; 307 else 308 goto is_not_a_corner; 309 else 310 goto is_not_a_corner; 311 else 312 goto is_not_a_corner; 313 else 314 goto is_not_a_corner; 315 else 316 goto is_not_a_corner; 317 else 318 goto is_not_a_corner; 319 else 320 if( p[pixel[7]] > cb) 321 if( p[pixel[8]] > cb) 322 if( p[pixel[9]] > cb) 323 if( p[pixel[10]] > cb) 324 if( p[pixel[11]] > cb) 325 if( p[pixel[12]] > cb) 326 if( p[pixel[13]] > cb) 327 if( p[pixel[14]] > cb) 328 if( p[pixel[15]] > cb) 329 goto is_a_corner; 330 else 331 goto is_not_a_corner; 332 else 333 goto is_not_a_corner; 334 else 335 goto is_not_a_corner; 336 else 337 goto is_not_a_corner; 338 else 339 goto is_not_a_corner; 340 else 341 goto is_not_a_corner; 342 else 343 goto is_not_a_corner; 344 else 345 goto is_not_a_corner; 346 else if( p[pixel[7]] < c_b) 347 if( p[pixel[4]] < c_b) 348 if( p[pixel[5]] < c_b) 349 if( p[pixel[6]] < c_b) 350 if( p[pixel[8]] < c_b) 351 if( p[pixel[9]] < c_b) 352 if( p[pixel[10]] < c_b) 353 if( p[pixel[11]] < c_b) 354 if( p[pixel[12]] < c_b) 355 if( p[pixel[13]] < c_b) 356 if( p[pixel[14]] < c_b) 357 if( p[pixel[15]] < c_b) 358 goto is_a_corner; 359 else 360 goto is_not_a_corner; 361 else 362 goto is_not_a_corner; 363 else 364 goto is_not_a_corner; 365 else 366 goto is_not_a_corner; 367 else 368 goto is_not_a_corner; 369 else 370 goto is_not_a_corner; 371 else 372 goto is_not_a_corner; 373 else 374 goto is_not_a_corner; 375 else 376 goto is_not_a_corner; 377 else 378 goto is_not_a_corner; 379 else 380 goto is_not_a_corner; 381 else 382 goto is_not_a_corner; 383 else if( p[pixel[2]] < c_b) 384 if( p[pixel[6]] > cb) 385 if( p[pixel[7]] > cb) 386 if( p[pixel[8]] > cb) 387 if( p[pixel[9]] > cb) 388 if( p[pixel[10]] > cb) 389 if( p[pixel[11]] > cb) 390 if( p[pixel[12]] > cb) 391 if( p[pixel[13]] > cb) 392 if( p[pixel[14]] > cb) 393 if( p[pixel[15]] > cb) 394 goto is_a_corner; 395 else 396 if( p[pixel[3]] > cb) 397 if( p[pixel[4]] > cb) 398 if( p[pixel[5]] > cb) 399 goto is_a_corner; 400 else 401 goto is_not_a_corner; 402 else 403 goto is_not_a_corner; 404 else 405 goto is_not_a_corner; 406 else 407 goto is_not_a_corner; 408 else 409 goto is_not_a_corner; 410 else 411 goto is_not_a_corner; 412 else 413 goto is_not_a_corner; 414 else 415 goto is_not_a_corner; 416 else 417 goto is_not_a_corner; 418 else 419 goto is_not_a_corner; 420 else 421 goto is_not_a_corner; 422 else if( p[pixel[6]] < c_b) 423 if( p[pixel[4]] < c_b) 424 if( p[pixel[5]] < c_b) 425 if( p[pixel[7]] < c_b) 426 if( p[pixel[8]] < c_b) 427 if( p[pixel[9]] < c_b) 428 if( p[pixel[10]] < c_b) 429 if( p[pixel[11]] < c_b) 430 if( p[pixel[12]] < c_b) 431 if( p[pixel[13]] < c_b) 432 if( p[pixel[3]] < c_b) 433 goto is_a_corner; 434 else 435 if( p[pixel[14]] < c_b) 436 if( p[pixel[15]] < c_b) 437 goto is_a_corner; 438 else 439 goto is_not_a_corner; 440 else 441 goto is_not_a_corner; 442 else 443 goto is_not_a_corner; 444 else 445 goto is_not_a_corner; 446 else 447 goto is_not_a_corner; 448 else 449 goto is_not_a_corner; 450 else 451 goto is_not_a_corner; 452 else 453 goto is_not_a_corner; 454 else 455 goto is_not_a_corner; 456 else 457 goto is_not_a_corner; 458 else 459 goto is_not_a_corner; 460 else 461 goto is_not_a_corner; 462 else 463 if( p[pixel[6]] > cb) 464 if( p[pixel[7]] > cb) 465 if( p[pixel[8]] > cb) 466 if( p[pixel[9]] > cb) 467 if( p[pixel[10]] > cb) 468 if( p[pixel[11]] > cb) 469 if( p[pixel[12]] > cb) 470 if( p[pixel[13]] > cb) 471 if( p[pixel[14]] > cb) 472 if( p[pixel[15]] > cb) 473 goto is_a_corner; 474 else 475 if( p[pixel[3]] > cb) 476 if( p[pixel[4]] > cb) 477 if( p[pixel[5]] > cb) 478 goto is_a_corner; 479 else 480 goto is_not_a_corner; 481 else 482 goto is_not_a_corner; 483 else 484 goto is_not_a_corner; 485 else 486 goto is_not_a_corner; 487 else 488 goto is_not_a_corner; 489 else 490 goto is_not_a_corner; 491 else 492 goto is_not_a_corner; 493 else 494 goto is_not_a_corner; 495 else 496 goto is_not_a_corner; 497 else 498 goto is_not_a_corner; 499 else 500 goto is_not_a_corner; 501 else if( p[pixel[6]] < c_b) 502 if( p[pixel[4]] < c_b) 503 if( p[pixel[5]] < c_b) 504 if( p[pixel[7]] < c_b) 505 if( p[pixel[8]] < c_b) 506 if( p[pixel[9]] < c_b) 507 if( p[pixel[10]] < c_b) 508 if( p[pixel[11]] < c_b) 509 if( p[pixel[12]] < c_b) 510 if( p[pixel[13]] < c_b) 511 if( p[pixel[14]] < c_b) 512 if( p[pixel[3]] < c_b) 513 goto is_a_corner; 514 else 515 if( p[pixel[15]] < c_b) 516 goto is_a_corner; 517 else 518 goto is_not_a_corner; 519 else 520 goto is_not_a_corner; 521 else 522 goto is_not_a_corner; 523 else 524 goto is_not_a_corner; 525 else 526 goto is_not_a_corner; 527 else 528 goto is_not_a_corner; 529 else 530 goto is_not_a_corner; 531 else 532 goto is_not_a_corner; 533 else 534 goto is_not_a_corner; 535 else 536 goto is_not_a_corner; 537 else 538 goto is_not_a_corner; 539 else 540 goto is_not_a_corner; 541 else if( p[pixel[1]] < c_b) 542 if( p[pixel[5]] > cb) 543 if( p[pixel[6]] > cb) 544 if( p[pixel[7]] > cb) 545 if( p[pixel[8]] > cb) 546 if( p[pixel[9]] > cb) 547 if( p[pixel[10]] > cb) 548 if( p[pixel[11]] > cb) 549 if( p[pixel[12]] > cb) 550 if( p[pixel[13]] > cb) 551 if( p[pixel[14]] > cb) 552 if( p[pixel[15]] > cb) 553 goto is_a_corner; 554 else 555 if( p[pixel[3]] > cb) 556 if( p[pixel[4]] > cb) 557 goto is_a_corner; 558 else 559 goto is_not_a_corner; 560 else 561 goto is_not_a_corner; 562 else 563 if( p[pixel[2]] > cb) 564 if( p[pixel[3]] > cb) 565 if( p[pixel[4]] > cb) 566 goto is_a_corner; 567 else 568 goto is_not_a_corner; 569 else 570 goto is_not_a_corner; 571 else 572 goto is_not_a_corner; 573 else 574 goto is_not_a_corner; 575 else 576 goto is_not_a_corner; 577 else 578 goto is_not_a_corner; 579 else 580 goto is_not_a_corner; 581 else 582 goto is_not_a_corner; 583 else 584 goto is_not_a_corner; 585 else 586 goto is_not_a_corner; 587 else 588 goto is_not_a_corner; 589 else if( p[pixel[5]] < c_b) 590 if( p[pixel[4]] < c_b) 591 if( p[pixel[6]] < c_b) 592 if( p[pixel[7]] < c_b) 593 if( p[pixel[8]] < c_b) 594 if( p[pixel[9]] < c_b) 595 if( p[pixel[10]] < c_b) 596 if( p[pixel[11]] < c_b) 597 if( p[pixel[12]] < c_b) 598 if( p[pixel[3]] < c_b) 599 if( p[pixel[2]] < c_b) 600 goto is_a_corner; 601 else 602 if( p[pixel[13]] < c_b) 603 if( p[pixel[14]] < c_b) 604 goto is_a_corner; 605 else 606 goto is_not_a_corner; 607 else 608 goto is_not_a_corner; 609 else 610 if( p[pixel[13]] < c_b) 611 if( p[pixel[14]] < c_b) 612 if( p[pixel[15]] < c_b) 613 goto is_a_corner; 614 else 615 goto is_not_a_corner; 616 else 617 goto is_not_a_corner; 618 else 619 goto is_not_a_corner; 620 else 621 goto is_not_a_corner; 622 else 623 goto is_not_a_corner; 624 else 625 goto is_not_a_corner; 626 else 627 goto is_not_a_corner; 628 else 629 goto is_not_a_corner; 630 else 631 goto is_not_a_corner; 632 else 633 goto is_not_a_corner; 634 else 635 goto is_not_a_corner; 636 else 637 goto is_not_a_corner; 638 else 639 if( p[pixel[5]] > cb) 640 if( p[pixel[6]] > cb) 641 if( p[pixel[7]] > cb) 642 if( p[pixel[8]] > cb) 643 if( p[pixel[9]] > cb) 644 if( p[pixel[10]] > cb) 645 if( p[pixel[11]] > cb) 646 if( p[pixel[12]] > cb) 647 if( p[pixel[13]] > cb) 648 if( p[pixel[14]] > cb) 649 if( p[pixel[15]] > cb) 650 goto is_a_corner; 651 else 652 if( p[pixel[3]] > cb) 653 if( p[pixel[4]] > cb) 654 goto is_a_corner; 655 else 656 goto is_not_a_corner; 657 else 658 goto is_not_a_corner; 659 else 660 if( p[pixel[2]] > cb) 661 if( p[pixel[3]] > cb) 662 if( p[pixel[4]] > cb) 663 goto is_a_corner; 664 else 665 goto is_not_a_corner; 666 else 667 goto is_not_a_corner; 668 else 669 goto is_not_a_corner; 670 else 671 goto is_not_a_corner; 672 else 673 goto is_not_a_corner; 674 else 675 goto is_not_a_corner; 676 else 677 goto is_not_a_corner; 678 else 679 goto is_not_a_corner; 680 else 681 goto is_not_a_corner; 682 else 683 goto is_not_a_corner; 684 else 685 goto is_not_a_corner; 686 else if( p[pixel[5]] < c_b) 687 if( p[pixel[4]] < c_b) 688 if( p[pixel[6]] < c_b) 689 if( p[pixel[7]] < c_b) 690 if( p[pixel[8]] < c_b) 691 if( p[pixel[9]] < c_b) 692 if( p[pixel[10]] < c_b) 693 if( p[pixel[11]] < c_b) 694 if( p[pixel[12]] < c_b) 695 if( p[pixel[13]] < c_b) 696 if( p[pixel[3]] < c_b) 697 if( p[pixel[2]] < c_b) 698 goto is_a_corner; 699 else 700 if( p[pixel[14]] < c_b) 701 goto is_a_corner; 702 else 703 goto is_not_a_corner; 704 else 705 if( p[pixel[14]] < c_b) 706 if( p[pixel[15]] < c_b) 707 goto is_a_corner; 708 else 709 goto is_not_a_corner; 710 else 711 goto is_not_a_corner; 712 else 713 goto is_not_a_corner; 714 else 715 goto is_not_a_corner; 716 else 717 goto is_not_a_corner; 718 else 719 goto is_not_a_corner; 720 else 721 goto is_not_a_corner; 722 else 723 goto is_not_a_corner; 724 else 725 goto is_not_a_corner; 726 else 727 goto is_not_a_corner; 728 else 729 goto is_not_a_corner; 730 else 731 goto is_not_a_corner; 732 else if( p[pixel[0]] < c_b) 733 if( p[pixel[1]] > cb) 734 if( p[pixel[5]] > cb) 735 if( p[pixel[4]] > cb) 736 if( p[pixel[6]] > cb) 737 if( p[pixel[7]] > cb) 738 if( p[pixel[8]] > cb) 739 if( p[pixel[9]] > cb) 740 if( p[pixel[10]] > cb) 741 if( p[pixel[11]] > cb) 742 if( p[pixel[12]] > cb) 743 if( p[pixel[3]] > cb) 744 if( p[pixel[2]] > cb) 745 goto is_a_corner; 746 else 747 if( p[pixel[13]] > cb) 748 if( p[pixel[14]] > cb) 749 goto is_a_corner; 750 else 751 goto is_not_a_corner; 752 else 753 goto is_not_a_corner; 754 else 755 if( p[pixel[13]] > cb) 756 if( p[pixel[14]] > cb) 757 if( p[pixel[15]] > cb) 758 goto is_a_corner; 759 else 760 goto is_not_a_corner; 761 else 762 goto is_not_a_corner; 763 else 764 goto is_not_a_corner; 765 else 766 goto is_not_a_corner; 767 else 768 goto is_not_a_corner; 769 else 770 goto is_not_a_corner; 771 else 772 goto is_not_a_corner; 773 else 774 goto is_not_a_corner; 775 else 776 goto is_not_a_corner; 777 else 778 goto is_not_a_corner; 779 else 780 goto is_not_a_corner; 781 else if( p[pixel[5]] < c_b) 782 if( p[pixel[6]] < c_b) 783 if( p[pixel[7]] < c_b) 784 if( p[pixel[8]] < c_b) 785 if( p[pixel[9]] < c_b) 786 if( p[pixel[10]] < c_b) 787 if( p[pixel[11]] < c_b) 788 if( p[pixel[12]] < c_b) 789 if( p[pixel[13]] < c_b) 790 if( p[pixel[14]] < c_b) 791 if( p[pixel[15]] < c_b) 792 goto is_a_corner; 793 else 794 if( p[pixel[3]] < c_b) 795 if( p[pixel[4]] < c_b) 796 goto is_a_corner; 797 else 798 goto is_not_a_corner; 799 else 800 goto is_not_a_corner; 801 else 802 if( p[pixel[2]] < c_b) 803 if( p[pixel[3]] < c_b) 804 if( p[pixel[4]] < c_b) 805 goto is_a_corner; 806 else 807 goto is_not_a_corner; 808 else 809 goto is_not_a_corner; 810 else 811 goto is_not_a_corner; 812 else 813 goto is_not_a_corner; 814 else 815 goto is_not_a_corner; 816 else 817 goto is_not_a_corner; 818 else 819 goto is_not_a_corner; 820 else 821 goto is_not_a_corner; 822 else 823 goto is_not_a_corner; 824 else 825 goto is_not_a_corner; 826 else 827 goto is_not_a_corner; 828 else 829 goto is_not_a_corner; 830 else if( p[pixel[1]] < c_b) 831 if( p[pixel[2]] > cb) 832 if( p[pixel[6]] > cb) 833 if( p[pixel[4]] > cb) 834 if( p[pixel[5]] > cb) 835 if( p[pixel[7]] > cb) 836 if( p[pixel[8]] > cb) 837 if( p[pixel[9]] > cb) 838 if( p[pixel[10]] > cb) 839 if( p[pixel[11]] > cb) 840 if( p[pixel[12]] > cb) 841 if( p[pixel[13]] > cb) 842 if( p[pixel[3]] > cb) 843 goto is_a_corner; 844 else 845 if( p[pixel[14]] > cb) 846 if( p[pixel[15]] > cb) 847 goto is_a_corner; 848 else 849 goto is_not_a_corner; 850 else 851 goto is_not_a_corner; 852 else 853 goto is_not_a_corner; 854 else 855 goto is_not_a_corner; 856 else 857 goto is_not_a_corner; 858 else 859 goto is_not_a_corner; 860 else 861 goto is_not_a_corner; 862 else 863 goto is_not_a_corner; 864 else 865 goto is_not_a_corner; 866 else 867 goto is_not_a_corner; 868 else 869 goto is_not_a_corner; 870 else if( p[pixel[6]] < c_b) 871 if( p[pixel[7]] < c_b) 872 if( p[pixel[8]] < c_b) 873 if( p[pixel[9]] < c_b) 874 if( p[pixel[10]] < c_b) 875 if( p[pixel[11]] < c_b) 876 if( p[pixel[12]] < c_b) 877 if( p[pixel[13]] < c_b) 878 if( p[pixel[14]] < c_b) 879 if( p[pixel[15]] < c_b) 880 goto is_a_corner; 881 else 882 if( p[pixel[3]] < c_b) 883 if( p[pixel[4]] < c_b) 884 if( p[pixel[5]] < c_b) 885 goto is_a_corner; 886 else 887 goto is_not_a_corner; 888 else 889 goto is_not_a_corner; 890 else 891 goto is_not_a_corner; 892 else 893 goto is_not_a_corner; 894 else 895 goto is_not_a_corner; 896 else 897 goto is_not_a_corner; 898 else 899 goto is_not_a_corner; 900 else 901 goto is_not_a_corner; 902 else 903 goto is_not_a_corner; 904 else 905 goto is_not_a_corner; 906 else 907 goto is_not_a_corner; 908 else 909 goto is_not_a_corner; 910 else if( p[pixel[2]] < c_b) 911 if( p[pixel[3]] > cb) 912 if( p[pixel[15]] < c_b) 913 if( p[pixel[7]] > cb) 914 if( p[pixel[4]] > cb) 915 if( p[pixel[5]] > cb) 916 if( p[pixel[6]] > cb) 917 if( p[pixel[8]] > cb) 918 if( p[pixel[9]] > cb) 919 if( p[pixel[10]] > cb) 920 if( p[pixel[11]] > cb) 921 if( p[pixel[12]] > cb) 922 if( p[pixel[13]] > cb) 923 if( p[pixel[14]] > cb) 924 goto is_a_corner; 925 else 926 goto is_not_a_corner; 927 else 928 goto is_not_a_corner; 929 else 930 goto is_not_a_corner; 931 else 932 goto is_not_a_corner; 933 else 934 goto is_not_a_corner; 935 else 936 goto is_not_a_corner; 937 else 938 goto is_not_a_corner; 939 else 940 goto is_not_a_corner; 941 else 942 goto is_not_a_corner; 943 else 944 goto is_not_a_corner; 945 else if( p[pixel[7]] < c_b) 946 if( p[pixel[8]] < c_b) 947 if( p[pixel[9]] < c_b) 948 if( p[pixel[10]] < c_b) 949 if( p[pixel[11]] < c_b) 950 if( p[pixel[12]] < c_b) 951 if( p[pixel[13]] < c_b) 952 if( p[pixel[14]] < c_b) 953 goto is_a_corner; 954 else 955 goto is_not_a_corner; 956 else 957 goto is_not_a_corner; 958 else 959 goto is_not_a_corner; 960 else 961 goto is_not_a_corner; 962 else 963 goto is_not_a_corner; 964 else 965 goto is_not_a_corner; 966 else 967 goto is_not_a_corner; 968 else 969 goto is_not_a_corner; 970 else 971 if( p[pixel[4]] > cb) 972 if( p[pixel[5]] > cb) 973 if( p[pixel[6]] > cb) 974 if( p[pixel[7]] > cb) 975 if( p[pixel[8]] > cb) 976 if( p[pixel[9]] > cb) 977 if( p[pixel[10]] > cb) 978 if( p[pixel[11]] > cb) 979 if( p[pixel[12]] > cb) 980 if( p[pixel[13]] > cb) 981 if( p[pixel[14]] > cb) 982 goto is_a_corner; 983 else 984 goto is_not_a_corner; 985 else 986 goto is_not_a_corner; 987 else 988 goto is_not_a_corner; 989 else 990 goto is_not_a_corner; 991 else 992 goto is_not_a_corner; 993 else 994 goto is_not_a_corner; 995 else 996 goto is_not_a_corner; 997 else 998 goto is_not_a_corner; 999 else 1000 goto is_not_a_corner; 1001 else 1002 goto is_not_a_corner; 1003 else 1004 goto is_not_a_corner; 1005 else if( p[pixel[3]] < c_b) 1006 if( p[pixel[4]] > cb) 1007 if( p[pixel[8]] > cb) 1008 if( p[pixel[5]] > cb) 1009 if( p[pixel[6]] > cb) 1010 if( p[pixel[7]] > cb) 1011 if( p[pixel[9]] > cb) 1012 if( p[pixel[10]] > cb) 1013 if( p[pixel[11]] > cb) 1014 if( p[pixel[12]] > cb) 1015 if( p[pixel[13]] > cb) 1016 if( p[pixel[14]] > cb) 1017 if( p[pixel[15]] > cb) 1018 goto is_a_corner; 1019 else 1020 goto is_not_a_corner; 1021 else 1022 goto is_not_a_corner; 1023 else 1024 goto is_not_a_corner; 1025 else 1026 goto is_not_a_corner; 1027 else 1028 goto is_not_a_corner; 1029 else 1030 goto is_not_a_corner; 1031 else 1032 goto is_not_a_corner; 1033 else 1034 goto is_not_a_corner; 1035 else 1036 goto is_not_a_corner; 1037 else 1038 goto is_not_a_corner; 1039 else if( p[pixel[8]] < c_b) 1040 if( p[pixel[9]] < c_b) 1041 if( p[pixel[10]] < c_b) 1042 if( p[pixel[11]] < c_b) 1043 if( p[pixel[12]] < c_b) 1044 if( p[pixel[13]] < c_b) 1045 if( p[pixel[14]] < c_b) 1046 if( p[pixel[15]] < c_b) 1047 goto is_a_corner; 1048 else 1049 goto is_not_a_corner; 1050 else 1051 goto is_not_a_corner; 1052 else 1053 goto is_not_a_corner; 1054 else 1055 goto is_not_a_corner; 1056 else 1057 goto is_not_a_corner; 1058 else 1059 goto is_not_a_corner; 1060 else 1061 goto is_not_a_corner; 1062 else 1063 goto is_not_a_corner; 1064 else if( p[pixel[4]] < c_b) 1065 if( p[pixel[5]] < c_b) 1066 if( p[pixel[6]] < c_b) 1067 if( p[pixel[7]] < c_b) 1068 if( p[pixel[8]] < c_b) 1069 if( p[pixel[9]] < c_b) 1070 if( p[pixel[10]] < c_b) 1071 if( p[pixel[11]] < c_b) 1072 goto is_a_corner; 1073 else 1074 if( p[pixel[15]] < c_b) 1075 goto is_a_corner; 1076 else 1077 goto is_not_a_corner; 1078 else 1079 if( p[pixel[14]] < c_b) 1080 if( p[pixel[15]] < c_b) 1081 goto is_a_corner; 1082 else 1083 goto is_not_a_corner; 1084 else 1085 goto is_not_a_corner; 1086 else 1087 if( p[pixel[13]] < c_b) 1088 if( p[pixel[14]] < c_b) 1089 if( p[pixel[15]] < c_b) 1090 goto is_a_corner; 1091 else 1092 goto is_not_a_corner; 1093 else 1094 goto is_not_a_corner; 1095 else 1096 goto is_not_a_corner; 1097 else 1098 if( p[pixel[12]] < c_b) 1099 if( p[pixel[13]] < c_b) 1100 if( p[pixel[14]] < c_b) 1101 if( p[pixel[15]] < c_b) 1102 goto is_a_corner; 1103 else 1104 goto is_not_a_corner; 1105 else 1106 goto is_not_a_corner; 1107 else 1108 goto is_not_a_corner; 1109 else 1110 goto is_not_a_corner; 1111 else 1112 if( p[pixel[11]] < c_b) 1113 if( p[pixel[12]] < c_b) 1114 if( p[pixel[13]] < c_b) 1115 if( p[pixel[14]] < c_b) 1116 if( p[pixel[15]] < c_b) 1117 goto is_a_corner; 1118 else 1119 goto is_not_a_corner; 1120 else 1121 goto is_not_a_corner; 1122 else 1123 goto is_not_a_corner; 1124 else 1125 goto is_not_a_corner; 1126 else 1127 goto is_not_a_corner; 1128 else 1129 if( p[pixel[10]] < c_b) 1130 if( p[pixel[11]] < c_b) 1131 if( p[pixel[12]] < c_b) 1132 if( p[pixel[13]] < c_b) 1133 if( p[pixel[14]] < c_b) 1134 if( p[pixel[15]] < c_b) 1135 goto is_a_corner; 1136 else 1137 goto is_not_a_corner; 1138 else 1139 goto is_not_a_corner; 1140 else 1141 goto is_not_a_corner; 1142 else 1143 goto is_not_a_corner; 1144 else 1145 goto is_not_a_corner; 1146 else 1147 goto is_not_a_corner; 1148 else 1149 if( p[pixel[9]] < c_b) 1150 if( p[pixel[10]] < c_b) 1151 if( p[pixel[11]] < c_b) 1152 if( p[pixel[12]] < c_b) 1153 if( p[pixel[13]] < c_b) 1154 if( p[pixel[14]] < c_b) 1155 if( p[pixel[15]] < c_b) 1156 goto is_a_corner; 1157 else 1158 goto is_not_a_corner; 1159 else 1160 goto is_not_a_corner; 1161 else 1162 goto is_not_a_corner; 1163 else 1164 goto is_not_a_corner; 1165 else 1166 goto is_not_a_corner; 1167 else 1168 goto is_not_a_corner; 1169 else 1170 goto is_not_a_corner; 1171 else 1172 if( p[pixel[8]] < c_b) 1173 if( p[pixel[9]] < c_b) 1174 if( p[pixel[10]] < c_b) 1175 if( p[pixel[11]] < c_b) 1176 if( p[pixel[12]] < c_b) 1177 if( p[pixel[13]] < c_b) 1178 if( p[pixel[14]] < c_b) 1179 if( p[pixel[15]] < c_b) 1180 goto is_a_corner; 1181 else 1182 goto is_not_a_corner; 1183 else 1184 goto is_not_a_corner; 1185 else 1186 goto is_not_a_corner; 1187 else 1188 goto is_not_a_corner; 1189 else 1190 goto is_not_a_corner; 1191 else 1192 goto is_not_a_corner; 1193 else 1194 goto is_not_a_corner; 1195 else 1196 goto is_not_a_corner; 1197 else 1198 if( p[pixel[7]] > cb) 1199 if( p[pixel[4]] > cb) 1200 if( p[pixel[5]] > cb) 1201 if( p[pixel[6]] > cb) 1202 if( p[pixel[8]] > cb) 1203 if( p[pixel[9]] > cb) 1204 if( p[pixel[10]] > cb) 1205 if( p[pixel[11]] > cb) 1206 if( p[pixel[12]] > cb) 1207 if( p[pixel[13]] > cb) 1208 if( p[pixel[14]] > cb) 1209 if( p[pixel[15]] > cb) 1210 goto is_a_corner; 1211 else 1212 goto is_not_a_corner; 1213 else 1214 goto is_not_a_corner; 1215 else 1216 goto is_not_a_corner; 1217 else 1218 goto is_not_a_corner; 1219 else 1220 goto is_not_a_corner; 1221 else 1222 goto is_not_a_corner; 1223 else 1224 goto is_not_a_corner; 1225 else 1226 goto is_not_a_corner; 1227 else 1228 goto is_not_a_corner; 1229 else 1230 goto is_not_a_corner; 1231 else 1232 goto is_not_a_corner; 1233 else if( p[pixel[7]] < c_b) 1234 if( p[pixel[8]] < c_b) 1235 if( p[pixel[9]] < c_b) 1236 if( p[pixel[10]] < c_b) 1237 if( p[pixel[11]] < c_b) 1238 if( p[pixel[12]] < c_b) 1239 if( p[pixel[13]] < c_b) 1240 if( p[pixel[14]] < c_b) 1241 if( p[pixel[15]] < c_b) 1242 goto is_a_corner; 1243 else 1244 goto is_not_a_corner; 1245 else 1246 goto is_not_a_corner; 1247 else 1248 goto is_not_a_corner; 1249 else 1250 goto is_not_a_corner; 1251 else 1252 goto is_not_a_corner; 1253 else 1254 goto is_not_a_corner; 1255 else 1256 goto is_not_a_corner; 1257 else 1258 goto is_not_a_corner; 1259 else 1260 goto is_not_a_corner; 1261 else 1262 if( p[pixel[6]] > cb) 1263 if( p[pixel[4]] > cb) 1264 if( p[pixel[5]] > cb) 1265 if( p[pixel[7]] > cb) 1266 if( p[pixel[8]] > cb) 1267 if( p[pixel[9]] > cb) 1268 if( p[pixel[10]] > cb) 1269 if( p[pixel[11]] > cb) 1270 if( p[pixel[12]] > cb) 1271 if( p[pixel[13]] > cb) 1272 if( p[pixel[14]] > cb) 1273 if( p[pixel[3]] > cb) 1274 goto is_a_corner; 1275 else 1276 if( p[pixel[15]] > cb) 1277 goto is_a_corner; 1278 else 1279 goto is_not_a_corner; 1280 else 1281 goto is_not_a_corner; 1282 else 1283 goto is_not_a_corner; 1284 else 1285 goto is_not_a_corner; 1286 else 1287 goto is_not_a_corner; 1288 else 1289 goto is_not_a_corner; 1290 else 1291 goto is_not_a_corner; 1292 else 1293 goto is_not_a_corner; 1294 else 1295 goto is_not_a_corner; 1296 else 1297 goto is_not_a_corner; 1298 else 1299 goto is_not_a_corner; 1300 else if( p[pixel[6]] < c_b) 1301 if( p[pixel[7]] < c_b) 1302 if( p[pixel[8]] < c_b) 1303 if( p[pixel[9]] < c_b) 1304 if( p[pixel[10]] < c_b) 1305 if( p[pixel[11]] < c_b) 1306 if( p[pixel[12]] < c_b) 1307 if( p[pixel[13]] < c_b) 1308 if( p[pixel[14]] < c_b) 1309 if( p[pixel[15]] < c_b) 1310 goto is_a_corner; 1311 else 1312 if( p[pixel[3]] < c_b) 1313 if( p[pixel[4]] < c_b) 1314 if( p[pixel[5]] < c_b) 1315 goto is_a_corner; 1316 else 1317 goto is_not_a_corner; 1318 else 1319 goto is_not_a_corner; 1320 else 1321 goto is_not_a_corner; 1322 else 1323 goto is_not_a_corner; 1324 else 1325 goto is_not_a_corner; 1326 else 1327 goto is_not_a_corner; 1328 else 1329 goto is_not_a_corner; 1330 else 1331 goto is_not_a_corner; 1332 else 1333 goto is_not_a_corner; 1334 else 1335 goto is_not_a_corner; 1336 else 1337 goto is_not_a_corner; 1338 else 1339 goto is_not_a_corner; 1340 else 1341 if( p[pixel[5]] > cb) 1342 if( p[pixel[4]] > cb) 1343 if( p[pixel[6]] > cb) 1344 if( p[pixel[7]] > cb) 1345 if( p[pixel[8]] > cb) 1346 if( p[pixel[9]] > cb) 1347 if( p[pixel[10]] > cb) 1348 if( p[pixel[11]] > cb) 1349 if( p[pixel[12]] > cb) 1350 if( p[pixel[13]] > cb) 1351 if( p[pixel[3]] > cb) 1352 if( p[pixel[2]] > cb) 1353 goto is_a_corner; 1354 else 1355 if( p[pixel[14]] > cb) 1356 goto is_a_corner; 1357 else 1358 goto is_not_a_corner; 1359 else 1360 if( p[pixel[14]] > cb) 1361 if( p[pixel[15]] > cb) 1362 goto is_a_corner; 1363 else 1364 goto is_not_a_corner; 1365 else 1366 goto is_not_a_corner; 1367 else 1368 goto is_not_a_corner; 1369 else 1370 goto is_not_a_corner; 1371 else 1372 goto is_not_a_corner; 1373 else 1374 goto is_not_a_corner; 1375 else 1376 goto is_not_a_corner; 1377 else 1378 goto is_not_a_corner; 1379 else 1380 goto is_not_a_corner; 1381 else 1382 goto is_not_a_corner; 1383 else 1384 goto is_not_a_corner; 1385 else if( p[pixel[5]] < c_b) 1386 if( p[pixel[6]] < c_b) 1387 if( p[pixel[7]] < c_b) 1388 if( p[pixel[8]] < c_b) 1389 if( p[pixel[9]] < c_b) 1390 if( p[pixel[10]] < c_b) 1391 if( p[pixel[11]] < c_b) 1392 if( p[pixel[12]] < c_b) 1393 if( p[pixel[13]] < c_b) 1394 if( p[pixel[14]] < c_b) 1395 if( p[pixel[15]] < c_b) 1396 goto is_a_corner; 1397 else 1398 if( p[pixel[3]] < c_b) 1399 if( p[pixel[4]] < c_b) 1400 goto is_a_corner; 1401 else 1402 goto is_not_a_corner; 1403 else 1404 goto is_not_a_corner; 1405 else 1406 if( p[pixel[2]] < c_b) 1407 if( p[pixel[3]] < c_b) 1408 if( p[pixel[4]] < c_b) 1409 goto is_a_corner; 1410 else 1411 goto is_not_a_corner; 1412 else 1413 goto is_not_a_corner; 1414 else 1415 goto is_not_a_corner; 1416 else 1417 goto is_not_a_corner; 1418 else 1419 goto is_not_a_corner; 1420 else 1421 goto is_not_a_corner; 1422 else 1423 goto is_not_a_corner; 1424 else 1425 goto is_not_a_corner; 1426 else 1427 goto is_not_a_corner; 1428 else 1429 goto is_not_a_corner; 1430 else 1431 goto is_not_a_corner; 1432 else 1433 goto is_not_a_corner; 1434 else 1435 if( p[pixel[4]] > cb) 1436 if( p[pixel[5]] > cb) 1437 if( p[pixel[6]] > cb) 1438 if( p[pixel[7]] > cb) 1439 if( p[pixel[8]] > cb) 1440 if( p[pixel[9]] > cb) 1441 if( p[pixel[10]] > cb) 1442 if( p[pixel[11]] > cb) 1443 if( p[pixel[12]] > cb) 1444 if( p[pixel[3]] > cb) 1445 if( p[pixel[2]] > cb) 1446 if( p[pixel[1]] > cb) 1447 goto is_a_corner; 1448 else 1449 if( p[pixel[13]] > cb) 1450 goto is_a_corner; 1451 else 1452 goto is_not_a_corner; 1453 else 1454 if( p[pixel[13]] > cb) 1455 if( p[pixel[14]] > cb) 1456 goto is_a_corner; 1457 else 1458 goto is_not_a_corner; 1459 else 1460 goto is_not_a_corner; 1461 else 1462 if( p[pixel[13]] > cb) 1463 if( p[pixel[14]] > cb) 1464 if( p[pixel[15]] > cb) 1465 goto is_a_corner; 1466 else 1467 goto is_not_a_corner; 1468 else 1469 goto is_not_a_corner; 1470 else 1471 goto is_not_a_corner; 1472 else 1473 goto is_not_a_corner; 1474 else 1475 goto is_not_a_corner; 1476 else 1477 goto is_not_a_corner; 1478 else 1479 goto is_not_a_corner; 1480 else 1481 goto is_not_a_corner; 1482 else 1483 goto is_not_a_corner; 1484 else 1485 goto is_not_a_corner; 1486 else 1487 goto is_not_a_corner; 1488 else if( p[pixel[4]] < c_b) 1489 if( p[pixel[5]] < c_b) 1490 if( p[pixel[6]] < c_b) 1491 if( p[pixel[7]] < c_b) 1492 if( p[pixel[8]] < c_b) 1493 if( p[pixel[9]] < c_b) 1494 if( p[pixel[10]] < c_b) 1495 if( p[pixel[11]] < c_b) 1496 if( p[pixel[12]] < c_b) 1497 if( p[pixel[3]] < c_b) 1498 if( p[pixel[2]] < c_b) 1499 if( p[pixel[1]] < c_b) 1500 goto is_a_corner; 1501 else 1502 if( p[pixel[13]] < c_b) 1503 goto is_a_corner; 1504 else 1505 goto is_not_a_corner; 1506 else 1507 if( p[pixel[13]] < c_b) 1508 if( p[pixel[14]] < c_b) 1509 goto is_a_corner; 1510 else 1511 goto is_not_a_corner; 1512 else 1513 goto is_not_a_corner; 1514 else 1515 if( p[pixel[13]] < c_b) 1516 if( p[pixel[14]] < c_b) 1517 if( p[pixel[15]] < c_b) 1518 goto is_a_corner; 1519 else 1520 goto is_not_a_corner; 1521 else 1522 goto is_not_a_corner; 1523 else 1524 goto is_not_a_corner; 1525 else 1526 goto is_not_a_corner; 1527 else 1528 goto is_not_a_corner; 1529 else 1530 goto is_not_a_corner; 1531 else 1532 goto is_not_a_corner; 1533 else 1534 goto is_not_a_corner; 1535 else 1536 goto is_not_a_corner; 1537 else 1538 goto is_not_a_corner; 1539 else 1540 goto is_not_a_corner; 1541 else 1542 goto is_not_a_corner; 1543 1544 is_a_corner: 1545 bmin=b; 1546 goto end_if; 1547 1548 is_not_a_corner: 1549 bmax=b; 1550 goto end_if; 1551 1552 end_if: 1553 1554 if(bmin == bmax - 1 || bmin == bmax) 1555 return bmin; 1556 b = (bmin + bmax) / 2; 1557 } 1558 return 0; 1559 } 1560 1561 static void make_offsets(int *pixel, int row_stride) 1562 { 1563 pixel[0] = 0 + row_stride * 3; 1564 pixel[1] = 1 + row_stride * 3; 1565 pixel[2] = 2 + row_stride * 2; 1566 pixel[3] = 3 + row_stride * 1; 1567 pixel[4] = 3 + row_stride * 0; 1568 pixel[5] = 3 + row_stride * -1; 1569 pixel[6] = 2 + row_stride * -2; 1570 pixel[7] = 1 + row_stride * -3; 1571 pixel[8] = 0 + row_stride * -3; 1572 pixel[9] = -1 + row_stride * -3; 1573 pixel[10] = -2 + row_stride * -2; 1574 pixel[11] = -3 + row_stride * -1; 1575 pixel[12] = -3 + row_stride * 0; 1576 pixel[13] = -3 + row_stride * 1; 1577 pixel[14] = -2 + row_stride * 2; 1578 pixel[15] = -1 + row_stride * 3; 1579 } 1580 1581 1582 1583 int* fast12_score(const ubyte* i, int stride, xy* corners, int num_corners, int b) 1584 { 1585 int* scores = cast(int*)malloc(int.sizeof* num_corners); 1586 int n; 1587 1588 int [16]pixel; 1589 make_offsets(pixel.ptr, stride); 1590 1591 for(n=0; n < num_corners; n++) 1592 scores[n] = fast12_corner_score(i + corners[n].y*stride + corners[n].x, pixel.ptr, b); 1593 1594 return scores; 1595 } 1596 1597 1598 xy* fast12_detect(const ubyte* im, int xsize, int ysize, int stride, int b, int* ret_num_corners) 1599 { 1600 int num_corners=0; 1601 xy* ret_corners; 1602 int rsize=512; 1603 int [16]pixel; 1604 int x, y; 1605 1606 ret_corners = cast(xy*)malloc(xy.sizeof*rsize); 1607 make_offsets(pixel.ptr, stride); 1608 1609 for(y=3; y < ysize - 3; y++) 1610 for(x=3; x < xsize - 3; x++) 1611 { 1612 const ubyte* p = im + y*stride + x; 1613 1614 int cb = *p + b; 1615 int c_b= *p - b; 1616 if(p[pixel[0]] > cb) 1617 if(p[pixel[1]] > cb) 1618 if(p[pixel[2]] > cb) 1619 if(p[pixel[3]] > cb) 1620 if(p[pixel[4]] > cb) 1621 if(p[pixel[5]] > cb) 1622 if(p[pixel[6]] > cb) 1623 if(p[pixel[7]] > cb) 1624 if(p[pixel[8]] > cb) 1625 if(p[pixel[9]] > cb) 1626 if(p[pixel[10]] > cb) 1627 if(p[pixel[11]] > cb) 1628 {} 1629 else 1630 if(p[pixel[15]] > cb) 1631 {} 1632 else 1633 continue; 1634 else 1635 if(p[pixel[14]] > cb) 1636 if(p[pixel[15]] > cb) 1637 {} 1638 else 1639 continue; 1640 else 1641 continue; 1642 else 1643 if(p[pixel[13]] > cb) 1644 if(p[pixel[14]] > cb) 1645 if(p[pixel[15]] > cb) 1646 {} 1647 else 1648 continue; 1649 else 1650 continue; 1651 else 1652 continue; 1653 else 1654 if(p[pixel[12]] > cb) 1655 if(p[pixel[13]] > cb) 1656 if(p[pixel[14]] > cb) 1657 if(p[pixel[15]] > cb) 1658 {} 1659 else 1660 continue; 1661 else 1662 continue; 1663 else 1664 continue; 1665 else 1666 continue; 1667 else 1668 if(p[pixel[11]] > cb) 1669 if(p[pixel[12]] > cb) 1670 if(p[pixel[13]] > cb) 1671 if(p[pixel[14]] > cb) 1672 if(p[pixel[15]] > cb) 1673 {} 1674 else 1675 continue; 1676 else 1677 continue; 1678 else 1679 continue; 1680 else 1681 continue; 1682 else 1683 continue; 1684 else 1685 if(p[pixel[10]] > cb) 1686 if(p[pixel[11]] > cb) 1687 if(p[pixel[12]] > cb) 1688 if(p[pixel[13]] > cb) 1689 if(p[pixel[14]] > cb) 1690 if(p[pixel[15]] > cb) 1691 {} 1692 else 1693 continue; 1694 else 1695 continue; 1696 else 1697 continue; 1698 else 1699 continue; 1700 else 1701 continue; 1702 else 1703 continue; 1704 else 1705 if(p[pixel[9]] > cb) 1706 if(p[pixel[10]] > cb) 1707 if(p[pixel[11]] > cb) 1708 if(p[pixel[12]] > cb) 1709 if(p[pixel[13]] > cb) 1710 if(p[pixel[14]] > cb) 1711 if(p[pixel[15]] > cb) 1712 {} 1713 else 1714 continue; 1715 else 1716 continue; 1717 else 1718 continue; 1719 else 1720 continue; 1721 else 1722 continue; 1723 else 1724 continue; 1725 else 1726 continue; 1727 else if(p[pixel[4]] < c_b) 1728 if(p[pixel[8]] > cb) 1729 if(p[pixel[9]] > cb) 1730 if(p[pixel[10]] > cb) 1731 if(p[pixel[11]] > cb) 1732 if(p[pixel[12]] > cb) 1733 if(p[pixel[13]] > cb) 1734 if(p[pixel[14]] > cb) 1735 if(p[pixel[15]] > cb) 1736 {} 1737 else 1738 continue; 1739 else 1740 continue; 1741 else 1742 continue; 1743 else 1744 continue; 1745 else 1746 continue; 1747 else 1748 continue; 1749 else 1750 continue; 1751 else if(p[pixel[8]] < c_b) 1752 if(p[pixel[5]] < c_b) 1753 if(p[pixel[6]] < c_b) 1754 if(p[pixel[7]] < c_b) 1755 if(p[pixel[9]] < c_b) 1756 if(p[pixel[10]] < c_b) 1757 if(p[pixel[11]] < c_b) 1758 if(p[pixel[12]] < c_b) 1759 if(p[pixel[13]] < c_b) 1760 if(p[pixel[14]] < c_b) 1761 if(p[pixel[15]] < c_b) 1762 {} 1763 else 1764 continue; 1765 else 1766 continue; 1767 else 1768 continue; 1769 else 1770 continue; 1771 else 1772 continue; 1773 else 1774 continue; 1775 else 1776 continue; 1777 else 1778 continue; 1779 else 1780 continue; 1781 else 1782 continue; 1783 else 1784 continue; 1785 else 1786 if(p[pixel[8]] > cb) 1787 if(p[pixel[9]] > cb) 1788 if(p[pixel[10]] > cb) 1789 if(p[pixel[11]] > cb) 1790 if(p[pixel[12]] > cb) 1791 if(p[pixel[13]] > cb) 1792 if(p[pixel[14]] > cb) 1793 if(p[pixel[15]] > cb) 1794 {} 1795 else 1796 continue; 1797 else 1798 continue; 1799 else 1800 continue; 1801 else 1802 continue; 1803 else 1804 continue; 1805 else 1806 continue; 1807 else 1808 continue; 1809 else 1810 continue; 1811 else if(p[pixel[3]] < c_b) 1812 if(p[pixel[15]] > cb) 1813 if(p[pixel[7]] > cb) 1814 if(p[pixel[8]] > cb) 1815 if(p[pixel[9]] > cb) 1816 if(p[pixel[10]] > cb) 1817 if(p[pixel[11]] > cb) 1818 if(p[pixel[12]] > cb) 1819 if(p[pixel[13]] > cb) 1820 if(p[pixel[14]] > cb) 1821 {} 1822 else 1823 continue; 1824 else 1825 continue; 1826 else 1827 continue; 1828 else 1829 continue; 1830 else 1831 continue; 1832 else 1833 continue; 1834 else 1835 continue; 1836 else if(p[pixel[7]] < c_b) 1837 if(p[pixel[4]] < c_b) 1838 if(p[pixel[5]] < c_b) 1839 if(p[pixel[6]] < c_b) 1840 if(p[pixel[8]] < c_b) 1841 if(p[pixel[9]] < c_b) 1842 if(p[pixel[10]] < c_b) 1843 if(p[pixel[11]] < c_b) 1844 if(p[pixel[12]] < c_b) 1845 if(p[pixel[13]] < c_b) 1846 if(p[pixel[14]] < c_b) 1847 {} 1848 else 1849 continue; 1850 else 1851 continue; 1852 else 1853 continue; 1854 else 1855 continue; 1856 else 1857 continue; 1858 else 1859 continue; 1860 else 1861 continue; 1862 else 1863 continue; 1864 else 1865 continue; 1866 else 1867 continue; 1868 else 1869 continue; 1870 else 1871 if(p[pixel[4]] < c_b) 1872 if(p[pixel[5]] < c_b) 1873 if(p[pixel[6]] < c_b) 1874 if(p[pixel[7]] < c_b) 1875 if(p[pixel[8]] < c_b) 1876 if(p[pixel[9]] < c_b) 1877 if(p[pixel[10]] < c_b) 1878 if(p[pixel[11]] < c_b) 1879 if(p[pixel[12]] < c_b) 1880 if(p[pixel[13]] < c_b) 1881 if(p[pixel[14]] < c_b) 1882 {} 1883 else 1884 continue; 1885 else 1886 continue; 1887 else 1888 continue; 1889 else 1890 continue; 1891 else 1892 continue; 1893 else 1894 continue; 1895 else 1896 continue; 1897 else 1898 continue; 1899 else 1900 continue; 1901 else 1902 continue; 1903 else 1904 continue; 1905 else 1906 if(p[pixel[7]] > cb) 1907 if(p[pixel[8]] > cb) 1908 if(p[pixel[9]] > cb) 1909 if(p[pixel[10]] > cb) 1910 if(p[pixel[11]] > cb) 1911 if(p[pixel[12]] > cb) 1912 if(p[pixel[13]] > cb) 1913 if(p[pixel[14]] > cb) 1914 if(p[pixel[15]] > cb) 1915 {} 1916 else 1917 continue; 1918 else 1919 continue; 1920 else 1921 continue; 1922 else 1923 continue; 1924 else 1925 continue; 1926 else 1927 continue; 1928 else 1929 continue; 1930 else 1931 continue; 1932 else if(p[pixel[7]] < c_b) 1933 if(p[pixel[4]] < c_b) 1934 if(p[pixel[5]] < c_b) 1935 if(p[pixel[6]] < c_b) 1936 if(p[pixel[8]] < c_b) 1937 if(p[pixel[9]] < c_b) 1938 if(p[pixel[10]] < c_b) 1939 if(p[pixel[11]] < c_b) 1940 if(p[pixel[12]] < c_b) 1941 if(p[pixel[13]] < c_b) 1942 if(p[pixel[14]] < c_b) 1943 if(p[pixel[15]] < c_b) 1944 {} 1945 else 1946 continue; 1947 else 1948 continue; 1949 else 1950 continue; 1951 else 1952 continue; 1953 else 1954 continue; 1955 else 1956 continue; 1957 else 1958 continue; 1959 else 1960 continue; 1961 else 1962 continue; 1963 else 1964 continue; 1965 else 1966 continue; 1967 else 1968 continue; 1969 else if(p[pixel[2]] < c_b) 1970 if(p[pixel[6]] > cb) 1971 if(p[pixel[7]] > cb) 1972 if(p[pixel[8]] > cb) 1973 if(p[pixel[9]] > cb) 1974 if(p[pixel[10]] > cb) 1975 if(p[pixel[11]] > cb) 1976 if(p[pixel[12]] > cb) 1977 if(p[pixel[13]] > cb) 1978 if(p[pixel[14]] > cb) 1979 if(p[pixel[15]] > cb) 1980 {} 1981 else 1982 if(p[pixel[3]] > cb) 1983 if(p[pixel[4]] > cb) 1984 if(p[pixel[5]] > cb) 1985 {} 1986 else 1987 continue; 1988 else 1989 continue; 1990 else 1991 continue; 1992 else 1993 continue; 1994 else 1995 continue; 1996 else 1997 continue; 1998 else 1999 continue; 2000 else 2001 continue; 2002 else 2003 continue; 2004 else 2005 continue; 2006 else 2007 continue; 2008 else if(p[pixel[6]] < c_b) 2009 if(p[pixel[4]] < c_b) 2010 if(p[pixel[5]] < c_b) 2011 if(p[pixel[7]] < c_b) 2012 if(p[pixel[8]] < c_b) 2013 if(p[pixel[9]] < c_b) 2014 if(p[pixel[10]] < c_b) 2015 if(p[pixel[11]] < c_b) 2016 if(p[pixel[12]] < c_b) 2017 if(p[pixel[13]] < c_b) 2018 if(p[pixel[3]] < c_b) 2019 {} 2020 else 2021 if(p[pixel[14]] < c_b) 2022 if(p[pixel[15]] < c_b) 2023 {} 2024 else 2025 continue; 2026 else 2027 continue; 2028 else 2029 continue; 2030 else 2031 continue; 2032 else 2033 continue; 2034 else 2035 continue; 2036 else 2037 continue; 2038 else 2039 continue; 2040 else 2041 continue; 2042 else 2043 continue; 2044 else 2045 continue; 2046 else 2047 continue; 2048 else 2049 if(p[pixel[6]] > cb) 2050 if(p[pixel[7]] > cb) 2051 if(p[pixel[8]] > cb) 2052 if(p[pixel[9]] > cb) 2053 if(p[pixel[10]] > cb) 2054 if(p[pixel[11]] > cb) 2055 if(p[pixel[12]] > cb) 2056 if(p[pixel[13]] > cb) 2057 if(p[pixel[14]] > cb) 2058 if(p[pixel[15]] > cb) 2059 {} 2060 else 2061 if(p[pixel[3]] > cb) 2062 if(p[pixel[4]] > cb) 2063 if(p[pixel[5]] > cb) 2064 {} 2065 else 2066 continue; 2067 else 2068 continue; 2069 else 2070 continue; 2071 else 2072 continue; 2073 else 2074 continue; 2075 else 2076 continue; 2077 else 2078 continue; 2079 else 2080 continue; 2081 else 2082 continue; 2083 else 2084 continue; 2085 else 2086 continue; 2087 else if(p[pixel[6]] < c_b) 2088 if(p[pixel[4]] < c_b) 2089 if(p[pixel[5]] < c_b) 2090 if(p[pixel[7]] < c_b) 2091 if(p[pixel[8]] < c_b) 2092 if(p[pixel[9]] < c_b) 2093 if(p[pixel[10]] < c_b) 2094 if(p[pixel[11]] < c_b) 2095 if(p[pixel[12]] < c_b) 2096 if(p[pixel[13]] < c_b) 2097 if(p[pixel[14]] < c_b) 2098 if(p[pixel[3]] < c_b) 2099 {} 2100 else 2101 if(p[pixel[15]] < c_b) 2102 {} 2103 else 2104 continue; 2105 else 2106 continue; 2107 else 2108 continue; 2109 else 2110 continue; 2111 else 2112 continue; 2113 else 2114 continue; 2115 else 2116 continue; 2117 else 2118 continue; 2119 else 2120 continue; 2121 else 2122 continue; 2123 else 2124 continue; 2125 else 2126 continue; 2127 else if(p[pixel[1]] < c_b) 2128 if(p[pixel[5]] > cb) 2129 if(p[pixel[6]] > cb) 2130 if(p[pixel[7]] > cb) 2131 if(p[pixel[8]] > cb) 2132 if(p[pixel[9]] > cb) 2133 if(p[pixel[10]] > cb) 2134 if(p[pixel[11]] > cb) 2135 if(p[pixel[12]] > cb) 2136 if(p[pixel[13]] > cb) 2137 if(p[pixel[14]] > cb) 2138 if(p[pixel[15]] > cb) 2139 {} 2140 else 2141 if(p[pixel[3]] > cb) 2142 if(p[pixel[4]] > cb) 2143 {} 2144 else 2145 continue; 2146 else 2147 continue; 2148 else 2149 if(p[pixel[2]] > cb) 2150 if(p[pixel[3]] > cb) 2151 if(p[pixel[4]] > cb) 2152 {} 2153 else 2154 continue; 2155 else 2156 continue; 2157 else 2158 continue; 2159 else 2160 continue; 2161 else 2162 continue; 2163 else 2164 continue; 2165 else 2166 continue; 2167 else 2168 continue; 2169 else 2170 continue; 2171 else 2172 continue; 2173 else 2174 continue; 2175 else if(p[pixel[5]] < c_b) 2176 if(p[pixel[4]] < c_b) 2177 if(p[pixel[6]] < c_b) 2178 if(p[pixel[7]] < c_b) 2179 if(p[pixel[8]] < c_b) 2180 if(p[pixel[9]] < c_b) 2181 if(p[pixel[10]] < c_b) 2182 if(p[pixel[11]] < c_b) 2183 if(p[pixel[12]] < c_b) 2184 if(p[pixel[3]] < c_b) 2185 if(p[pixel[2]] < c_b) 2186 {} 2187 else 2188 if(p[pixel[13]] < c_b) 2189 if(p[pixel[14]] < c_b) 2190 {} 2191 else 2192 continue; 2193 else 2194 continue; 2195 else 2196 if(p[pixel[13]] < c_b) 2197 if(p[pixel[14]] < c_b) 2198 if(p[pixel[15]] < c_b) 2199 {} 2200 else 2201 continue; 2202 else 2203 continue; 2204 else 2205 continue; 2206 else 2207 continue; 2208 else 2209 continue; 2210 else 2211 continue; 2212 else 2213 continue; 2214 else 2215 continue; 2216 else 2217 continue; 2218 else 2219 continue; 2220 else 2221 continue; 2222 else 2223 continue; 2224 else 2225 if(p[pixel[5]] > cb) 2226 if(p[pixel[6]] > cb) 2227 if(p[pixel[7]] > cb) 2228 if(p[pixel[8]] > cb) 2229 if(p[pixel[9]] > cb) 2230 if(p[pixel[10]] > cb) 2231 if(p[pixel[11]] > cb) 2232 if(p[pixel[12]] > cb) 2233 if(p[pixel[13]] > cb) 2234 if(p[pixel[14]] > cb) 2235 if(p[pixel[15]] > cb) 2236 {} 2237 else 2238 if(p[pixel[3]] > cb) 2239 if(p[pixel[4]] > cb) 2240 {} 2241 else 2242 continue; 2243 else 2244 continue; 2245 else 2246 if(p[pixel[2]] > cb) 2247 if(p[pixel[3]] > cb) 2248 if(p[pixel[4]] > cb) 2249 {} 2250 else 2251 continue; 2252 else 2253 continue; 2254 else 2255 continue; 2256 else 2257 continue; 2258 else 2259 continue; 2260 else 2261 continue; 2262 else 2263 continue; 2264 else 2265 continue; 2266 else 2267 continue; 2268 else 2269 continue; 2270 else 2271 continue; 2272 else if(p[pixel[5]] < c_b) 2273 if(p[pixel[4]] < c_b) 2274 if(p[pixel[6]] < c_b) 2275 if(p[pixel[7]] < c_b) 2276 if(p[pixel[8]] < c_b) 2277 if(p[pixel[9]] < c_b) 2278 if(p[pixel[10]] < c_b) 2279 if(p[pixel[11]] < c_b) 2280 if(p[pixel[12]] < c_b) 2281 if(p[pixel[13]] < c_b) 2282 if(p[pixel[3]] < c_b) 2283 if(p[pixel[2]] < c_b) 2284 {} 2285 else 2286 if(p[pixel[14]] < c_b) 2287 {} 2288 else 2289 continue; 2290 else 2291 if(p[pixel[14]] < c_b) 2292 if(p[pixel[15]] < c_b) 2293 {} 2294 else 2295 continue; 2296 else 2297 continue; 2298 else 2299 continue; 2300 else 2301 continue; 2302 else 2303 continue; 2304 else 2305 continue; 2306 else 2307 continue; 2308 else 2309 continue; 2310 else 2311 continue; 2312 else 2313 continue; 2314 else 2315 continue; 2316 else 2317 continue; 2318 else if(p[pixel[0]] < c_b) 2319 if(p[pixel[1]] > cb) 2320 if(p[pixel[5]] > cb) 2321 if(p[pixel[4]] > cb) 2322 if(p[pixel[6]] > cb) 2323 if(p[pixel[7]] > cb) 2324 if(p[pixel[8]] > cb) 2325 if(p[pixel[9]] > cb) 2326 if(p[pixel[10]] > cb) 2327 if(p[pixel[11]] > cb) 2328 if(p[pixel[12]] > cb) 2329 if(p[pixel[3]] > cb) 2330 if(p[pixel[2]] > cb) 2331 {} 2332 else 2333 if(p[pixel[13]] > cb) 2334 if(p[pixel[14]] > cb) 2335 {} 2336 else 2337 continue; 2338 else 2339 continue; 2340 else 2341 if(p[pixel[13]] > cb) 2342 if(p[pixel[14]] > cb) 2343 if(p[pixel[15]] > cb) 2344 {} 2345 else 2346 continue; 2347 else 2348 continue; 2349 else 2350 continue; 2351 else 2352 continue; 2353 else 2354 continue; 2355 else 2356 continue; 2357 else 2358 continue; 2359 else 2360 continue; 2361 else 2362 continue; 2363 else 2364 continue; 2365 else 2366 continue; 2367 else if(p[pixel[5]] < c_b) 2368 if(p[pixel[6]] < c_b) 2369 if(p[pixel[7]] < c_b) 2370 if(p[pixel[8]] < c_b) 2371 if(p[pixel[9]] < c_b) 2372 if(p[pixel[10]] < c_b) 2373 if(p[pixel[11]] < c_b) 2374 if(p[pixel[12]] < c_b) 2375 if(p[pixel[13]] < c_b) 2376 if(p[pixel[14]] < c_b) 2377 if(p[pixel[15]] < c_b) 2378 {} 2379 else 2380 if(p[pixel[3]] < c_b) 2381 if(p[pixel[4]] < c_b) 2382 {} 2383 else 2384 continue; 2385 else 2386 continue; 2387 else 2388 if(p[pixel[2]] < c_b) 2389 if(p[pixel[3]] < c_b) 2390 if(p[pixel[4]] < c_b) 2391 {} 2392 else 2393 continue; 2394 else 2395 continue; 2396 else 2397 continue; 2398 else 2399 continue; 2400 else 2401 continue; 2402 else 2403 continue; 2404 else 2405 continue; 2406 else 2407 continue; 2408 else 2409 continue; 2410 else 2411 continue; 2412 else 2413 continue; 2414 else 2415 continue; 2416 else if(p[pixel[1]] < c_b) 2417 if(p[pixel[2]] > cb) 2418 if(p[pixel[6]] > cb) 2419 if(p[pixel[4]] > cb) 2420 if(p[pixel[5]] > cb) 2421 if(p[pixel[7]] > cb) 2422 if(p[pixel[8]] > cb) 2423 if(p[pixel[9]] > cb) 2424 if(p[pixel[10]] > cb) 2425 if(p[pixel[11]] > cb) 2426 if(p[pixel[12]] > cb) 2427 if(p[pixel[13]] > cb) 2428 if(p[pixel[3]] > cb) 2429 {} 2430 else 2431 if(p[pixel[14]] > cb) 2432 if(p[pixel[15]] > cb) 2433 {} 2434 else 2435 continue; 2436 else 2437 continue; 2438 else 2439 continue; 2440 else 2441 continue; 2442 else 2443 continue; 2444 else 2445 continue; 2446 else 2447 continue; 2448 else 2449 continue; 2450 else 2451 continue; 2452 else 2453 continue; 2454 else 2455 continue; 2456 else if(p[pixel[6]] < c_b) 2457 if(p[pixel[7]] < c_b) 2458 if(p[pixel[8]] < c_b) 2459 if(p[pixel[9]] < c_b) 2460 if(p[pixel[10]] < c_b) 2461 if(p[pixel[11]] < c_b) 2462 if(p[pixel[12]] < c_b) 2463 if(p[pixel[13]] < c_b) 2464 if(p[pixel[14]] < c_b) 2465 if(p[pixel[15]] < c_b) 2466 {} 2467 else 2468 if(p[pixel[3]] < c_b) 2469 if(p[pixel[4]] < c_b) 2470 if(p[pixel[5]] < c_b) 2471 {} 2472 else 2473 continue; 2474 else 2475 continue; 2476 else 2477 continue; 2478 else 2479 continue; 2480 else 2481 continue; 2482 else 2483 continue; 2484 else 2485 continue; 2486 else 2487 continue; 2488 else 2489 continue; 2490 else 2491 continue; 2492 else 2493 continue; 2494 else 2495 continue; 2496 else if(p[pixel[2]] < c_b) 2497 if(p[pixel[3]] > cb) 2498 if(p[pixel[15]] < c_b) 2499 if(p[pixel[7]] > cb) 2500 if(p[pixel[4]] > cb) 2501 if(p[pixel[5]] > cb) 2502 if(p[pixel[6]] > cb) 2503 if(p[pixel[8]] > cb) 2504 if(p[pixel[9]] > cb) 2505 if(p[pixel[10]] > cb) 2506 if(p[pixel[11]] > cb) 2507 if(p[pixel[12]] > cb) 2508 if(p[pixel[13]] > cb) 2509 if(p[pixel[14]] > cb) 2510 {} 2511 else 2512 continue; 2513 else 2514 continue; 2515 else 2516 continue; 2517 else 2518 continue; 2519 else 2520 continue; 2521 else 2522 continue; 2523 else 2524 continue; 2525 else 2526 continue; 2527 else 2528 continue; 2529 else 2530 continue; 2531 else if(p[pixel[7]] < c_b) 2532 if(p[pixel[8]] < c_b) 2533 if(p[pixel[9]] < c_b) 2534 if(p[pixel[10]] < c_b) 2535 if(p[pixel[11]] < c_b) 2536 if(p[pixel[12]] < c_b) 2537 if(p[pixel[13]] < c_b) 2538 if(p[pixel[14]] < c_b) 2539 {} 2540 else 2541 continue; 2542 else 2543 continue; 2544 else 2545 continue; 2546 else 2547 continue; 2548 else 2549 continue; 2550 else 2551 continue; 2552 else 2553 continue; 2554 else 2555 continue; 2556 else 2557 if(p[pixel[4]] > cb) 2558 if(p[pixel[5]] > cb) 2559 if(p[pixel[6]] > cb) 2560 if(p[pixel[7]] > cb) 2561 if(p[pixel[8]] > cb) 2562 if(p[pixel[9]] > cb) 2563 if(p[pixel[10]] > cb) 2564 if(p[pixel[11]] > cb) 2565 if(p[pixel[12]] > cb) 2566 if(p[pixel[13]] > cb) 2567 if(p[pixel[14]] > cb) 2568 {} 2569 else 2570 continue; 2571 else 2572 continue; 2573 else 2574 continue; 2575 else 2576 continue; 2577 else 2578 continue; 2579 else 2580 continue; 2581 else 2582 continue; 2583 else 2584 continue; 2585 else 2586 continue; 2587 else 2588 continue; 2589 else 2590 continue; 2591 else if(p[pixel[3]] < c_b) 2592 if(p[pixel[4]] > cb) 2593 if(p[pixel[8]] > cb) 2594 if(p[pixel[5]] > cb) 2595 if(p[pixel[6]] > cb) 2596 if(p[pixel[7]] > cb) 2597 if(p[pixel[9]] > cb) 2598 if(p[pixel[10]] > cb) 2599 if(p[pixel[11]] > cb) 2600 if(p[pixel[12]] > cb) 2601 if(p[pixel[13]] > cb) 2602 if(p[pixel[14]] > cb) 2603 if(p[pixel[15]] > cb) 2604 {} 2605 else 2606 continue; 2607 else 2608 continue; 2609 else 2610 continue; 2611 else 2612 continue; 2613 else 2614 continue; 2615 else 2616 continue; 2617 else 2618 continue; 2619 else 2620 continue; 2621 else 2622 continue; 2623 else 2624 continue; 2625 else if(p[pixel[8]] < c_b) 2626 if(p[pixel[9]] < c_b) 2627 if(p[pixel[10]] < c_b) 2628 if(p[pixel[11]] < c_b) 2629 if(p[pixel[12]] < c_b) 2630 if(p[pixel[13]] < c_b) 2631 if(p[pixel[14]] < c_b) 2632 if(p[pixel[15]] < c_b) 2633 {} 2634 else 2635 continue; 2636 else 2637 continue; 2638 else 2639 continue; 2640 else 2641 continue; 2642 else 2643 continue; 2644 else 2645 continue; 2646 else 2647 continue; 2648 else 2649 continue; 2650 else if(p[pixel[4]] < c_b) 2651 if(p[pixel[5]] < c_b) 2652 if(p[pixel[6]] < c_b) 2653 if(p[pixel[7]] < c_b) 2654 if(p[pixel[8]] < c_b) 2655 if(p[pixel[9]] < c_b) 2656 if(p[pixel[10]] < c_b) 2657 if(p[pixel[11]] < c_b) 2658 {} 2659 else 2660 if(p[pixel[15]] < c_b) 2661 {} 2662 else 2663 continue; 2664 else 2665 if(p[pixel[14]] < c_b) 2666 if(p[pixel[15]] < c_b) 2667 {} 2668 else 2669 continue; 2670 else 2671 continue; 2672 else 2673 if(p[pixel[13]] < c_b) 2674 if(p[pixel[14]] < c_b) 2675 if(p[pixel[15]] < c_b) 2676 {} 2677 else 2678 continue; 2679 else 2680 continue; 2681 else 2682 continue; 2683 else 2684 if(p[pixel[12]] < c_b) 2685 if(p[pixel[13]] < c_b) 2686 if(p[pixel[14]] < c_b) 2687 if(p[pixel[15]] < c_b) 2688 {} 2689 else 2690 continue; 2691 else 2692 continue; 2693 else 2694 continue; 2695 else 2696 continue; 2697 else 2698 if(p[pixel[11]] < c_b) 2699 if(p[pixel[12]] < c_b) 2700 if(p[pixel[13]] < c_b) 2701 if(p[pixel[14]] < c_b) 2702 if(p[pixel[15]] < c_b) 2703 {} 2704 else 2705 continue; 2706 else 2707 continue; 2708 else 2709 continue; 2710 else 2711 continue; 2712 else 2713 continue; 2714 else 2715 if(p[pixel[10]] < c_b) 2716 if(p[pixel[11]] < c_b) 2717 if(p[pixel[12]] < c_b) 2718 if(p[pixel[13]] < c_b) 2719 if(p[pixel[14]] < c_b) 2720 if(p[pixel[15]] < c_b) 2721 {} 2722 else 2723 continue; 2724 else 2725 continue; 2726 else 2727 continue; 2728 else 2729 continue; 2730 else 2731 continue; 2732 else 2733 continue; 2734 else 2735 if(p[pixel[9]] < c_b) 2736 if(p[pixel[10]] < c_b) 2737 if(p[pixel[11]] < c_b) 2738 if(p[pixel[12]] < c_b) 2739 if(p[pixel[13]] < c_b) 2740 if(p[pixel[14]] < c_b) 2741 if(p[pixel[15]] < c_b) 2742 {} 2743 else 2744 continue; 2745 else 2746 continue; 2747 else 2748 continue; 2749 else 2750 continue; 2751 else 2752 continue; 2753 else 2754 continue; 2755 else 2756 continue; 2757 else 2758 if(p[pixel[8]] < c_b) 2759 if(p[pixel[9]] < c_b) 2760 if(p[pixel[10]] < c_b) 2761 if(p[pixel[11]] < c_b) 2762 if(p[pixel[12]] < c_b) 2763 if(p[pixel[13]] < c_b) 2764 if(p[pixel[14]] < c_b) 2765 if(p[pixel[15]] < c_b) 2766 {} 2767 else 2768 continue; 2769 else 2770 continue; 2771 else 2772 continue; 2773 else 2774 continue; 2775 else 2776 continue; 2777 else 2778 continue; 2779 else 2780 continue; 2781 else 2782 continue; 2783 else 2784 if(p[pixel[7]] > cb) 2785 if(p[pixel[4]] > cb) 2786 if(p[pixel[5]] > cb) 2787 if(p[pixel[6]] > cb) 2788 if(p[pixel[8]] > cb) 2789 if(p[pixel[9]] > cb) 2790 if(p[pixel[10]] > cb) 2791 if(p[pixel[11]] > cb) 2792 if(p[pixel[12]] > cb) 2793 if(p[pixel[13]] > cb) 2794 if(p[pixel[14]] > cb) 2795 if(p[pixel[15]] > cb) 2796 {} 2797 else 2798 continue; 2799 else 2800 continue; 2801 else 2802 continue; 2803 else 2804 continue; 2805 else 2806 continue; 2807 else 2808 continue; 2809 else 2810 continue; 2811 else 2812 continue; 2813 else 2814 continue; 2815 else 2816 continue; 2817 else 2818 continue; 2819 else if(p[pixel[7]] < c_b) 2820 if(p[pixel[8]] < c_b) 2821 if(p[pixel[9]] < c_b) 2822 if(p[pixel[10]] < c_b) 2823 if(p[pixel[11]] < c_b) 2824 if(p[pixel[12]] < c_b) 2825 if(p[pixel[13]] < c_b) 2826 if(p[pixel[14]] < c_b) 2827 if(p[pixel[15]] < c_b) 2828 {} 2829 else 2830 continue; 2831 else 2832 continue; 2833 else 2834 continue; 2835 else 2836 continue; 2837 else 2838 continue; 2839 else 2840 continue; 2841 else 2842 continue; 2843 else 2844 continue; 2845 else 2846 continue; 2847 else 2848 if(p[pixel[6]] > cb) 2849 if(p[pixel[4]] > cb) 2850 if(p[pixel[5]] > cb) 2851 if(p[pixel[7]] > cb) 2852 if(p[pixel[8]] > cb) 2853 if(p[pixel[9]] > cb) 2854 if(p[pixel[10]] > cb) 2855 if(p[pixel[11]] > cb) 2856 if(p[pixel[12]] > cb) 2857 if(p[pixel[13]] > cb) 2858 if(p[pixel[14]] > cb) 2859 if(p[pixel[3]] > cb) 2860 {} 2861 else 2862 if(p[pixel[15]] > cb) 2863 {} 2864 else 2865 continue; 2866 else 2867 continue; 2868 else 2869 continue; 2870 else 2871 continue; 2872 else 2873 continue; 2874 else 2875 continue; 2876 else 2877 continue; 2878 else 2879 continue; 2880 else 2881 continue; 2882 else 2883 continue; 2884 else 2885 continue; 2886 else if(p[pixel[6]] < c_b) 2887 if(p[pixel[7]] < c_b) 2888 if(p[pixel[8]] < c_b) 2889 if(p[pixel[9]] < c_b) 2890 if(p[pixel[10]] < c_b) 2891 if(p[pixel[11]] < c_b) 2892 if(p[pixel[12]] < c_b) 2893 if(p[pixel[13]] < c_b) 2894 if(p[pixel[14]] < c_b) 2895 if(p[pixel[15]] < c_b) 2896 {} 2897 else 2898 if(p[pixel[3]] < c_b) 2899 if(p[pixel[4]] < c_b) 2900 if(p[pixel[5]] < c_b) 2901 {} 2902 else 2903 continue; 2904 else 2905 continue; 2906 else 2907 continue; 2908 else 2909 continue; 2910 else 2911 continue; 2912 else 2913 continue; 2914 else 2915 continue; 2916 else 2917 continue; 2918 else 2919 continue; 2920 else 2921 continue; 2922 else 2923 continue; 2924 else 2925 continue; 2926 else 2927 if(p[pixel[5]] > cb) 2928 if(p[pixel[4]] > cb) 2929 if(p[pixel[6]] > cb) 2930 if(p[pixel[7]] > cb) 2931 if(p[pixel[8]] > cb) 2932 if(p[pixel[9]] > cb) 2933 if(p[pixel[10]] > cb) 2934 if(p[pixel[11]] > cb) 2935 if(p[pixel[12]] > cb) 2936 if(p[pixel[13]] > cb) 2937 if(p[pixel[3]] > cb) 2938 if(p[pixel[2]] > cb) 2939 {} 2940 else 2941 if(p[pixel[14]] > cb) 2942 {} 2943 else 2944 continue; 2945 else 2946 if(p[pixel[14]] > cb) 2947 if(p[pixel[15]] > cb) 2948 {} 2949 else 2950 continue; 2951 else 2952 continue; 2953 else 2954 continue; 2955 else 2956 continue; 2957 else 2958 continue; 2959 else 2960 continue; 2961 else 2962 continue; 2963 else 2964 continue; 2965 else 2966 continue; 2967 else 2968 continue; 2969 else 2970 continue; 2971 else if(p[pixel[5]] < c_b) 2972 if(p[pixel[6]] < c_b) 2973 if(p[pixel[7]] < c_b) 2974 if(p[pixel[8]] < c_b) 2975 if(p[pixel[9]] < c_b) 2976 if(p[pixel[10]] < c_b) 2977 if(p[pixel[11]] < c_b) 2978 if(p[pixel[12]] < c_b) 2979 if(p[pixel[13]] < c_b) 2980 if(p[pixel[14]] < c_b) 2981 if(p[pixel[15]] < c_b) 2982 {} 2983 else 2984 if(p[pixel[3]] < c_b) 2985 if(p[pixel[4]] < c_b) 2986 {} 2987 else 2988 continue; 2989 else 2990 continue; 2991 else 2992 if(p[pixel[2]] < c_b) 2993 if(p[pixel[3]] < c_b) 2994 if(p[pixel[4]] < c_b) 2995 {} 2996 else 2997 continue; 2998 else 2999 continue; 3000 else 3001 continue; 3002 else 3003 continue; 3004 else 3005 continue; 3006 else 3007 continue; 3008 else 3009 continue; 3010 else 3011 continue; 3012 else 3013 continue; 3014 else 3015 continue; 3016 else 3017 continue; 3018 else 3019 continue; 3020 else 3021 if(p[pixel[4]] > cb) 3022 if(p[pixel[5]] > cb) 3023 if(p[pixel[6]] > cb) 3024 if(p[pixel[7]] > cb) 3025 if(p[pixel[8]] > cb) 3026 if(p[pixel[9]] > cb) 3027 if(p[pixel[10]] > cb) 3028 if(p[pixel[11]] > cb) 3029 if(p[pixel[12]] > cb) 3030 if(p[pixel[3]] > cb) 3031 if(p[pixel[2]] > cb) 3032 if(p[pixel[1]] > cb) 3033 {} 3034 else 3035 if(p[pixel[13]] > cb) 3036 {} 3037 else 3038 continue; 3039 else 3040 if(p[pixel[13]] > cb) 3041 if(p[pixel[14]] > cb) 3042 {} 3043 else 3044 continue; 3045 else 3046 continue; 3047 else 3048 if(p[pixel[13]] > cb) 3049 if(p[pixel[14]] > cb) 3050 if(p[pixel[15]] > cb) 3051 {} 3052 else 3053 continue; 3054 else 3055 continue; 3056 else 3057 continue; 3058 else 3059 continue; 3060 else 3061 continue; 3062 else 3063 continue; 3064 else 3065 continue; 3066 else 3067 continue; 3068 else 3069 continue; 3070 else 3071 continue; 3072 else 3073 continue; 3074 else if(p[pixel[4]] < c_b) 3075 if(p[pixel[5]] < c_b) 3076 if(p[pixel[6]] < c_b) 3077 if(p[pixel[7]] < c_b) 3078 if(p[pixel[8]] < c_b) 3079 if(p[pixel[9]] < c_b) 3080 if(p[pixel[10]] < c_b) 3081 if(p[pixel[11]] < c_b) 3082 if(p[pixel[12]] < c_b) 3083 if(p[pixel[3]] < c_b) 3084 if(p[pixel[2]] < c_b) 3085 if(p[pixel[1]] < c_b) 3086 {} 3087 else 3088 if(p[pixel[13]] < c_b) 3089 {} 3090 else 3091 continue; 3092 else 3093 if(p[pixel[13]] < c_b) 3094 if(p[pixel[14]] < c_b) 3095 {} 3096 else 3097 continue; 3098 else 3099 continue; 3100 else 3101 if(p[pixel[13]] < c_b) 3102 if(p[pixel[14]] < c_b) 3103 if(p[pixel[15]] < c_b) 3104 {} 3105 else 3106 continue; 3107 else 3108 continue; 3109 else 3110 continue; 3111 else 3112 continue; 3113 else 3114 continue; 3115 else 3116 continue; 3117 else 3118 continue; 3119 else 3120 continue; 3121 else 3122 continue; 3123 else 3124 continue; 3125 else 3126 continue; 3127 else 3128 continue; 3129 if(num_corners == rsize) 3130 { 3131 rsize*=2; 3132 ret_corners = cast(xy*)realloc(ret_corners, xy.sizeof*rsize); 3133 } 3134 3135 ret_corners[num_corners].x = x; 3136 ret_corners[num_corners].y = y; 3137 num_corners++; 3138 } 3139 3140 *ret_num_corners = num_corners; 3141 return ret_corners; 3142 3143 } 3144