00001
00002 #include <stdlib.h>
00003
00004 typedef struct { int x, y; } xy;
00005 typedef unsigned char byte;
00006
00007 int fast12_corner_score(const byte* p, const int pixel[], int bstart)
00008 {
00009 int bmin = bstart;
00010 int bmax = 255;
00011 int b = (bmax + bmin)/2;
00012
00013
00014 for(;;)
00015 {
00016 int cb = *p + b;
00017 int c_b= *p - b;
00018
00019
00020 if( p[pixel[0]] > cb)
00021 if( p[pixel[1]] > cb)
00022 if( p[pixel[2]] > cb)
00023 if( p[pixel[3]] > cb)
00024 if( p[pixel[4]] > cb)
00025 if( p[pixel[5]] > cb)
00026 if( p[pixel[6]] > cb)
00027 if( p[pixel[7]] > cb)
00028 if( p[pixel[8]] > cb)
00029 if( p[pixel[9]] > cb)
00030 if( p[pixel[10]] > cb)
00031 if( p[pixel[11]] > cb)
00032 goto is_a_corner;
00033 else
00034 if( p[pixel[15]] > cb)
00035 goto is_a_corner;
00036 else
00037 goto is_not_a_corner;
00038 else
00039 if( p[pixel[14]] > cb)
00040 if( p[pixel[15]] > cb)
00041 goto is_a_corner;
00042 else
00043 goto is_not_a_corner;
00044 else
00045 goto is_not_a_corner;
00046 else
00047 if( p[pixel[13]] > cb)
00048 if( p[pixel[14]] > cb)
00049 if( p[pixel[15]] > cb)
00050 goto is_a_corner;
00051 else
00052 goto is_not_a_corner;
00053 else
00054 goto is_not_a_corner;
00055 else
00056 goto is_not_a_corner;
00057 else
00058 if( p[pixel[12]] > cb)
00059 if( p[pixel[13]] > cb)
00060 if( p[pixel[14]] > cb)
00061 if( p[pixel[15]] > cb)
00062 goto is_a_corner;
00063 else
00064 goto is_not_a_corner;
00065 else
00066 goto is_not_a_corner;
00067 else
00068 goto is_not_a_corner;
00069 else
00070 goto is_not_a_corner;
00071 else
00072 if( p[pixel[11]] > cb)
00073 if( p[pixel[12]] > cb)
00074 if( p[pixel[13]] > cb)
00075 if( p[pixel[14]] > cb)
00076 if( p[pixel[15]] > cb)
00077 goto is_a_corner;
00078 else
00079 goto is_not_a_corner;
00080 else
00081 goto is_not_a_corner;
00082 else
00083 goto is_not_a_corner;
00084 else
00085 goto is_not_a_corner;
00086 else
00087 goto is_not_a_corner;
00088 else
00089 if( p[pixel[10]] > cb)
00090 if( p[pixel[11]] > cb)
00091 if( p[pixel[12]] > cb)
00092 if( p[pixel[13]] > cb)
00093 if( p[pixel[14]] > cb)
00094 if( p[pixel[15]] > cb)
00095 goto is_a_corner;
00096 else
00097 goto is_not_a_corner;
00098 else
00099 goto is_not_a_corner;
00100 else
00101 goto is_not_a_corner;
00102 else
00103 goto is_not_a_corner;
00104 else
00105 goto is_not_a_corner;
00106 else
00107 goto is_not_a_corner;
00108 else
00109 if( p[pixel[9]] > cb)
00110 if( p[pixel[10]] > cb)
00111 if( p[pixel[11]] > cb)
00112 if( p[pixel[12]] > cb)
00113 if( p[pixel[13]] > cb)
00114 if( p[pixel[14]] > cb)
00115 if( p[pixel[15]] > cb)
00116 goto is_a_corner;
00117 else
00118 goto is_not_a_corner;
00119 else
00120 goto is_not_a_corner;
00121 else
00122 goto is_not_a_corner;
00123 else
00124 goto is_not_a_corner;
00125 else
00126 goto is_not_a_corner;
00127 else
00128 goto is_not_a_corner;
00129 else
00130 goto is_not_a_corner;
00131 else if( p[pixel[4]] < c_b)
00132 if( p[pixel[8]] > cb)
00133 if( p[pixel[9]] > cb)
00134 if( p[pixel[10]] > cb)
00135 if( p[pixel[11]] > cb)
00136 if( p[pixel[12]] > cb)
00137 if( p[pixel[13]] > cb)
00138 if( p[pixel[14]] > cb)
00139 if( p[pixel[15]] > cb)
00140 goto is_a_corner;
00141 else
00142 goto is_not_a_corner;
00143 else
00144 goto is_not_a_corner;
00145 else
00146 goto is_not_a_corner;
00147 else
00148 goto is_not_a_corner;
00149 else
00150 goto is_not_a_corner;
00151 else
00152 goto is_not_a_corner;
00153 else
00154 goto is_not_a_corner;
00155 else if( p[pixel[8]] < c_b)
00156 if( p[pixel[5]] < c_b)
00157 if( p[pixel[6]] < c_b)
00158 if( p[pixel[7]] < c_b)
00159 if( p[pixel[9]] < c_b)
00160 if( p[pixel[10]] < c_b)
00161 if( p[pixel[11]] < c_b)
00162 if( p[pixel[12]] < c_b)
00163 if( p[pixel[13]] < c_b)
00164 if( p[pixel[14]] < c_b)
00165 if( p[pixel[15]] < c_b)
00166 goto is_a_corner;
00167 else
00168 goto is_not_a_corner;
00169 else
00170 goto is_not_a_corner;
00171 else
00172 goto is_not_a_corner;
00173 else
00174 goto is_not_a_corner;
00175 else
00176 goto is_not_a_corner;
00177 else
00178 goto is_not_a_corner;
00179 else
00180 goto is_not_a_corner;
00181 else
00182 goto is_not_a_corner;
00183 else
00184 goto is_not_a_corner;
00185 else
00186 goto is_not_a_corner;
00187 else
00188 goto is_not_a_corner;
00189 else
00190 if( p[pixel[8]] > cb)
00191 if( p[pixel[9]] > cb)
00192 if( p[pixel[10]] > cb)
00193 if( p[pixel[11]] > cb)
00194 if( p[pixel[12]] > cb)
00195 if( p[pixel[13]] > cb)
00196 if( p[pixel[14]] > cb)
00197 if( p[pixel[15]] > cb)
00198 goto is_a_corner;
00199 else
00200 goto is_not_a_corner;
00201 else
00202 goto is_not_a_corner;
00203 else
00204 goto is_not_a_corner;
00205 else
00206 goto is_not_a_corner;
00207 else
00208 goto is_not_a_corner;
00209 else
00210 goto is_not_a_corner;
00211 else
00212 goto is_not_a_corner;
00213 else
00214 goto is_not_a_corner;
00215 else if( p[pixel[3]] < c_b)
00216 if( p[pixel[15]] > cb)
00217 if( p[pixel[7]] > cb)
00218 if( p[pixel[8]] > cb)
00219 if( p[pixel[9]] > cb)
00220 if( p[pixel[10]] > cb)
00221 if( p[pixel[11]] > cb)
00222 if( p[pixel[12]] > cb)
00223 if( p[pixel[13]] > cb)
00224 if( p[pixel[14]] > cb)
00225 goto is_a_corner;
00226 else
00227 goto is_not_a_corner;
00228 else
00229 goto is_not_a_corner;
00230 else
00231 goto is_not_a_corner;
00232 else
00233 goto is_not_a_corner;
00234 else
00235 goto is_not_a_corner;
00236 else
00237 goto is_not_a_corner;
00238 else
00239 goto is_not_a_corner;
00240 else if( p[pixel[7]] < c_b)
00241 if( p[pixel[4]] < c_b)
00242 if( p[pixel[5]] < c_b)
00243 if( p[pixel[6]] < c_b)
00244 if( p[pixel[8]] < c_b)
00245 if( p[pixel[9]] < c_b)
00246 if( p[pixel[10]] < c_b)
00247 if( p[pixel[11]] < c_b)
00248 if( p[pixel[12]] < c_b)
00249 if( p[pixel[13]] < c_b)
00250 if( p[pixel[14]] < c_b)
00251 goto is_a_corner;
00252 else
00253 goto is_not_a_corner;
00254 else
00255 goto is_not_a_corner;
00256 else
00257 goto is_not_a_corner;
00258 else
00259 goto is_not_a_corner;
00260 else
00261 goto is_not_a_corner;
00262 else
00263 goto is_not_a_corner;
00264 else
00265 goto is_not_a_corner;
00266 else
00267 goto is_not_a_corner;
00268 else
00269 goto is_not_a_corner;
00270 else
00271 goto is_not_a_corner;
00272 else
00273 goto is_not_a_corner;
00274 else
00275 if( p[pixel[4]] < c_b)
00276 if( p[pixel[5]] < c_b)
00277 if( p[pixel[6]] < c_b)
00278 if( p[pixel[7]] < c_b)
00279 if( p[pixel[8]] < c_b)
00280 if( p[pixel[9]] < c_b)
00281 if( p[pixel[10]] < c_b)
00282 if( p[pixel[11]] < c_b)
00283 if( p[pixel[12]] < c_b)
00284 if( p[pixel[13]] < c_b)
00285 if( p[pixel[14]] < c_b)
00286 goto is_a_corner;
00287 else
00288 goto is_not_a_corner;
00289 else
00290 goto is_not_a_corner;
00291 else
00292 goto is_not_a_corner;
00293 else
00294 goto is_not_a_corner;
00295 else
00296 goto is_not_a_corner;
00297 else
00298 goto is_not_a_corner;
00299 else
00300 goto is_not_a_corner;
00301 else
00302 goto is_not_a_corner;
00303 else
00304 goto is_not_a_corner;
00305 else
00306 goto is_not_a_corner;
00307 else
00308 goto is_not_a_corner;
00309 else
00310 if( p[pixel[7]] > cb)
00311 if( p[pixel[8]] > cb)
00312 if( p[pixel[9]] > cb)
00313 if( p[pixel[10]] > cb)
00314 if( p[pixel[11]] > cb)
00315 if( p[pixel[12]] > cb)
00316 if( p[pixel[13]] > cb)
00317 if( p[pixel[14]] > cb)
00318 if( p[pixel[15]] > cb)
00319 goto is_a_corner;
00320 else
00321 goto is_not_a_corner;
00322 else
00323 goto is_not_a_corner;
00324 else
00325 goto is_not_a_corner;
00326 else
00327 goto is_not_a_corner;
00328 else
00329 goto is_not_a_corner;
00330 else
00331 goto is_not_a_corner;
00332 else
00333 goto is_not_a_corner;
00334 else
00335 goto is_not_a_corner;
00336 else if( p[pixel[7]] < c_b)
00337 if( p[pixel[4]] < c_b)
00338 if( p[pixel[5]] < c_b)
00339 if( p[pixel[6]] < c_b)
00340 if( p[pixel[8]] < c_b)
00341 if( p[pixel[9]] < c_b)
00342 if( p[pixel[10]] < c_b)
00343 if( p[pixel[11]] < c_b)
00344 if( p[pixel[12]] < c_b)
00345 if( p[pixel[13]] < c_b)
00346 if( p[pixel[14]] < c_b)
00347 if( p[pixel[15]] < c_b)
00348 goto is_a_corner;
00349 else
00350 goto is_not_a_corner;
00351 else
00352 goto is_not_a_corner;
00353 else
00354 goto is_not_a_corner;
00355 else
00356 goto is_not_a_corner;
00357 else
00358 goto is_not_a_corner;
00359 else
00360 goto is_not_a_corner;
00361 else
00362 goto is_not_a_corner;
00363 else
00364 goto is_not_a_corner;
00365 else
00366 goto is_not_a_corner;
00367 else
00368 goto is_not_a_corner;
00369 else
00370 goto is_not_a_corner;
00371 else
00372 goto is_not_a_corner;
00373 else if( p[pixel[2]] < c_b)
00374 if( p[pixel[6]] > cb)
00375 if( p[pixel[7]] > cb)
00376 if( p[pixel[8]] > cb)
00377 if( p[pixel[9]] > cb)
00378 if( p[pixel[10]] > cb)
00379 if( p[pixel[11]] > cb)
00380 if( p[pixel[12]] > cb)
00381 if( p[pixel[13]] > cb)
00382 if( p[pixel[14]] > cb)
00383 if( p[pixel[15]] > cb)
00384 goto is_a_corner;
00385 else
00386 if( p[pixel[3]] > cb)
00387 if( p[pixel[4]] > cb)
00388 if( p[pixel[5]] > cb)
00389 goto is_a_corner;
00390 else
00391 goto is_not_a_corner;
00392 else
00393 goto is_not_a_corner;
00394 else
00395 goto is_not_a_corner;
00396 else
00397 goto is_not_a_corner;
00398 else
00399 goto is_not_a_corner;
00400 else
00401 goto is_not_a_corner;
00402 else
00403 goto is_not_a_corner;
00404 else
00405 goto is_not_a_corner;
00406 else
00407 goto is_not_a_corner;
00408 else
00409 goto is_not_a_corner;
00410 else
00411 goto is_not_a_corner;
00412 else if( p[pixel[6]] < c_b)
00413 if( p[pixel[4]] < c_b)
00414 if( p[pixel[5]] < c_b)
00415 if( p[pixel[7]] < c_b)
00416 if( p[pixel[8]] < c_b)
00417 if( p[pixel[9]] < c_b)
00418 if( p[pixel[10]] < c_b)
00419 if( p[pixel[11]] < c_b)
00420 if( p[pixel[12]] < c_b)
00421 if( p[pixel[13]] < c_b)
00422 if( p[pixel[3]] < c_b)
00423 goto is_a_corner;
00424 else
00425 if( p[pixel[14]] < c_b)
00426 if( p[pixel[15]] < c_b)
00427 goto is_a_corner;
00428 else
00429 goto is_not_a_corner;
00430 else
00431 goto is_not_a_corner;
00432 else
00433 goto is_not_a_corner;
00434 else
00435 goto is_not_a_corner;
00436 else
00437 goto is_not_a_corner;
00438 else
00439 goto is_not_a_corner;
00440 else
00441 goto is_not_a_corner;
00442 else
00443 goto is_not_a_corner;
00444 else
00445 goto is_not_a_corner;
00446 else
00447 goto is_not_a_corner;
00448 else
00449 goto is_not_a_corner;
00450 else
00451 goto is_not_a_corner;
00452 else
00453 if( p[pixel[6]] > cb)
00454 if( p[pixel[7]] > cb)
00455 if( p[pixel[8]] > cb)
00456 if( p[pixel[9]] > cb)
00457 if( p[pixel[10]] > cb)
00458 if( p[pixel[11]] > cb)
00459 if( p[pixel[12]] > cb)
00460 if( p[pixel[13]] > cb)
00461 if( p[pixel[14]] > cb)
00462 if( p[pixel[15]] > cb)
00463 goto is_a_corner;
00464 else
00465 if( p[pixel[3]] > cb)
00466 if( p[pixel[4]] > cb)
00467 if( p[pixel[5]] > cb)
00468 goto is_a_corner;
00469 else
00470 goto is_not_a_corner;
00471 else
00472 goto is_not_a_corner;
00473 else
00474 goto is_not_a_corner;
00475 else
00476 goto is_not_a_corner;
00477 else
00478 goto is_not_a_corner;
00479 else
00480 goto is_not_a_corner;
00481 else
00482 goto is_not_a_corner;
00483 else
00484 goto is_not_a_corner;
00485 else
00486 goto is_not_a_corner;
00487 else
00488 goto is_not_a_corner;
00489 else
00490 goto is_not_a_corner;
00491 else if( p[pixel[6]] < c_b)
00492 if( p[pixel[4]] < c_b)
00493 if( p[pixel[5]] < c_b)
00494 if( p[pixel[7]] < c_b)
00495 if( p[pixel[8]] < c_b)
00496 if( p[pixel[9]] < c_b)
00497 if( p[pixel[10]] < c_b)
00498 if( p[pixel[11]] < c_b)
00499 if( p[pixel[12]] < c_b)
00500 if( p[pixel[13]] < c_b)
00501 if( p[pixel[14]] < c_b)
00502 if( p[pixel[3]] < c_b)
00503 goto is_a_corner;
00504 else
00505 if( p[pixel[15]] < c_b)
00506 goto is_a_corner;
00507 else
00508 goto is_not_a_corner;
00509 else
00510 goto is_not_a_corner;
00511 else
00512 goto is_not_a_corner;
00513 else
00514 goto is_not_a_corner;
00515 else
00516 goto is_not_a_corner;
00517 else
00518 goto is_not_a_corner;
00519 else
00520 goto is_not_a_corner;
00521 else
00522 goto is_not_a_corner;
00523 else
00524 goto is_not_a_corner;
00525 else
00526 goto is_not_a_corner;
00527 else
00528 goto is_not_a_corner;
00529 else
00530 goto is_not_a_corner;
00531 else if( p[pixel[1]] < c_b)
00532 if( p[pixel[5]] > cb)
00533 if( p[pixel[6]] > cb)
00534 if( p[pixel[7]] > cb)
00535 if( p[pixel[8]] > cb)
00536 if( p[pixel[9]] > cb)
00537 if( p[pixel[10]] > cb)
00538 if( p[pixel[11]] > cb)
00539 if( p[pixel[12]] > cb)
00540 if( p[pixel[13]] > cb)
00541 if( p[pixel[14]] > cb)
00542 if( p[pixel[15]] > cb)
00543 goto is_a_corner;
00544 else
00545 if( p[pixel[3]] > cb)
00546 if( p[pixel[4]] > cb)
00547 goto is_a_corner;
00548 else
00549 goto is_not_a_corner;
00550 else
00551 goto is_not_a_corner;
00552 else
00553 if( p[pixel[2]] > cb)
00554 if( p[pixel[3]] > cb)
00555 if( p[pixel[4]] > cb)
00556 goto is_a_corner;
00557 else
00558 goto is_not_a_corner;
00559 else
00560 goto is_not_a_corner;
00561 else
00562 goto is_not_a_corner;
00563 else
00564 goto is_not_a_corner;
00565 else
00566 goto is_not_a_corner;
00567 else
00568 goto is_not_a_corner;
00569 else
00570 goto is_not_a_corner;
00571 else
00572 goto is_not_a_corner;
00573 else
00574 goto is_not_a_corner;
00575 else
00576 goto is_not_a_corner;
00577 else
00578 goto is_not_a_corner;
00579 else if( p[pixel[5]] < c_b)
00580 if( p[pixel[4]] < c_b)
00581 if( p[pixel[6]] < c_b)
00582 if( p[pixel[7]] < c_b)
00583 if( p[pixel[8]] < c_b)
00584 if( p[pixel[9]] < c_b)
00585 if( p[pixel[10]] < c_b)
00586 if( p[pixel[11]] < c_b)
00587 if( p[pixel[12]] < c_b)
00588 if( p[pixel[3]] < c_b)
00589 if( p[pixel[2]] < c_b)
00590 goto is_a_corner;
00591 else
00592 if( p[pixel[13]] < c_b)
00593 if( p[pixel[14]] < c_b)
00594 goto is_a_corner;
00595 else
00596 goto is_not_a_corner;
00597 else
00598 goto is_not_a_corner;
00599 else
00600 if( p[pixel[13]] < c_b)
00601 if( p[pixel[14]] < c_b)
00602 if( p[pixel[15]] < c_b)
00603 goto is_a_corner;
00604 else
00605 goto is_not_a_corner;
00606 else
00607 goto is_not_a_corner;
00608 else
00609 goto is_not_a_corner;
00610 else
00611 goto is_not_a_corner;
00612 else
00613 goto is_not_a_corner;
00614 else
00615 goto is_not_a_corner;
00616 else
00617 goto is_not_a_corner;
00618 else
00619 goto is_not_a_corner;
00620 else
00621 goto is_not_a_corner;
00622 else
00623 goto is_not_a_corner;
00624 else
00625 goto is_not_a_corner;
00626 else
00627 goto is_not_a_corner;
00628 else
00629 if( p[pixel[5]] > cb)
00630 if( p[pixel[6]] > cb)
00631 if( p[pixel[7]] > cb)
00632 if( p[pixel[8]] > cb)
00633 if( p[pixel[9]] > cb)
00634 if( p[pixel[10]] > cb)
00635 if( p[pixel[11]] > cb)
00636 if( p[pixel[12]] > cb)
00637 if( p[pixel[13]] > cb)
00638 if( p[pixel[14]] > cb)
00639 if( p[pixel[15]] > cb)
00640 goto is_a_corner;
00641 else
00642 if( p[pixel[3]] > cb)
00643 if( p[pixel[4]] > cb)
00644 goto is_a_corner;
00645 else
00646 goto is_not_a_corner;
00647 else
00648 goto is_not_a_corner;
00649 else
00650 if( p[pixel[2]] > cb)
00651 if( p[pixel[3]] > cb)
00652 if( p[pixel[4]] > cb)
00653 goto is_a_corner;
00654 else
00655 goto is_not_a_corner;
00656 else
00657 goto is_not_a_corner;
00658 else
00659 goto is_not_a_corner;
00660 else
00661 goto is_not_a_corner;
00662 else
00663 goto is_not_a_corner;
00664 else
00665 goto is_not_a_corner;
00666 else
00667 goto is_not_a_corner;
00668 else
00669 goto is_not_a_corner;
00670 else
00671 goto is_not_a_corner;
00672 else
00673 goto is_not_a_corner;
00674 else
00675 goto is_not_a_corner;
00676 else if( p[pixel[5]] < c_b)
00677 if( p[pixel[4]] < c_b)
00678 if( p[pixel[6]] < c_b)
00679 if( p[pixel[7]] < c_b)
00680 if( p[pixel[8]] < c_b)
00681 if( p[pixel[9]] < c_b)
00682 if( p[pixel[10]] < c_b)
00683 if( p[pixel[11]] < c_b)
00684 if( p[pixel[12]] < c_b)
00685 if( p[pixel[13]] < c_b)
00686 if( p[pixel[3]] < c_b)
00687 if( p[pixel[2]] < c_b)
00688 goto is_a_corner;
00689 else
00690 if( p[pixel[14]] < c_b)
00691 goto is_a_corner;
00692 else
00693 goto is_not_a_corner;
00694 else
00695 if( p[pixel[14]] < c_b)
00696 if( p[pixel[15]] < c_b)
00697 goto is_a_corner;
00698 else
00699 goto is_not_a_corner;
00700 else
00701 goto is_not_a_corner;
00702 else
00703 goto is_not_a_corner;
00704 else
00705 goto is_not_a_corner;
00706 else
00707 goto is_not_a_corner;
00708 else
00709 goto is_not_a_corner;
00710 else
00711 goto is_not_a_corner;
00712 else
00713 goto is_not_a_corner;
00714 else
00715 goto is_not_a_corner;
00716 else
00717 goto is_not_a_corner;
00718 else
00719 goto is_not_a_corner;
00720 else
00721 goto is_not_a_corner;
00722 else if( p[pixel[0]] < c_b)
00723 if( p[pixel[1]] > cb)
00724 if( p[pixel[5]] > cb)
00725 if( p[pixel[4]] > cb)
00726 if( p[pixel[6]] > cb)
00727 if( p[pixel[7]] > cb)
00728 if( p[pixel[8]] > cb)
00729 if( p[pixel[9]] > cb)
00730 if( p[pixel[10]] > cb)
00731 if( p[pixel[11]] > cb)
00732 if( p[pixel[12]] > cb)
00733 if( p[pixel[3]] > cb)
00734 if( p[pixel[2]] > cb)
00735 goto is_a_corner;
00736 else
00737 if( p[pixel[13]] > cb)
00738 if( p[pixel[14]] > cb)
00739 goto is_a_corner;
00740 else
00741 goto is_not_a_corner;
00742 else
00743 goto is_not_a_corner;
00744 else
00745 if( p[pixel[13]] > cb)
00746 if( p[pixel[14]] > cb)
00747 if( p[pixel[15]] > cb)
00748 goto is_a_corner;
00749 else
00750 goto is_not_a_corner;
00751 else
00752 goto is_not_a_corner;
00753 else
00754 goto is_not_a_corner;
00755 else
00756 goto is_not_a_corner;
00757 else
00758 goto is_not_a_corner;
00759 else
00760 goto is_not_a_corner;
00761 else
00762 goto is_not_a_corner;
00763 else
00764 goto is_not_a_corner;
00765 else
00766 goto is_not_a_corner;
00767 else
00768 goto is_not_a_corner;
00769 else
00770 goto is_not_a_corner;
00771 else if( p[pixel[5]] < c_b)
00772 if( p[pixel[6]] < c_b)
00773 if( p[pixel[7]] < c_b)
00774 if( p[pixel[8]] < c_b)
00775 if( p[pixel[9]] < c_b)
00776 if( p[pixel[10]] < c_b)
00777 if( p[pixel[11]] < c_b)
00778 if( p[pixel[12]] < c_b)
00779 if( p[pixel[13]] < c_b)
00780 if( p[pixel[14]] < c_b)
00781 if( p[pixel[15]] < c_b)
00782 goto is_a_corner;
00783 else
00784 if( p[pixel[3]] < c_b)
00785 if( p[pixel[4]] < c_b)
00786 goto is_a_corner;
00787 else
00788 goto is_not_a_corner;
00789 else
00790 goto is_not_a_corner;
00791 else
00792 if( p[pixel[2]] < c_b)
00793 if( p[pixel[3]] < c_b)
00794 if( p[pixel[4]] < c_b)
00795 goto is_a_corner;
00796 else
00797 goto is_not_a_corner;
00798 else
00799 goto is_not_a_corner;
00800 else
00801 goto is_not_a_corner;
00802 else
00803 goto is_not_a_corner;
00804 else
00805 goto is_not_a_corner;
00806 else
00807 goto is_not_a_corner;
00808 else
00809 goto is_not_a_corner;
00810 else
00811 goto is_not_a_corner;
00812 else
00813 goto is_not_a_corner;
00814 else
00815 goto is_not_a_corner;
00816 else
00817 goto is_not_a_corner;
00818 else
00819 goto is_not_a_corner;
00820 else if( p[pixel[1]] < c_b)
00821 if( p[pixel[2]] > cb)
00822 if( p[pixel[6]] > cb)
00823 if( p[pixel[4]] > cb)
00824 if( p[pixel[5]] > cb)
00825 if( p[pixel[7]] > cb)
00826 if( p[pixel[8]] > cb)
00827 if( p[pixel[9]] > cb)
00828 if( p[pixel[10]] > cb)
00829 if( p[pixel[11]] > cb)
00830 if( p[pixel[12]] > cb)
00831 if( p[pixel[13]] > cb)
00832 if( p[pixel[3]] > cb)
00833 goto is_a_corner;
00834 else
00835 if( p[pixel[14]] > cb)
00836 if( p[pixel[15]] > cb)
00837 goto is_a_corner;
00838 else
00839 goto is_not_a_corner;
00840 else
00841 goto is_not_a_corner;
00842 else
00843 goto is_not_a_corner;
00844 else
00845 goto is_not_a_corner;
00846 else
00847 goto is_not_a_corner;
00848 else
00849 goto is_not_a_corner;
00850 else
00851 goto is_not_a_corner;
00852 else
00853 goto is_not_a_corner;
00854 else
00855 goto is_not_a_corner;
00856 else
00857 goto is_not_a_corner;
00858 else
00859 goto is_not_a_corner;
00860 else if( p[pixel[6]] < c_b)
00861 if( p[pixel[7]] < c_b)
00862 if( p[pixel[8]] < c_b)
00863 if( p[pixel[9]] < c_b)
00864 if( p[pixel[10]] < c_b)
00865 if( p[pixel[11]] < c_b)
00866 if( p[pixel[12]] < c_b)
00867 if( p[pixel[13]] < c_b)
00868 if( p[pixel[14]] < c_b)
00869 if( p[pixel[15]] < c_b)
00870 goto is_a_corner;
00871 else
00872 if( p[pixel[3]] < c_b)
00873 if( p[pixel[4]] < c_b)
00874 if( p[pixel[5]] < c_b)
00875 goto is_a_corner;
00876 else
00877 goto is_not_a_corner;
00878 else
00879 goto is_not_a_corner;
00880 else
00881 goto is_not_a_corner;
00882 else
00883 goto is_not_a_corner;
00884 else
00885 goto is_not_a_corner;
00886 else
00887 goto is_not_a_corner;
00888 else
00889 goto is_not_a_corner;
00890 else
00891 goto is_not_a_corner;
00892 else
00893 goto is_not_a_corner;
00894 else
00895 goto is_not_a_corner;
00896 else
00897 goto is_not_a_corner;
00898 else
00899 goto is_not_a_corner;
00900 else if( p[pixel[2]] < c_b)
00901 if( p[pixel[3]] > cb)
00902 if( p[pixel[15]] < c_b)
00903 if( p[pixel[7]] > cb)
00904 if( p[pixel[4]] > cb)
00905 if( p[pixel[5]] > cb)
00906 if( p[pixel[6]] > cb)
00907 if( p[pixel[8]] > cb)
00908 if( p[pixel[9]] > cb)
00909 if( p[pixel[10]] > cb)
00910 if( p[pixel[11]] > cb)
00911 if( p[pixel[12]] > cb)
00912 if( p[pixel[13]] > cb)
00913 if( p[pixel[14]] > cb)
00914 goto is_a_corner;
00915 else
00916 goto is_not_a_corner;
00917 else
00918 goto is_not_a_corner;
00919 else
00920 goto is_not_a_corner;
00921 else
00922 goto is_not_a_corner;
00923 else
00924 goto is_not_a_corner;
00925 else
00926 goto is_not_a_corner;
00927 else
00928 goto is_not_a_corner;
00929 else
00930 goto is_not_a_corner;
00931 else
00932 goto is_not_a_corner;
00933 else
00934 goto is_not_a_corner;
00935 else if( p[pixel[7]] < c_b)
00936 if( p[pixel[8]] < c_b)
00937 if( p[pixel[9]] < c_b)
00938 if( p[pixel[10]] < c_b)
00939 if( p[pixel[11]] < c_b)
00940 if( p[pixel[12]] < c_b)
00941 if( p[pixel[13]] < c_b)
00942 if( p[pixel[14]] < c_b)
00943 goto is_a_corner;
00944 else
00945 goto is_not_a_corner;
00946 else
00947 goto is_not_a_corner;
00948 else
00949 goto is_not_a_corner;
00950 else
00951 goto is_not_a_corner;
00952 else
00953 goto is_not_a_corner;
00954 else
00955 goto is_not_a_corner;
00956 else
00957 goto is_not_a_corner;
00958 else
00959 goto is_not_a_corner;
00960 else
00961 if( p[pixel[4]] > cb)
00962 if( p[pixel[5]] > cb)
00963 if( p[pixel[6]] > cb)
00964 if( p[pixel[7]] > cb)
00965 if( p[pixel[8]] > cb)
00966 if( p[pixel[9]] > cb)
00967 if( p[pixel[10]] > cb)
00968 if( p[pixel[11]] > cb)
00969 if( p[pixel[12]] > cb)
00970 if( p[pixel[13]] > cb)
00971 if( p[pixel[14]] > cb)
00972 goto is_a_corner;
00973 else
00974 goto is_not_a_corner;
00975 else
00976 goto is_not_a_corner;
00977 else
00978 goto is_not_a_corner;
00979 else
00980 goto is_not_a_corner;
00981 else
00982 goto is_not_a_corner;
00983 else
00984 goto is_not_a_corner;
00985 else
00986 goto is_not_a_corner;
00987 else
00988 goto is_not_a_corner;
00989 else
00990 goto is_not_a_corner;
00991 else
00992 goto is_not_a_corner;
00993 else
00994 goto is_not_a_corner;
00995 else if( p[pixel[3]] < c_b)
00996 if( p[pixel[4]] > cb)
00997 if( p[pixel[8]] > cb)
00998 if( p[pixel[5]] > cb)
00999 if( p[pixel[6]] > cb)
01000 if( p[pixel[7]] > cb)
01001 if( p[pixel[9]] > cb)
01002 if( p[pixel[10]] > cb)
01003 if( p[pixel[11]] > cb)
01004 if( p[pixel[12]] > cb)
01005 if( p[pixel[13]] > cb)
01006 if( p[pixel[14]] > cb)
01007 if( p[pixel[15]] > cb)
01008 goto is_a_corner;
01009 else
01010 goto is_not_a_corner;
01011 else
01012 goto is_not_a_corner;
01013 else
01014 goto is_not_a_corner;
01015 else
01016 goto is_not_a_corner;
01017 else
01018 goto is_not_a_corner;
01019 else
01020 goto is_not_a_corner;
01021 else
01022 goto is_not_a_corner;
01023 else
01024 goto is_not_a_corner;
01025 else
01026 goto is_not_a_corner;
01027 else
01028 goto is_not_a_corner;
01029 else if( p[pixel[8]] < c_b)
01030 if( p[pixel[9]] < c_b)
01031 if( p[pixel[10]] < c_b)
01032 if( p[pixel[11]] < c_b)
01033 if( p[pixel[12]] < c_b)
01034 if( p[pixel[13]] < c_b)
01035 if( p[pixel[14]] < c_b)
01036 if( p[pixel[15]] < c_b)
01037 goto is_a_corner;
01038 else
01039 goto is_not_a_corner;
01040 else
01041 goto is_not_a_corner;
01042 else
01043 goto is_not_a_corner;
01044 else
01045 goto is_not_a_corner;
01046 else
01047 goto is_not_a_corner;
01048 else
01049 goto is_not_a_corner;
01050 else
01051 goto is_not_a_corner;
01052 else
01053 goto is_not_a_corner;
01054 else if( p[pixel[4]] < c_b)
01055 if( p[pixel[5]] < c_b)
01056 if( p[pixel[6]] < c_b)
01057 if( p[pixel[7]] < c_b)
01058 if( p[pixel[8]] < c_b)
01059 if( p[pixel[9]] < c_b)
01060 if( p[pixel[10]] < c_b)
01061 if( p[pixel[11]] < c_b)
01062 goto is_a_corner;
01063 else
01064 if( p[pixel[15]] < c_b)
01065 goto is_a_corner;
01066 else
01067 goto is_not_a_corner;
01068 else
01069 if( p[pixel[14]] < c_b)
01070 if( p[pixel[15]] < c_b)
01071 goto is_a_corner;
01072 else
01073 goto is_not_a_corner;
01074 else
01075 goto is_not_a_corner;
01076 else
01077 if( p[pixel[13]] < c_b)
01078 if( p[pixel[14]] < c_b)
01079 if( p[pixel[15]] < c_b)
01080 goto is_a_corner;
01081 else
01082 goto is_not_a_corner;
01083 else
01084 goto is_not_a_corner;
01085 else
01086 goto is_not_a_corner;
01087 else
01088 if( p[pixel[12]] < c_b)
01089 if( p[pixel[13]] < c_b)
01090 if( p[pixel[14]] < c_b)
01091 if( p[pixel[15]] < c_b)
01092 goto is_a_corner;
01093 else
01094 goto is_not_a_corner;
01095 else
01096 goto is_not_a_corner;
01097 else
01098 goto is_not_a_corner;
01099 else
01100 goto is_not_a_corner;
01101 else
01102 if( p[pixel[11]] < c_b)
01103 if( p[pixel[12]] < c_b)
01104 if( p[pixel[13]] < c_b)
01105 if( p[pixel[14]] < c_b)
01106 if( p[pixel[15]] < c_b)
01107 goto is_a_corner;
01108 else
01109 goto is_not_a_corner;
01110 else
01111 goto is_not_a_corner;
01112 else
01113 goto is_not_a_corner;
01114 else
01115 goto is_not_a_corner;
01116 else
01117 goto is_not_a_corner;
01118 else
01119 if( p[pixel[10]] < c_b)
01120 if( p[pixel[11]] < c_b)
01121 if( p[pixel[12]] < c_b)
01122 if( p[pixel[13]] < c_b)
01123 if( p[pixel[14]] < c_b)
01124 if( p[pixel[15]] < c_b)
01125 goto is_a_corner;
01126 else
01127 goto is_not_a_corner;
01128 else
01129 goto is_not_a_corner;
01130 else
01131 goto is_not_a_corner;
01132 else
01133 goto is_not_a_corner;
01134 else
01135 goto is_not_a_corner;
01136 else
01137 goto is_not_a_corner;
01138 else
01139 if( p[pixel[9]] < c_b)
01140 if( p[pixel[10]] < c_b)
01141 if( p[pixel[11]] < c_b)
01142 if( p[pixel[12]] < c_b)
01143 if( p[pixel[13]] < c_b)
01144 if( p[pixel[14]] < c_b)
01145 if( p[pixel[15]] < c_b)
01146 goto is_a_corner;
01147 else
01148 goto is_not_a_corner;
01149 else
01150 goto is_not_a_corner;
01151 else
01152 goto is_not_a_corner;
01153 else
01154 goto is_not_a_corner;
01155 else
01156 goto is_not_a_corner;
01157 else
01158 goto is_not_a_corner;
01159 else
01160 goto is_not_a_corner;
01161 else
01162 if( p[pixel[8]] < c_b)
01163 if( p[pixel[9]] < c_b)
01164 if( p[pixel[10]] < c_b)
01165 if( p[pixel[11]] < c_b)
01166 if( p[pixel[12]] < c_b)
01167 if( p[pixel[13]] < c_b)
01168 if( p[pixel[14]] < c_b)
01169 if( p[pixel[15]] < c_b)
01170 goto is_a_corner;
01171 else
01172 goto is_not_a_corner;
01173 else
01174 goto is_not_a_corner;
01175 else
01176 goto is_not_a_corner;
01177 else
01178 goto is_not_a_corner;
01179 else
01180 goto is_not_a_corner;
01181 else
01182 goto is_not_a_corner;
01183 else
01184 goto is_not_a_corner;
01185 else
01186 goto is_not_a_corner;
01187 else
01188 if( p[pixel[7]] > cb)
01189 if( p[pixel[4]] > cb)
01190 if( p[pixel[5]] > cb)
01191 if( p[pixel[6]] > cb)
01192 if( p[pixel[8]] > cb)
01193 if( p[pixel[9]] > cb)
01194 if( p[pixel[10]] > cb)
01195 if( p[pixel[11]] > cb)
01196 if( p[pixel[12]] > cb)
01197 if( p[pixel[13]] > cb)
01198 if( p[pixel[14]] > cb)
01199 if( p[pixel[15]] > cb)
01200 goto is_a_corner;
01201 else
01202 goto is_not_a_corner;
01203 else
01204 goto is_not_a_corner;
01205 else
01206 goto is_not_a_corner;
01207 else
01208 goto is_not_a_corner;
01209 else
01210 goto is_not_a_corner;
01211 else
01212 goto is_not_a_corner;
01213 else
01214 goto is_not_a_corner;
01215 else
01216 goto is_not_a_corner;
01217 else
01218 goto is_not_a_corner;
01219 else
01220 goto is_not_a_corner;
01221 else
01222 goto is_not_a_corner;
01223 else if( p[pixel[7]] < c_b)
01224 if( p[pixel[8]] < c_b)
01225 if( p[pixel[9]] < c_b)
01226 if( p[pixel[10]] < c_b)
01227 if( p[pixel[11]] < c_b)
01228 if( p[pixel[12]] < c_b)
01229 if( p[pixel[13]] < c_b)
01230 if( p[pixel[14]] < c_b)
01231 if( p[pixel[15]] < c_b)
01232 goto is_a_corner;
01233 else
01234 goto is_not_a_corner;
01235 else
01236 goto is_not_a_corner;
01237 else
01238 goto is_not_a_corner;
01239 else
01240 goto is_not_a_corner;
01241 else
01242 goto is_not_a_corner;
01243 else
01244 goto is_not_a_corner;
01245 else
01246 goto is_not_a_corner;
01247 else
01248 goto is_not_a_corner;
01249 else
01250 goto is_not_a_corner;
01251 else
01252 if( p[pixel[6]] > cb)
01253 if( p[pixel[4]] > cb)
01254 if( p[pixel[5]] > cb)
01255 if( p[pixel[7]] > cb)
01256 if( p[pixel[8]] > cb)
01257 if( p[pixel[9]] > cb)
01258 if( p[pixel[10]] > cb)
01259 if( p[pixel[11]] > cb)
01260 if( p[pixel[12]] > cb)
01261 if( p[pixel[13]] > cb)
01262 if( p[pixel[14]] > cb)
01263 if( p[pixel[3]] > cb)
01264 goto is_a_corner;
01265 else
01266 if( p[pixel[15]] > cb)
01267 goto is_a_corner;
01268 else
01269 goto is_not_a_corner;
01270 else
01271 goto is_not_a_corner;
01272 else
01273 goto is_not_a_corner;
01274 else
01275 goto is_not_a_corner;
01276 else
01277 goto is_not_a_corner;
01278 else
01279 goto is_not_a_corner;
01280 else
01281 goto is_not_a_corner;
01282 else
01283 goto is_not_a_corner;
01284 else
01285 goto is_not_a_corner;
01286 else
01287 goto is_not_a_corner;
01288 else
01289 goto is_not_a_corner;
01290 else if( p[pixel[6]] < c_b)
01291 if( p[pixel[7]] < c_b)
01292 if( p[pixel[8]] < c_b)
01293 if( p[pixel[9]] < c_b)
01294 if( p[pixel[10]] < c_b)
01295 if( p[pixel[11]] < c_b)
01296 if( p[pixel[12]] < c_b)
01297 if( p[pixel[13]] < c_b)
01298 if( p[pixel[14]] < c_b)
01299 if( p[pixel[15]] < c_b)
01300 goto is_a_corner;
01301 else
01302 if( p[pixel[3]] < c_b)
01303 if( p[pixel[4]] < c_b)
01304 if( p[pixel[5]] < c_b)
01305 goto is_a_corner;
01306 else
01307 goto is_not_a_corner;
01308 else
01309 goto is_not_a_corner;
01310 else
01311 goto is_not_a_corner;
01312 else
01313 goto is_not_a_corner;
01314 else
01315 goto is_not_a_corner;
01316 else
01317 goto is_not_a_corner;
01318 else
01319 goto is_not_a_corner;
01320 else
01321 goto is_not_a_corner;
01322 else
01323 goto is_not_a_corner;
01324 else
01325 goto is_not_a_corner;
01326 else
01327 goto is_not_a_corner;
01328 else
01329 goto is_not_a_corner;
01330 else
01331 if( p[pixel[5]] > cb)
01332 if( p[pixel[4]] > cb)
01333 if( p[pixel[6]] > cb)
01334 if( p[pixel[7]] > cb)
01335 if( p[pixel[8]] > cb)
01336 if( p[pixel[9]] > cb)
01337 if( p[pixel[10]] > cb)
01338 if( p[pixel[11]] > cb)
01339 if( p[pixel[12]] > cb)
01340 if( p[pixel[13]] > cb)
01341 if( p[pixel[3]] > cb)
01342 if( p[pixel[2]] > cb)
01343 goto is_a_corner;
01344 else
01345 if( p[pixel[14]] > cb)
01346 goto is_a_corner;
01347 else
01348 goto is_not_a_corner;
01349 else
01350 if( p[pixel[14]] > cb)
01351 if( p[pixel[15]] > cb)
01352 goto is_a_corner;
01353 else
01354 goto is_not_a_corner;
01355 else
01356 goto is_not_a_corner;
01357 else
01358 goto is_not_a_corner;
01359 else
01360 goto is_not_a_corner;
01361 else
01362 goto is_not_a_corner;
01363 else
01364 goto is_not_a_corner;
01365 else
01366 goto is_not_a_corner;
01367 else
01368 goto is_not_a_corner;
01369 else
01370 goto is_not_a_corner;
01371 else
01372 goto is_not_a_corner;
01373 else
01374 goto is_not_a_corner;
01375 else if( p[pixel[5]] < c_b)
01376 if( p[pixel[6]] < c_b)
01377 if( p[pixel[7]] < c_b)
01378 if( p[pixel[8]] < c_b)
01379 if( p[pixel[9]] < c_b)
01380 if( p[pixel[10]] < c_b)
01381 if( p[pixel[11]] < c_b)
01382 if( p[pixel[12]] < c_b)
01383 if( p[pixel[13]] < c_b)
01384 if( p[pixel[14]] < c_b)
01385 if( p[pixel[15]] < c_b)
01386 goto is_a_corner;
01387 else
01388 if( p[pixel[3]] < c_b)
01389 if( p[pixel[4]] < c_b)
01390 goto is_a_corner;
01391 else
01392 goto is_not_a_corner;
01393 else
01394 goto is_not_a_corner;
01395 else
01396 if( p[pixel[2]] < c_b)
01397 if( p[pixel[3]] < c_b)
01398 if( p[pixel[4]] < c_b)
01399 goto is_a_corner;
01400 else
01401 goto is_not_a_corner;
01402 else
01403 goto is_not_a_corner;
01404 else
01405 goto is_not_a_corner;
01406 else
01407 goto is_not_a_corner;
01408 else
01409 goto is_not_a_corner;
01410 else
01411 goto is_not_a_corner;
01412 else
01413 goto is_not_a_corner;
01414 else
01415 goto is_not_a_corner;
01416 else
01417 goto is_not_a_corner;
01418 else
01419 goto is_not_a_corner;
01420 else
01421 goto is_not_a_corner;
01422 else
01423 goto is_not_a_corner;
01424 else
01425 if( p[pixel[4]] > cb)
01426 if( p[pixel[5]] > cb)
01427 if( p[pixel[6]] > cb)
01428 if( p[pixel[7]] > cb)
01429 if( p[pixel[8]] > cb)
01430 if( p[pixel[9]] > cb)
01431 if( p[pixel[10]] > cb)
01432 if( p[pixel[11]] > cb)
01433 if( p[pixel[12]] > cb)
01434 if( p[pixel[3]] > cb)
01435 if( p[pixel[2]] > cb)
01436 if( p[pixel[1]] > cb)
01437 goto is_a_corner;
01438 else
01439 if( p[pixel[13]] > cb)
01440 goto is_a_corner;
01441 else
01442 goto is_not_a_corner;
01443 else
01444 if( p[pixel[13]] > cb)
01445 if( p[pixel[14]] > cb)
01446 goto is_a_corner;
01447 else
01448 goto is_not_a_corner;
01449 else
01450 goto is_not_a_corner;
01451 else
01452 if( p[pixel[13]] > cb)
01453 if( p[pixel[14]] > cb)
01454 if( p[pixel[15]] > cb)
01455 goto is_a_corner;
01456 else
01457 goto is_not_a_corner;
01458 else
01459 goto is_not_a_corner;
01460 else
01461 goto is_not_a_corner;
01462 else
01463 goto is_not_a_corner;
01464 else
01465 goto is_not_a_corner;
01466 else
01467 goto is_not_a_corner;
01468 else
01469 goto is_not_a_corner;
01470 else
01471 goto is_not_a_corner;
01472 else
01473 goto is_not_a_corner;
01474 else
01475 goto is_not_a_corner;
01476 else
01477 goto is_not_a_corner;
01478 else if( p[pixel[4]] < c_b)
01479 if( p[pixel[5]] < c_b)
01480 if( p[pixel[6]] < c_b)
01481 if( p[pixel[7]] < c_b)
01482 if( p[pixel[8]] < c_b)
01483 if( p[pixel[9]] < c_b)
01484 if( p[pixel[10]] < c_b)
01485 if( p[pixel[11]] < c_b)
01486 if( p[pixel[12]] < c_b)
01487 if( p[pixel[3]] < c_b)
01488 if( p[pixel[2]] < c_b)
01489 if( p[pixel[1]] < c_b)
01490 goto is_a_corner;
01491 else
01492 if( p[pixel[13]] < c_b)
01493 goto is_a_corner;
01494 else
01495 goto is_not_a_corner;
01496 else
01497 if( p[pixel[13]] < c_b)
01498 if( p[pixel[14]] < c_b)
01499 goto is_a_corner;
01500 else
01501 goto is_not_a_corner;
01502 else
01503 goto is_not_a_corner;
01504 else
01505 if( p[pixel[13]] < c_b)
01506 if( p[pixel[14]] < c_b)
01507 if( p[pixel[15]] < c_b)
01508 goto is_a_corner;
01509 else
01510 goto is_not_a_corner;
01511 else
01512 goto is_not_a_corner;
01513 else
01514 goto is_not_a_corner;
01515 else
01516 goto is_not_a_corner;
01517 else
01518 goto is_not_a_corner;
01519 else
01520 goto is_not_a_corner;
01521 else
01522 goto is_not_a_corner;
01523 else
01524 goto is_not_a_corner;
01525 else
01526 goto is_not_a_corner;
01527 else
01528 goto is_not_a_corner;
01529 else
01530 goto is_not_a_corner;
01531 else
01532 goto is_not_a_corner;
01533
01534 is_a_corner:
01535 bmin=b;
01536 goto end_if;
01537
01538 is_not_a_corner:
01539 bmax=b;
01540 goto end_if;
01541
01542 end_if:
01543
01544 if(bmin == bmax - 1 || bmin == bmax)
01545 return bmin;
01546 b = (bmin + bmax) / 2;
01547 }
01548 }
01549
01550 static void make_offsets(int pixel[], int row_stride)
01551 {
01552 pixel[0] = 0 + row_stride * 3;
01553 pixel[1] = 1 + row_stride * 3;
01554 pixel[2] = 2 + row_stride * 2;
01555 pixel[3] = 3 + row_stride * 1;
01556 pixel[4] = 3 + row_stride * 0;
01557 pixel[5] = 3 + row_stride * -1;
01558 pixel[6] = 2 + row_stride * -2;
01559 pixel[7] = 1 + row_stride * -3;
01560 pixel[8] = 0 + row_stride * -3;
01561 pixel[9] = -1 + row_stride * -3;
01562 pixel[10] = -2 + row_stride * -2;
01563 pixel[11] = -3 + row_stride * -1;
01564 pixel[12] = -3 + row_stride * 0;
01565 pixel[13] = -3 + row_stride * 1;
01566 pixel[14] = -2 + row_stride * 2;
01567 pixel[15] = -1 + row_stride * 3;
01568 }
01569
01570
01571
01572 int* fast12_score(const byte* i, int stride, xy* corners, int num_corners, int b)
01573 {
01574 int* scores = (int*)malloc(sizeof(int)* num_corners);
01575 int n;
01576
01577 int pixel[16];
01578 make_offsets(pixel, stride);
01579
01580 for(n=0; n < num_corners; n++)
01581 scores[n] = fast12_corner_score(i + corners[n].y*stride + corners[n].x, pixel, b);
01582
01583 return scores;
01584 }
01585
01586
01587 xy* fast12_detect(const byte* im, int xsize, int ysize, int stride, int b, int* ret_num_corners)
01588 {
01589 int num_corners=0;
01590 xy* ret_corners;
01591 int rsize=512;
01592 int pixel[16];
01593 int x, y;
01594
01595 ret_corners = (xy*)malloc(sizeof(xy)*rsize);
01596 make_offsets(pixel, stride);
01597
01598 for(y=3; y < ysize - 3; y++)
01599 for(x=3; x < xsize - 3; x++)
01600 {
01601 const byte* p = im + y*stride + x;
01602
01603 int cb = *p + b;
01604 int c_b= *p - b;
01605 if(p[pixel[0]] > cb)
01606 if(p[pixel[1]] > cb)
01607 if(p[pixel[2]] > cb)
01608 if(p[pixel[3]] > cb)
01609 if(p[pixel[4]] > cb)
01610 if(p[pixel[5]] > cb)
01611 if(p[pixel[6]] > cb)
01612 if(p[pixel[7]] > cb)
01613 if(p[pixel[8]] > cb)
01614 if(p[pixel[9]] > cb)
01615 if(p[pixel[10]] > cb)
01616 if(p[pixel[11]] > cb)
01617 {}
01618 else
01619 if(p[pixel[15]] > cb)
01620 {}
01621 else
01622 continue;
01623 else
01624 if(p[pixel[14]] > cb)
01625 if(p[pixel[15]] > cb)
01626 {}
01627 else
01628 continue;
01629 else
01630 continue;
01631 else
01632 if(p[pixel[13]] > cb)
01633 if(p[pixel[14]] > cb)
01634 if(p[pixel[15]] > cb)
01635 {}
01636 else
01637 continue;
01638 else
01639 continue;
01640 else
01641 continue;
01642 else
01643 if(p[pixel[12]] > cb)
01644 if(p[pixel[13]] > cb)
01645 if(p[pixel[14]] > cb)
01646 if(p[pixel[15]] > cb)
01647 {}
01648 else
01649 continue;
01650 else
01651 continue;
01652 else
01653 continue;
01654 else
01655 continue;
01656 else
01657 if(p[pixel[11]] > cb)
01658 if(p[pixel[12]] > cb)
01659 if(p[pixel[13]] > cb)
01660 if(p[pixel[14]] > cb)
01661 if(p[pixel[15]] > cb)
01662 {}
01663 else
01664 continue;
01665 else
01666 continue;
01667 else
01668 continue;
01669 else
01670 continue;
01671 else
01672 continue;
01673 else
01674 if(p[pixel[10]] > cb)
01675 if(p[pixel[11]] > cb)
01676 if(p[pixel[12]] > cb)
01677 if(p[pixel[13]] > cb)
01678 if(p[pixel[14]] > cb)
01679 if(p[pixel[15]] > cb)
01680 {}
01681 else
01682 continue;
01683 else
01684 continue;
01685 else
01686 continue;
01687 else
01688 continue;
01689 else
01690 continue;
01691 else
01692 continue;
01693 else
01694 if(p[pixel[9]] > cb)
01695 if(p[pixel[10]] > cb)
01696 if(p[pixel[11]] > cb)
01697 if(p[pixel[12]] > cb)
01698 if(p[pixel[13]] > cb)
01699 if(p[pixel[14]] > cb)
01700 if(p[pixel[15]] > cb)
01701 {}
01702 else
01703 continue;
01704 else
01705 continue;
01706 else
01707 continue;
01708 else
01709 continue;
01710 else
01711 continue;
01712 else
01713 continue;
01714 else
01715 continue;
01716 else if(p[pixel[4]] < c_b)
01717 if(p[pixel[8]] > cb)
01718 if(p[pixel[9]] > cb)
01719 if(p[pixel[10]] > cb)
01720 if(p[pixel[11]] > cb)
01721 if(p[pixel[12]] > cb)
01722 if(p[pixel[13]] > cb)
01723 if(p[pixel[14]] > cb)
01724 if(p[pixel[15]] > cb)
01725 {}
01726 else
01727 continue;
01728 else
01729 continue;
01730 else
01731 continue;
01732 else
01733 continue;
01734 else
01735 continue;
01736 else
01737 continue;
01738 else
01739 continue;
01740 else if(p[pixel[8]] < c_b)
01741 if(p[pixel[5]] < c_b)
01742 if(p[pixel[6]] < c_b)
01743 if(p[pixel[7]] < c_b)
01744 if(p[pixel[9]] < c_b)
01745 if(p[pixel[10]] < c_b)
01746 if(p[pixel[11]] < c_b)
01747 if(p[pixel[12]] < c_b)
01748 if(p[pixel[13]] < c_b)
01749 if(p[pixel[14]] < c_b)
01750 if(p[pixel[15]] < c_b)
01751 {}
01752 else
01753 continue;
01754 else
01755 continue;
01756 else
01757 continue;
01758 else
01759 continue;
01760 else
01761 continue;
01762 else
01763 continue;
01764 else
01765 continue;
01766 else
01767 continue;
01768 else
01769 continue;
01770 else
01771 continue;
01772 else
01773 continue;
01774 else
01775 if(p[pixel[8]] > cb)
01776 if(p[pixel[9]] > cb)
01777 if(p[pixel[10]] > cb)
01778 if(p[pixel[11]] > cb)
01779 if(p[pixel[12]] > cb)
01780 if(p[pixel[13]] > cb)
01781 if(p[pixel[14]] > cb)
01782 if(p[pixel[15]] > cb)
01783 {}
01784 else
01785 continue;
01786 else
01787 continue;
01788 else
01789 continue;
01790 else
01791 continue;
01792 else
01793 continue;
01794 else
01795 continue;
01796 else
01797 continue;
01798 else
01799 continue;
01800 else if(p[pixel[3]] < c_b)
01801 if(p[pixel[15]] > cb)
01802 if(p[pixel[7]] > cb)
01803 if(p[pixel[8]] > cb)
01804 if(p[pixel[9]] > cb)
01805 if(p[pixel[10]] > cb)
01806 if(p[pixel[11]] > cb)
01807 if(p[pixel[12]] > cb)
01808 if(p[pixel[13]] > cb)
01809 if(p[pixel[14]] > cb)
01810 {}
01811 else
01812 continue;
01813 else
01814 continue;
01815 else
01816 continue;
01817 else
01818 continue;
01819 else
01820 continue;
01821 else
01822 continue;
01823 else
01824 continue;
01825 else if(p[pixel[7]] < c_b)
01826 if(p[pixel[4]] < c_b)
01827 if(p[pixel[5]] < c_b)
01828 if(p[pixel[6]] < c_b)
01829 if(p[pixel[8]] < c_b)
01830 if(p[pixel[9]] < c_b)
01831 if(p[pixel[10]] < c_b)
01832 if(p[pixel[11]] < c_b)
01833 if(p[pixel[12]] < c_b)
01834 if(p[pixel[13]] < c_b)
01835 if(p[pixel[14]] < c_b)
01836 {}
01837 else
01838 continue;
01839 else
01840 continue;
01841 else
01842 continue;
01843 else
01844 continue;
01845 else
01846 continue;
01847 else
01848 continue;
01849 else
01850 continue;
01851 else
01852 continue;
01853 else
01854 continue;
01855 else
01856 continue;
01857 else
01858 continue;
01859 else
01860 if(p[pixel[4]] < c_b)
01861 if(p[pixel[5]] < c_b)
01862 if(p[pixel[6]] < c_b)
01863 if(p[pixel[7]] < c_b)
01864 if(p[pixel[8]] < c_b)
01865 if(p[pixel[9]] < c_b)
01866 if(p[pixel[10]] < c_b)
01867 if(p[pixel[11]] < c_b)
01868 if(p[pixel[12]] < c_b)
01869 if(p[pixel[13]] < c_b)
01870 if(p[pixel[14]] < c_b)
01871 {}
01872 else
01873 continue;
01874 else
01875 continue;
01876 else
01877 continue;
01878 else
01879 continue;
01880 else
01881 continue;
01882 else
01883 continue;
01884 else
01885 continue;
01886 else
01887 continue;
01888 else
01889 continue;
01890 else
01891 continue;
01892 else
01893 continue;
01894 else
01895 if(p[pixel[7]] > cb)
01896 if(p[pixel[8]] > cb)
01897 if(p[pixel[9]] > cb)
01898 if(p[pixel[10]] > cb)
01899 if(p[pixel[11]] > cb)
01900 if(p[pixel[12]] > cb)
01901 if(p[pixel[13]] > cb)
01902 if(p[pixel[14]] > cb)
01903 if(p[pixel[15]] > cb)
01904 {}
01905 else
01906 continue;
01907 else
01908 continue;
01909 else
01910 continue;
01911 else
01912 continue;
01913 else
01914 continue;
01915 else
01916 continue;
01917 else
01918 continue;
01919 else
01920 continue;
01921 else if(p[pixel[7]] < c_b)
01922 if(p[pixel[4]] < c_b)
01923 if(p[pixel[5]] < c_b)
01924 if(p[pixel[6]] < c_b)
01925 if(p[pixel[8]] < c_b)
01926 if(p[pixel[9]] < c_b)
01927 if(p[pixel[10]] < c_b)
01928 if(p[pixel[11]] < c_b)
01929 if(p[pixel[12]] < c_b)
01930 if(p[pixel[13]] < c_b)
01931 if(p[pixel[14]] < c_b)
01932 if(p[pixel[15]] < c_b)
01933 {}
01934 else
01935 continue;
01936 else
01937 continue;
01938 else
01939 continue;
01940 else
01941 continue;
01942 else
01943 continue;
01944 else
01945 continue;
01946 else
01947 continue;
01948 else
01949 continue;
01950 else
01951 continue;
01952 else
01953 continue;
01954 else
01955 continue;
01956 else
01957 continue;
01958 else if(p[pixel[2]] < c_b)
01959 if(p[pixel[6]] > cb)
01960 if(p[pixel[7]] > cb)
01961 if(p[pixel[8]] > cb)
01962 if(p[pixel[9]] > cb)
01963 if(p[pixel[10]] > cb)
01964 if(p[pixel[11]] > cb)
01965 if(p[pixel[12]] > cb)
01966 if(p[pixel[13]] > cb)
01967 if(p[pixel[14]] > cb)
01968 if(p[pixel[15]] > cb)
01969 {}
01970 else
01971 if(p[pixel[3]] > cb)
01972 if(p[pixel[4]] > cb)
01973 if(p[pixel[5]] > cb)
01974 {}
01975 else
01976 continue;
01977 else
01978 continue;
01979 else
01980 continue;
01981 else
01982 continue;
01983 else
01984 continue;
01985 else
01986 continue;
01987 else
01988 continue;
01989 else
01990 continue;
01991 else
01992 continue;
01993 else
01994 continue;
01995 else
01996 continue;
01997 else if(p[pixel[6]] < c_b)
01998 if(p[pixel[4]] < c_b)
01999 if(p[pixel[5]] < c_b)
02000 if(p[pixel[7]] < c_b)
02001 if(p[pixel[8]] < c_b)
02002 if(p[pixel[9]] < c_b)
02003 if(p[pixel[10]] < c_b)
02004 if(p[pixel[11]] < c_b)
02005 if(p[pixel[12]] < c_b)
02006 if(p[pixel[13]] < c_b)
02007 if(p[pixel[3]] < c_b)
02008 {}
02009 else
02010 if(p[pixel[14]] < c_b)
02011 if(p[pixel[15]] < c_b)
02012 {}
02013 else
02014 continue;
02015 else
02016 continue;
02017 else
02018 continue;
02019 else
02020 continue;
02021 else
02022 continue;
02023 else
02024 continue;
02025 else
02026 continue;
02027 else
02028 continue;
02029 else
02030 continue;
02031 else
02032 continue;
02033 else
02034 continue;
02035 else
02036 continue;
02037 else
02038 if(p[pixel[6]] > cb)
02039 if(p[pixel[7]] > cb)
02040 if(p[pixel[8]] > cb)
02041 if(p[pixel[9]] > cb)
02042 if(p[pixel[10]] > cb)
02043 if(p[pixel[11]] > cb)
02044 if(p[pixel[12]] > cb)
02045 if(p[pixel[13]] > cb)
02046 if(p[pixel[14]] > cb)
02047 if(p[pixel[15]] > cb)
02048 {}
02049 else
02050 if(p[pixel[3]] > cb)
02051 if(p[pixel[4]] > cb)
02052 if(p[pixel[5]] > cb)
02053 {}
02054 else
02055 continue;
02056 else
02057 continue;
02058 else
02059 continue;
02060 else
02061 continue;
02062 else
02063 continue;
02064 else
02065 continue;
02066 else
02067 continue;
02068 else
02069 continue;
02070 else
02071 continue;
02072 else
02073 continue;
02074 else
02075 continue;
02076 else if(p[pixel[6]] < c_b)
02077 if(p[pixel[4]] < c_b)
02078 if(p[pixel[5]] < c_b)
02079 if(p[pixel[7]] < c_b)
02080 if(p[pixel[8]] < c_b)
02081 if(p[pixel[9]] < c_b)
02082 if(p[pixel[10]] < c_b)
02083 if(p[pixel[11]] < c_b)
02084 if(p[pixel[12]] < c_b)
02085 if(p[pixel[13]] < c_b)
02086 if(p[pixel[14]] < c_b)
02087 if(p[pixel[3]] < c_b)
02088 {}
02089 else
02090 if(p[pixel[15]] < c_b)
02091 {}
02092 else
02093 continue;
02094 else
02095 continue;
02096 else
02097 continue;
02098 else
02099 continue;
02100 else
02101 continue;
02102 else
02103 continue;
02104 else
02105 continue;
02106 else
02107 continue;
02108 else
02109 continue;
02110 else
02111 continue;
02112 else
02113 continue;
02114 else
02115 continue;
02116 else if(p[pixel[1]] < c_b)
02117 if(p[pixel[5]] > cb)
02118 if(p[pixel[6]] > cb)
02119 if(p[pixel[7]] > cb)
02120 if(p[pixel[8]] > cb)
02121 if(p[pixel[9]] > cb)
02122 if(p[pixel[10]] > cb)
02123 if(p[pixel[11]] > cb)
02124 if(p[pixel[12]] > cb)
02125 if(p[pixel[13]] > cb)
02126 if(p[pixel[14]] > cb)
02127 if(p[pixel[15]] > cb)
02128 {}
02129 else
02130 if(p[pixel[3]] > cb)
02131 if(p[pixel[4]] > cb)
02132 {}
02133 else
02134 continue;
02135 else
02136 continue;
02137 else
02138 if(p[pixel[2]] > cb)
02139 if(p[pixel[3]] > cb)
02140 if(p[pixel[4]] > cb)
02141 {}
02142 else
02143 continue;
02144 else
02145 continue;
02146 else
02147 continue;
02148 else
02149 continue;
02150 else
02151 continue;
02152 else
02153 continue;
02154 else
02155 continue;
02156 else
02157 continue;
02158 else
02159 continue;
02160 else
02161 continue;
02162 else
02163 continue;
02164 else if(p[pixel[5]] < c_b)
02165 if(p[pixel[4]] < c_b)
02166 if(p[pixel[6]] < c_b)
02167 if(p[pixel[7]] < c_b)
02168 if(p[pixel[8]] < c_b)
02169 if(p[pixel[9]] < c_b)
02170 if(p[pixel[10]] < c_b)
02171 if(p[pixel[11]] < c_b)
02172 if(p[pixel[12]] < c_b)
02173 if(p[pixel[3]] < c_b)
02174 if(p[pixel[2]] < c_b)
02175 {}
02176 else
02177 if(p[pixel[13]] < c_b)
02178 if(p[pixel[14]] < c_b)
02179 {}
02180 else
02181 continue;
02182 else
02183 continue;
02184 else
02185 if(p[pixel[13]] < c_b)
02186 if(p[pixel[14]] < c_b)
02187 if(p[pixel[15]] < c_b)
02188 {}
02189 else
02190 continue;
02191 else
02192 continue;
02193 else
02194 continue;
02195 else
02196 continue;
02197 else
02198 continue;
02199 else
02200 continue;
02201 else
02202 continue;
02203 else
02204 continue;
02205 else
02206 continue;
02207 else
02208 continue;
02209 else
02210 continue;
02211 else
02212 continue;
02213 else
02214 if(p[pixel[5]] > cb)
02215 if(p[pixel[6]] > cb)
02216 if(p[pixel[7]] > cb)
02217 if(p[pixel[8]] > cb)
02218 if(p[pixel[9]] > cb)
02219 if(p[pixel[10]] > cb)
02220 if(p[pixel[11]] > cb)
02221 if(p[pixel[12]] > cb)
02222 if(p[pixel[13]] > cb)
02223 if(p[pixel[14]] > cb)
02224 if(p[pixel[15]] > cb)
02225 {}
02226 else
02227 if(p[pixel[3]] > cb)
02228 if(p[pixel[4]] > cb)
02229 {}
02230 else
02231 continue;
02232 else
02233 continue;
02234 else
02235 if(p[pixel[2]] > cb)
02236 if(p[pixel[3]] > cb)
02237 if(p[pixel[4]] > cb)
02238 {}
02239 else
02240 continue;
02241 else
02242 continue;
02243 else
02244 continue;
02245 else
02246 continue;
02247 else
02248 continue;
02249 else
02250 continue;
02251 else
02252 continue;
02253 else
02254 continue;
02255 else
02256 continue;
02257 else
02258 continue;
02259 else
02260 continue;
02261 else if(p[pixel[5]] < c_b)
02262 if(p[pixel[4]] < c_b)
02263 if(p[pixel[6]] < c_b)
02264 if(p[pixel[7]] < c_b)
02265 if(p[pixel[8]] < c_b)
02266 if(p[pixel[9]] < c_b)
02267 if(p[pixel[10]] < c_b)
02268 if(p[pixel[11]] < c_b)
02269 if(p[pixel[12]] < c_b)
02270 if(p[pixel[13]] < c_b)
02271 if(p[pixel[3]] < c_b)
02272 if(p[pixel[2]] < c_b)
02273 {}
02274 else
02275 if(p[pixel[14]] < c_b)
02276 {}
02277 else
02278 continue;
02279 else
02280 if(p[pixel[14]] < c_b)
02281 if(p[pixel[15]] < c_b)
02282 {}
02283 else
02284 continue;
02285 else
02286 continue;
02287 else
02288 continue;
02289 else
02290 continue;
02291 else
02292 continue;
02293 else
02294 continue;
02295 else
02296 continue;
02297 else
02298 continue;
02299 else
02300 continue;
02301 else
02302 continue;
02303 else
02304 continue;
02305 else
02306 continue;
02307 else if(p[pixel[0]] < c_b)
02308 if(p[pixel[1]] > cb)
02309 if(p[pixel[5]] > cb)
02310 if(p[pixel[4]] > cb)
02311 if(p[pixel[6]] > cb)
02312 if(p[pixel[7]] > cb)
02313 if(p[pixel[8]] > cb)
02314 if(p[pixel[9]] > cb)
02315 if(p[pixel[10]] > cb)
02316 if(p[pixel[11]] > cb)
02317 if(p[pixel[12]] > cb)
02318 if(p[pixel[3]] > cb)
02319 if(p[pixel[2]] > cb)
02320 {}
02321 else
02322 if(p[pixel[13]] > cb)
02323 if(p[pixel[14]] > cb)
02324 {}
02325 else
02326 continue;
02327 else
02328 continue;
02329 else
02330 if(p[pixel[13]] > cb)
02331 if(p[pixel[14]] > cb)
02332 if(p[pixel[15]] > cb)
02333 {}
02334 else
02335 continue;
02336 else
02337 continue;
02338 else
02339 continue;
02340 else
02341 continue;
02342 else
02343 continue;
02344 else
02345 continue;
02346 else
02347 continue;
02348 else
02349 continue;
02350 else
02351 continue;
02352 else
02353 continue;
02354 else
02355 continue;
02356 else if(p[pixel[5]] < c_b)
02357 if(p[pixel[6]] < c_b)
02358 if(p[pixel[7]] < c_b)
02359 if(p[pixel[8]] < c_b)
02360 if(p[pixel[9]] < c_b)
02361 if(p[pixel[10]] < c_b)
02362 if(p[pixel[11]] < c_b)
02363 if(p[pixel[12]] < c_b)
02364 if(p[pixel[13]] < c_b)
02365 if(p[pixel[14]] < c_b)
02366 if(p[pixel[15]] < c_b)
02367 {}
02368 else
02369 if(p[pixel[3]] < c_b)
02370 if(p[pixel[4]] < c_b)
02371 {}
02372 else
02373 continue;
02374 else
02375 continue;
02376 else
02377 if(p[pixel[2]] < c_b)
02378 if(p[pixel[3]] < c_b)
02379 if(p[pixel[4]] < c_b)
02380 {}
02381 else
02382 continue;
02383 else
02384 continue;
02385 else
02386 continue;
02387 else
02388 continue;
02389 else
02390 continue;
02391 else
02392 continue;
02393 else
02394 continue;
02395 else
02396 continue;
02397 else
02398 continue;
02399 else
02400 continue;
02401 else
02402 continue;
02403 else
02404 continue;
02405 else if(p[pixel[1]] < c_b)
02406 if(p[pixel[2]] > cb)
02407 if(p[pixel[6]] > cb)
02408 if(p[pixel[4]] > cb)
02409 if(p[pixel[5]] > cb)
02410 if(p[pixel[7]] > cb)
02411 if(p[pixel[8]] > cb)
02412 if(p[pixel[9]] > cb)
02413 if(p[pixel[10]] > cb)
02414 if(p[pixel[11]] > cb)
02415 if(p[pixel[12]] > cb)
02416 if(p[pixel[13]] > cb)
02417 if(p[pixel[3]] > cb)
02418 {}
02419 else
02420 if(p[pixel[14]] > cb)
02421 if(p[pixel[15]] > cb)
02422 {}
02423 else
02424 continue;
02425 else
02426 continue;
02427 else
02428 continue;
02429 else
02430 continue;
02431 else
02432 continue;
02433 else
02434 continue;
02435 else
02436 continue;
02437 else
02438 continue;
02439 else
02440 continue;
02441 else
02442 continue;
02443 else
02444 continue;
02445 else if(p[pixel[6]] < c_b)
02446 if(p[pixel[7]] < c_b)
02447 if(p[pixel[8]] < c_b)
02448 if(p[pixel[9]] < c_b)
02449 if(p[pixel[10]] < c_b)
02450 if(p[pixel[11]] < c_b)
02451 if(p[pixel[12]] < c_b)
02452 if(p[pixel[13]] < c_b)
02453 if(p[pixel[14]] < c_b)
02454 if(p[pixel[15]] < c_b)
02455 {}
02456 else
02457 if(p[pixel[3]] < c_b)
02458 if(p[pixel[4]] < c_b)
02459 if(p[pixel[5]] < c_b)
02460 {}
02461 else
02462 continue;
02463 else
02464 continue;
02465 else
02466 continue;
02467 else
02468 continue;
02469 else
02470 continue;
02471 else
02472 continue;
02473 else
02474 continue;
02475 else
02476 continue;
02477 else
02478 continue;
02479 else
02480 continue;
02481 else
02482 continue;
02483 else
02484 continue;
02485 else if(p[pixel[2]] < c_b)
02486 if(p[pixel[3]] > cb)
02487 if(p[pixel[15]] < c_b)
02488 if(p[pixel[7]] > cb)
02489 if(p[pixel[4]] > cb)
02490 if(p[pixel[5]] > cb)
02491 if(p[pixel[6]] > cb)
02492 if(p[pixel[8]] > cb)
02493 if(p[pixel[9]] > cb)
02494 if(p[pixel[10]] > cb)
02495 if(p[pixel[11]] > cb)
02496 if(p[pixel[12]] > cb)
02497 if(p[pixel[13]] > cb)
02498 if(p[pixel[14]] > cb)
02499 {}
02500 else
02501 continue;
02502 else
02503 continue;
02504 else
02505 continue;
02506 else
02507 continue;
02508 else
02509 continue;
02510 else
02511 continue;
02512 else
02513 continue;
02514 else
02515 continue;
02516 else
02517 continue;
02518 else
02519 continue;
02520 else if(p[pixel[7]] < c_b)
02521 if(p[pixel[8]] < c_b)
02522 if(p[pixel[9]] < c_b)
02523 if(p[pixel[10]] < c_b)
02524 if(p[pixel[11]] < c_b)
02525 if(p[pixel[12]] < c_b)
02526 if(p[pixel[13]] < c_b)
02527 if(p[pixel[14]] < c_b)
02528 {}
02529 else
02530 continue;
02531 else
02532 continue;
02533 else
02534 continue;
02535 else
02536 continue;
02537 else
02538 continue;
02539 else
02540 continue;
02541 else
02542 continue;
02543 else
02544 continue;
02545 else
02546 if(p[pixel[4]] > cb)
02547 if(p[pixel[5]] > cb)
02548 if(p[pixel[6]] > cb)
02549 if(p[pixel[7]] > cb)
02550 if(p[pixel[8]] > cb)
02551 if(p[pixel[9]] > cb)
02552 if(p[pixel[10]] > cb)
02553 if(p[pixel[11]] > cb)
02554 if(p[pixel[12]] > cb)
02555 if(p[pixel[13]] > cb)
02556 if(p[pixel[14]] > cb)
02557 {}
02558 else
02559 continue;
02560 else
02561 continue;
02562 else
02563 continue;
02564 else
02565 continue;
02566 else
02567 continue;
02568 else
02569 continue;
02570 else
02571 continue;
02572 else
02573 continue;
02574 else
02575 continue;
02576 else
02577 continue;
02578 else
02579 continue;
02580 else if(p[pixel[3]] < c_b)
02581 if(p[pixel[4]] > cb)
02582 if(p[pixel[8]] > cb)
02583 if(p[pixel[5]] > cb)
02584 if(p[pixel[6]] > cb)
02585 if(p[pixel[7]] > cb)
02586 if(p[pixel[9]] > cb)
02587 if(p[pixel[10]] > cb)
02588 if(p[pixel[11]] > cb)
02589 if(p[pixel[12]] > cb)
02590 if(p[pixel[13]] > cb)
02591 if(p[pixel[14]] > cb)
02592 if(p[pixel[15]] > cb)
02593 {}
02594 else
02595 continue;
02596 else
02597 continue;
02598 else
02599 continue;
02600 else
02601 continue;
02602 else
02603 continue;
02604 else
02605 continue;
02606 else
02607 continue;
02608 else
02609 continue;
02610 else
02611 continue;
02612 else
02613 continue;
02614 else if(p[pixel[8]] < c_b)
02615 if(p[pixel[9]] < c_b)
02616 if(p[pixel[10]] < c_b)
02617 if(p[pixel[11]] < c_b)
02618 if(p[pixel[12]] < c_b)
02619 if(p[pixel[13]] < c_b)
02620 if(p[pixel[14]] < c_b)
02621 if(p[pixel[15]] < c_b)
02622 {}
02623 else
02624 continue;
02625 else
02626 continue;
02627 else
02628 continue;
02629 else
02630 continue;
02631 else
02632 continue;
02633 else
02634 continue;
02635 else
02636 continue;
02637 else
02638 continue;
02639 else if(p[pixel[4]] < c_b)
02640 if(p[pixel[5]] < c_b)
02641 if(p[pixel[6]] < c_b)
02642 if(p[pixel[7]] < c_b)
02643 if(p[pixel[8]] < c_b)
02644 if(p[pixel[9]] < c_b)
02645 if(p[pixel[10]] < c_b)
02646 if(p[pixel[11]] < c_b)
02647 {}
02648 else
02649 if(p[pixel[15]] < c_b)
02650 {}
02651 else
02652 continue;
02653 else
02654 if(p[pixel[14]] < c_b)
02655 if(p[pixel[15]] < c_b)
02656 {}
02657 else
02658 continue;
02659 else
02660 continue;
02661 else
02662 if(p[pixel[13]] < c_b)
02663 if(p[pixel[14]] < c_b)
02664 if(p[pixel[15]] < c_b)
02665 {}
02666 else
02667 continue;
02668 else
02669 continue;
02670 else
02671 continue;
02672 else
02673 if(p[pixel[12]] < c_b)
02674 if(p[pixel[13]] < c_b)
02675 if(p[pixel[14]] < c_b)
02676 if(p[pixel[15]] < c_b)
02677 {}
02678 else
02679 continue;
02680 else
02681 continue;
02682 else
02683 continue;
02684 else
02685 continue;
02686 else
02687 if(p[pixel[11]] < c_b)
02688 if(p[pixel[12]] < c_b)
02689 if(p[pixel[13]] < c_b)
02690 if(p[pixel[14]] < c_b)
02691 if(p[pixel[15]] < c_b)
02692 {}
02693 else
02694 continue;
02695 else
02696 continue;
02697 else
02698 continue;
02699 else
02700 continue;
02701 else
02702 continue;
02703 else
02704 if(p[pixel[10]] < c_b)
02705 if(p[pixel[11]] < c_b)
02706 if(p[pixel[12]] < c_b)
02707 if(p[pixel[13]] < c_b)
02708 if(p[pixel[14]] < c_b)
02709 if(p[pixel[15]] < c_b)
02710 {}
02711 else
02712 continue;
02713 else
02714 continue;
02715 else
02716 continue;
02717 else
02718 continue;
02719 else
02720 continue;
02721 else
02722 continue;
02723 else
02724 if(p[pixel[9]] < c_b)
02725 if(p[pixel[10]] < c_b)
02726 if(p[pixel[11]] < c_b)
02727 if(p[pixel[12]] < c_b)
02728 if(p[pixel[13]] < c_b)
02729 if(p[pixel[14]] < c_b)
02730 if(p[pixel[15]] < c_b)
02731 {}
02732 else
02733 continue;
02734 else
02735 continue;
02736 else
02737 continue;
02738 else
02739 continue;
02740 else
02741 continue;
02742 else
02743 continue;
02744 else
02745 continue;
02746 else
02747 if(p[pixel[8]] < c_b)
02748 if(p[pixel[9]] < c_b)
02749 if(p[pixel[10]] < c_b)
02750 if(p[pixel[11]] < c_b)
02751 if(p[pixel[12]] < c_b)
02752 if(p[pixel[13]] < c_b)
02753 if(p[pixel[14]] < c_b)
02754 if(p[pixel[15]] < c_b)
02755 {}
02756 else
02757 continue;
02758 else
02759 continue;
02760 else
02761 continue;
02762 else
02763 continue;
02764 else
02765 continue;
02766 else
02767 continue;
02768 else
02769 continue;
02770 else
02771 continue;
02772 else
02773 if(p[pixel[7]] > cb)
02774 if(p[pixel[4]] > cb)
02775 if(p[pixel[5]] > cb)
02776 if(p[pixel[6]] > cb)
02777 if(p[pixel[8]] > cb)
02778 if(p[pixel[9]] > cb)
02779 if(p[pixel[10]] > cb)
02780 if(p[pixel[11]] > cb)
02781 if(p[pixel[12]] > cb)
02782 if(p[pixel[13]] > cb)
02783 if(p[pixel[14]] > cb)
02784 if(p[pixel[15]] > cb)
02785 {}
02786 else
02787 continue;
02788 else
02789 continue;
02790 else
02791 continue;
02792 else
02793 continue;
02794 else
02795 continue;
02796 else
02797 continue;
02798 else
02799 continue;
02800 else
02801 continue;
02802 else
02803 continue;
02804 else
02805 continue;
02806 else
02807 continue;
02808 else if(p[pixel[7]] < c_b)
02809 if(p[pixel[8]] < c_b)
02810 if(p[pixel[9]] < c_b)
02811 if(p[pixel[10]] < c_b)
02812 if(p[pixel[11]] < c_b)
02813 if(p[pixel[12]] < c_b)
02814 if(p[pixel[13]] < c_b)
02815 if(p[pixel[14]] < c_b)
02816 if(p[pixel[15]] < c_b)
02817 {}
02818 else
02819 continue;
02820 else
02821 continue;
02822 else
02823 continue;
02824 else
02825 continue;
02826 else
02827 continue;
02828 else
02829 continue;
02830 else
02831 continue;
02832 else
02833 continue;
02834 else
02835 continue;
02836 else
02837 if(p[pixel[6]] > cb)
02838 if(p[pixel[4]] > cb)
02839 if(p[pixel[5]] > cb)
02840 if(p[pixel[7]] > cb)
02841 if(p[pixel[8]] > cb)
02842 if(p[pixel[9]] > cb)
02843 if(p[pixel[10]] > cb)
02844 if(p[pixel[11]] > cb)
02845 if(p[pixel[12]] > cb)
02846 if(p[pixel[13]] > cb)
02847 if(p[pixel[14]] > cb)
02848 if(p[pixel[3]] > cb)
02849 {}
02850 else
02851 if(p[pixel[15]] > cb)
02852 {}
02853 else
02854 continue;
02855 else
02856 continue;
02857 else
02858 continue;
02859 else
02860 continue;
02861 else
02862 continue;
02863 else
02864 continue;
02865 else
02866 continue;
02867 else
02868 continue;
02869 else
02870 continue;
02871 else
02872 continue;
02873 else
02874 continue;
02875 else if(p[pixel[6]] < c_b)
02876 if(p[pixel[7]] < c_b)
02877 if(p[pixel[8]] < c_b)
02878 if(p[pixel[9]] < c_b)
02879 if(p[pixel[10]] < c_b)
02880 if(p[pixel[11]] < c_b)
02881 if(p[pixel[12]] < c_b)
02882 if(p[pixel[13]] < c_b)
02883 if(p[pixel[14]] < c_b)
02884 if(p[pixel[15]] < c_b)
02885 {}
02886 else
02887 if(p[pixel[3]] < c_b)
02888 if(p[pixel[4]] < c_b)
02889 if(p[pixel[5]] < c_b)
02890 {}
02891 else
02892 continue;
02893 else
02894 continue;
02895 else
02896 continue;
02897 else
02898 continue;
02899 else
02900 continue;
02901 else
02902 continue;
02903 else
02904 continue;
02905 else
02906 continue;
02907 else
02908 continue;
02909 else
02910 continue;
02911 else
02912 continue;
02913 else
02914 continue;
02915 else
02916 if(p[pixel[5]] > cb)
02917 if(p[pixel[4]] > cb)
02918 if(p[pixel[6]] > cb)
02919 if(p[pixel[7]] > cb)
02920 if(p[pixel[8]] > cb)
02921 if(p[pixel[9]] > cb)
02922 if(p[pixel[10]] > cb)
02923 if(p[pixel[11]] > cb)
02924 if(p[pixel[12]] > cb)
02925 if(p[pixel[13]] > cb)
02926 if(p[pixel[3]] > cb)
02927 if(p[pixel[2]] > cb)
02928 {}
02929 else
02930 if(p[pixel[14]] > cb)
02931 {}
02932 else
02933 continue;
02934 else
02935 if(p[pixel[14]] > cb)
02936 if(p[pixel[15]] > cb)
02937 {}
02938 else
02939 continue;
02940 else
02941 continue;
02942 else
02943 continue;
02944 else
02945 continue;
02946 else
02947 continue;
02948 else
02949 continue;
02950 else
02951 continue;
02952 else
02953 continue;
02954 else
02955 continue;
02956 else
02957 continue;
02958 else
02959 continue;
02960 else if(p[pixel[5]] < c_b)
02961 if(p[pixel[6]] < c_b)
02962 if(p[pixel[7]] < c_b)
02963 if(p[pixel[8]] < c_b)
02964 if(p[pixel[9]] < c_b)
02965 if(p[pixel[10]] < c_b)
02966 if(p[pixel[11]] < c_b)
02967 if(p[pixel[12]] < c_b)
02968 if(p[pixel[13]] < c_b)
02969 if(p[pixel[14]] < c_b)
02970 if(p[pixel[15]] < c_b)
02971 {}
02972 else
02973 if(p[pixel[3]] < c_b)
02974 if(p[pixel[4]] < c_b)
02975 {}
02976 else
02977 continue;
02978 else
02979 continue;
02980 else
02981 if(p[pixel[2]] < c_b)
02982 if(p[pixel[3]] < c_b)
02983 if(p[pixel[4]] < c_b)
02984 {}
02985 else
02986 continue;
02987 else
02988 continue;
02989 else
02990 continue;
02991 else
02992 continue;
02993 else
02994 continue;
02995 else
02996 continue;
02997 else
02998 continue;
02999 else
03000 continue;
03001 else
03002 continue;
03003 else
03004 continue;
03005 else
03006 continue;
03007 else
03008 continue;
03009 else
03010 if(p[pixel[4]] > cb)
03011 if(p[pixel[5]] > cb)
03012 if(p[pixel[6]] > cb)
03013 if(p[pixel[7]] > cb)
03014 if(p[pixel[8]] > cb)
03015 if(p[pixel[9]] > cb)
03016 if(p[pixel[10]] > cb)
03017 if(p[pixel[11]] > cb)
03018 if(p[pixel[12]] > cb)
03019 if(p[pixel[3]] > cb)
03020 if(p[pixel[2]] > cb)
03021 if(p[pixel[1]] > cb)
03022 {}
03023 else
03024 if(p[pixel[13]] > cb)
03025 {}
03026 else
03027 continue;
03028 else
03029 if(p[pixel[13]] > cb)
03030 if(p[pixel[14]] > cb)
03031 {}
03032 else
03033 continue;
03034 else
03035 continue;
03036 else
03037 if(p[pixel[13]] > cb)
03038 if(p[pixel[14]] > cb)
03039 if(p[pixel[15]] > cb)
03040 {}
03041 else
03042 continue;
03043 else
03044 continue;
03045 else
03046 continue;
03047 else
03048 continue;
03049 else
03050 continue;
03051 else
03052 continue;
03053 else
03054 continue;
03055 else
03056 continue;
03057 else
03058 continue;
03059 else
03060 continue;
03061 else
03062 continue;
03063 else if(p[pixel[4]] < c_b)
03064 if(p[pixel[5]] < c_b)
03065 if(p[pixel[6]] < c_b)
03066 if(p[pixel[7]] < c_b)
03067 if(p[pixel[8]] < c_b)
03068 if(p[pixel[9]] < c_b)
03069 if(p[pixel[10]] < c_b)
03070 if(p[pixel[11]] < c_b)
03071 if(p[pixel[12]] < c_b)
03072 if(p[pixel[3]] < c_b)
03073 if(p[pixel[2]] < c_b)
03074 if(p[pixel[1]] < c_b)
03075 {}
03076 else
03077 if(p[pixel[13]] < c_b)
03078 {}
03079 else
03080 continue;
03081 else
03082 if(p[pixel[13]] < c_b)
03083 if(p[pixel[14]] < c_b)
03084 {}
03085 else
03086 continue;
03087 else
03088 continue;
03089 else
03090 if(p[pixel[13]] < c_b)
03091 if(p[pixel[14]] < c_b)
03092 if(p[pixel[15]] < c_b)
03093 {}
03094 else
03095 continue;
03096 else
03097 continue;
03098 else
03099 continue;
03100 else
03101 continue;
03102 else
03103 continue;
03104 else
03105 continue;
03106 else
03107 continue;
03108 else
03109 continue;
03110 else
03111 continue;
03112 else
03113 continue;
03114 else
03115 continue;
03116 else
03117 continue;
03118 if(num_corners == rsize)
03119 {
03120 rsize*=2;
03121 ret_corners = (xy*)realloc(ret_corners, sizeof(xy)*rsize);
03122 }
03123
03124 ret_corners[num_corners].x = x;
03125 ret_corners[num_corners].y = y;
03126 num_corners++;
03127 }
03128
03129 *ret_num_corners = num_corners;
03130 return ret_corners;
03131
03132 }
03133
03134