Paparazzi UAS  v5.12_stable-4-g9b43e9b
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
fast_rosten.c
Go to the documentation of this file.
1 /*
2 Copyright (c) 2006, 2008 Edward Rosten
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
7 are met:
8 
9 
10  *Redistributions of source code must retain the above copyright
11  notice, this list of conditions and the following disclaimer.
12 
13  *Redistributions in binary form must reproduce the above copyright
14  notice, this list of conditions and the following disclaimer in the
15  documentation and/or other materials provided with the distribution.
16 
17  *Neither the name of the University of Cambridge nor the names of
18  its contributors may be used to endorse or promote products derived
19  from this software without specific prior written permission.
20 
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33 
34 #include <stdlib.h>
35 #include "fast_rosten.h"
36 
37 static void fast_make_offsets(int32_t *pixel, uint16_t row_stride, uint8_t pixel_size);
38 
52 void fast9_detect(struct image_t *img, uint8_t threshold, uint16_t min_dist, uint16_t x_padding, uint16_t y_padding, uint16_t *num_corners, uint16_t *ret_corners_length, struct point_t **ret_corners, uint16_t *roi)
53 {
54 
55  uint16_t corner_cnt = *num_corners;
56  int pixel[16];
57  int16_t i;
58  uint16_t x, y, x_min, x_max, y_min, x_start, x_end, y_start, y_end;
59  uint8_t need_skip;
60  // Set the pixel size
61  uint8_t pixel_size = 1;
62  if (img->type == IMAGE_YUV422) {
63  pixel_size = 2;
64  }
65 
66  // Padding less than min_dist could cause overflow on some comparisons below.
67  if (x_padding < min_dist) {
68  x_padding = min_dist;
69  }
70  if (y_padding < min_dist) {
71  y_padding = min_dist;
72  }
73 
74  if (!roi) {
75  x_start = 3 + x_padding;
76  y_start = 3 + y_padding;
77  x_end = img->w - 3 - x_padding;
78  y_end = img->h - 3 - y_padding;
79  } else {
80  x_start = roi[0] > 0 ? roi[0] : 3 + x_padding;
81  y_start = roi[1] > 0 ? roi[1] : 3 + y_padding;
82  x_end = roi[2] < (img->w - 3 - x_padding) ? roi[2] : img->w - 3 - x_padding;
83  y_end = roi[3] < (img->h - 3 - y_padding) ? roi[3] : img->h - 3 - y_padding;
84 
85  }
86 
87  // Calculate the pixel offsets
88  fast_make_offsets(pixel, img->w, pixel_size);
89 
90  // Go trough all the pixels (minus the borders and inside the requested roi)
91  for (y = y_start; y < y_end; y++) {
92 
93  if (min_dist > 0) {
94  y_min = y - min_dist;
95  }
96 
97  for (x = x_start; x < x_end; x++) {
98  // First check if we aren't in range vertical (TODO: fix less intensive way)
99  if (min_dist > 0) {
100 
101  need_skip = 0;
102 
103  x_min = x - min_dist;
104  x_max = x + min_dist;
105 
106 
107  // Go through the previous corners until y goes out of range
108  i = corner_cnt - 1;
109  while (i >= 0) {
110 
111  // corners are stored with increasing y,
112  // so if we go from the last to the first, then their y-coordinate will go out of range
113  if ((*ret_corners)[i].y < y_min) {
114  break;
115  }
116  /*
117  // If detecting with already existing corners gives too much overlap uncomment this comparison instead of the one above.
118  // But, it will make the detection more time consuming
119  // TODO: maybe sort the corners before calling...
120  if(ret_corners[i].y < y_min || ret_corners[i].y > y_max){
121  i--;
122  continue;
123  }
124  */
125 
126  if (x_min < (*ret_corners)[i].x && (*ret_corners)[i].x < x_max) {
127  need_skip = 1;
128  break;
129  }
130 
131  i--;
132  }
133 
134  // Skip the box if we found a pixel nearby
135  if (need_skip) {
136  x += min_dist;
137  continue;
138  }
139  }
140 
141  // Calculate the threshold values
142  const uint8_t *p = ((uint8_t *)img->buf) + y * img->w * pixel_size + x * pixel_size + pixel_size / 2;
143  int16_t cb = *p + threshold;
144  int16_t c_b = *p - threshold;
145 
146  // Do the checks if it is a corner
147  if (p[pixel[0]] > cb)
148  if (p[pixel[1]] > cb)
149  if (p[pixel[2]] > cb)
150  if (p[pixel[3]] > cb)
151  if (p[pixel[4]] > cb)
152  if (p[pixel[5]] > cb)
153  if (p[pixel[6]] > cb)
154  if (p[pixel[7]] > cb)
155  if (p[pixel[8]] > cb)
156  {}
157  else if (p[pixel[15]] > cb)
158  {}
159  else {
160  continue;
161  }
162  else if (p[pixel[7]] < c_b)
163  if (p[pixel[14]] > cb)
164  if (p[pixel[15]] > cb)
165  {}
166  else {
167  continue;
168  }
169  else if (p[pixel[14]] < c_b)
170  if (p[pixel[8]] < c_b)
171  if (p[pixel[9]] < c_b)
172  if (p[pixel[10]] < c_b)
173  if (p[pixel[11]] < c_b)
174  if (p[pixel[12]] < c_b)
175  if (p[pixel[13]] < c_b)
176  if (p[pixel[15]] < c_b)
177  {}
178  else {
179  continue;
180  }
181  else {
182  continue;
183  }
184  else {
185  continue;
186  }
187  else {
188  continue;
189  }
190  else {
191  continue;
192  }
193  else {
194  continue;
195  }
196  else {
197  continue;
198  }
199  else {
200  continue;
201  }
202  else if (p[pixel[14]] > cb)
203  if (p[pixel[15]] > cb)
204  {}
205  else {
206  continue;
207  }
208  else {
209  continue;
210  }
211  else if (p[pixel[6]] < c_b)
212  if (p[pixel[15]] > cb)
213  if (p[pixel[13]] > cb)
214  if (p[pixel[14]] > cb)
215  {}
216  else {
217  continue;
218  }
219  else if (p[pixel[13]] < c_b)
220  if (p[pixel[7]] < c_b)
221  if (p[pixel[8]] < c_b)
222  if (p[pixel[9]] < c_b)
223  if (p[pixel[10]] < c_b)
224  if (p[pixel[11]] < c_b)
225  if (p[pixel[12]] < c_b)
226  if (p[pixel[14]] < c_b)
227  {}
228  else {
229  continue;
230  }
231  else {
232  continue;
233  }
234  else {
235  continue;
236  }
237  else {
238  continue;
239  }
240  else {
241  continue;
242  }
243  else {
244  continue;
245  }
246  else {
247  continue;
248  }
249  else {
250  continue;
251  }
252  else if (p[pixel[7]] < c_b)
253  if (p[pixel[8]] < c_b)
254  if (p[pixel[9]] < c_b)
255  if (p[pixel[10]] < c_b)
256  if (p[pixel[11]] < c_b)
257  if (p[pixel[12]] < c_b)
258  if (p[pixel[13]] < c_b)
259  if (p[pixel[14]] < c_b)
260  {}
261  else {
262  continue;
263  }
264  else {
265  continue;
266  }
267  else {
268  continue;
269  }
270  else {
271  continue;
272  }
273  else {
274  continue;
275  }
276  else {
277  continue;
278  }
279  else {
280  continue;
281  }
282  else {
283  continue;
284  }
285  else if (p[pixel[13]] > cb)
286  if (p[pixel[14]] > cb)
287  if (p[pixel[15]] > cb)
288  {}
289  else {
290  continue;
291  }
292  else {
293  continue;
294  }
295  else if (p[pixel[13]] < c_b)
296  if (p[pixel[7]] < c_b)
297  if (p[pixel[8]] < c_b)
298  if (p[pixel[9]] < c_b)
299  if (p[pixel[10]] < c_b)
300  if (p[pixel[11]] < c_b)
301  if (p[pixel[12]] < c_b)
302  if (p[pixel[14]] < c_b)
303  if (p[pixel[15]] < c_b)
304  {}
305  else {
306  continue;
307  }
308  else {
309  continue;
310  }
311  else {
312  continue;
313  }
314  else {
315  continue;
316  }
317  else {
318  continue;
319  }
320  else {
321  continue;
322  }
323  else {
324  continue;
325  }
326  else {
327  continue;
328  }
329  else {
330  continue;
331  }
332  else if (p[pixel[5]] < c_b)
333  if (p[pixel[14]] > cb)
334  if (p[pixel[12]] > cb)
335  if (p[pixel[13]] > cb)
336  if (p[pixel[15]] > cb)
337  {}
338  else if (p[pixel[6]] > cb)
339  if (p[pixel[7]] > cb)
340  if (p[pixel[8]] > cb)
341  if (p[pixel[9]] > cb)
342  if (p[pixel[10]] > cb)
343  if (p[pixel[11]] > cb)
344  {}
345  else {
346  continue;
347  }
348  else {
349  continue;
350  }
351  else {
352  continue;
353  }
354  else {
355  continue;
356  }
357  else {
358  continue;
359  }
360  else {
361  continue;
362  }
363  else {
364  continue;
365  }
366  else if (p[pixel[12]] < c_b)
367  if (p[pixel[6]] < c_b)
368  if (p[pixel[7]] < c_b)
369  if (p[pixel[8]] < c_b)
370  if (p[pixel[9]] < c_b)
371  if (p[pixel[10]] < c_b)
372  if (p[pixel[11]] < c_b)
373  if (p[pixel[13]] < c_b)
374  {}
375  else {
376  continue;
377  }
378  else {
379  continue;
380  }
381  else {
382  continue;
383  }
384  else {
385  continue;
386  }
387  else {
388  continue;
389  }
390  else {
391  continue;
392  }
393  else {
394  continue;
395  }
396  else {
397  continue;
398  }
399  else if (p[pixel[14]] < c_b)
400  if (p[pixel[7]] < c_b)
401  if (p[pixel[8]] < c_b)
402  if (p[pixel[9]] < c_b)
403  if (p[pixel[10]] < c_b)
404  if (p[pixel[11]] < c_b)
405  if (p[pixel[12]] < c_b)
406  if (p[pixel[13]] < c_b)
407  if (p[pixel[6]] < c_b)
408  {}
409  else if (p[pixel[15]] < c_b)
410  {}
411  else {
412  continue;
413  }
414  else {
415  continue;
416  }
417  else {
418  continue;
419  }
420  else {
421  continue;
422  }
423  else {
424  continue;
425  }
426  else {
427  continue;
428  }
429  else {
430  continue;
431  }
432  else {
433  continue;
434  }
435  else if (p[pixel[6]] < c_b)
436  if (p[pixel[7]] < c_b)
437  if (p[pixel[8]] < c_b)
438  if (p[pixel[9]] < c_b)
439  if (p[pixel[10]] < c_b)
440  if (p[pixel[11]] < c_b)
441  if (p[pixel[12]] < c_b)
442  if (p[pixel[13]] < c_b)
443  {}
444  else {
445  continue;
446  }
447  else {
448  continue;
449  }
450  else {
451  continue;
452  }
453  else {
454  continue;
455  }
456  else {
457  continue;
458  }
459  else {
460  continue;
461  }
462  else {
463  continue;
464  }
465  else {
466  continue;
467  }
468  else if (p[pixel[12]] > cb)
469  if (p[pixel[13]] > cb)
470  if (p[pixel[14]] > cb)
471  if (p[pixel[15]] > cb)
472  {}
473  else if (p[pixel[6]] > cb)
474  if (p[pixel[7]] > cb)
475  if (p[pixel[8]] > cb)
476  if (p[pixel[9]] > cb)
477  if (p[pixel[10]] > cb)
478  if (p[pixel[11]] > cb)
479  {}
480  else {
481  continue;
482  }
483  else {
484  continue;
485  }
486  else {
487  continue;
488  }
489  else {
490  continue;
491  }
492  else {
493  continue;
494  }
495  else {
496  continue;
497  }
498  else {
499  continue;
500  }
501  else {
502  continue;
503  }
504  else if (p[pixel[12]] < c_b)
505  if (p[pixel[7]] < c_b)
506  if (p[pixel[8]] < c_b)
507  if (p[pixel[9]] < c_b)
508  if (p[pixel[10]] < c_b)
509  if (p[pixel[11]] < c_b)
510  if (p[pixel[13]] < c_b)
511  if (p[pixel[14]] < c_b)
512  if (p[pixel[6]] < c_b)
513  {}
514  else if (p[pixel[15]] < c_b)
515  {}
516  else {
517  continue;
518  }
519  else {
520  continue;
521  }
522  else {
523  continue;
524  }
525  else {
526  continue;
527  }
528  else {
529  continue;
530  }
531  else {
532  continue;
533  }
534  else {
535  continue;
536  }
537  else {
538  continue;
539  }
540  else {
541  continue;
542  }
543  else if (p[pixel[4]] < c_b)
544  if (p[pixel[13]] > cb)
545  if (p[pixel[11]] > cb)
546  if (p[pixel[12]] > cb)
547  if (p[pixel[14]] > cb)
548  if (p[pixel[15]] > cb)
549  {}
550  else if (p[pixel[6]] > cb)
551  if (p[pixel[7]] > cb)
552  if (p[pixel[8]] > cb)
553  if (p[pixel[9]] > cb)
554  if (p[pixel[10]] > cb)
555  {}
556  else {
557  continue;
558  }
559  else {
560  continue;
561  }
562  else {
563  continue;
564  }
565  else {
566  continue;
567  }
568  else {
569  continue;
570  }
571  else if (p[pixel[5]] > cb)
572  if (p[pixel[6]] > cb)
573  if (p[pixel[7]] > cb)
574  if (p[pixel[8]] > cb)
575  if (p[pixel[9]] > cb)
576  if (p[pixel[10]] > cb)
577  {}
578  else {
579  continue;
580  }
581  else {
582  continue;
583  }
584  else {
585  continue;
586  }
587  else {
588  continue;
589  }
590  else {
591  continue;
592  }
593  else {
594  continue;
595  }
596  else {
597  continue;
598  }
599  else if (p[pixel[11]] < c_b)
600  if (p[pixel[5]] < c_b)
601  if (p[pixel[6]] < c_b)
602  if (p[pixel[7]] < c_b)
603  if (p[pixel[8]] < c_b)
604  if (p[pixel[9]] < c_b)
605  if (p[pixel[10]] < c_b)
606  if (p[pixel[12]] < c_b)
607  {}
608  else {
609  continue;
610  }
611  else {
612  continue;
613  }
614  else {
615  continue;
616  }
617  else {
618  continue;
619  }
620  else {
621  continue;
622  }
623  else {
624  continue;
625  }
626  else {
627  continue;
628  }
629  else {
630  continue;
631  }
632  else if (p[pixel[13]] < c_b)
633  if (p[pixel[7]] < c_b)
634  if (p[pixel[8]] < c_b)
635  if (p[pixel[9]] < c_b)
636  if (p[pixel[10]] < c_b)
637  if (p[pixel[11]] < c_b)
638  if (p[pixel[12]] < c_b)
639  if (p[pixel[6]] < c_b)
640  if (p[pixel[5]] < c_b)
641  {}
642  else if (p[pixel[14]] < c_b)
643  {}
644  else {
645  continue;
646  }
647  else if (p[pixel[14]] < c_b)
648  if (p[pixel[15]] < c_b)
649  {}
650  else {
651  continue;
652  }
653  else {
654  continue;
655  }
656  else {
657  continue;
658  }
659  else {
660  continue;
661  }
662  else {
663  continue;
664  }
665  else {
666  continue;
667  }
668  else {
669  continue;
670  }
671  else {
672  continue;
673  }
674  else if (p[pixel[5]] < c_b)
675  if (p[pixel[6]] < c_b)
676  if (p[pixel[7]] < c_b)
677  if (p[pixel[8]] < c_b)
678  if (p[pixel[9]] < c_b)
679  if (p[pixel[10]] < c_b)
680  if (p[pixel[11]] < c_b)
681  if (p[pixel[12]] < c_b)
682  {}
683  else {
684  continue;
685  }
686  else {
687  continue;
688  }
689  else {
690  continue;
691  }
692  else {
693  continue;
694  }
695  else {
696  continue;
697  }
698  else {
699  continue;
700  }
701  else {
702  continue;
703  }
704  else {
705  continue;
706  }
707  else if (p[pixel[11]] > cb)
708  if (p[pixel[12]] > cb)
709  if (p[pixel[13]] > cb)
710  if (p[pixel[14]] > cb)
711  if (p[pixel[15]] > cb)
712  {}
713  else if (p[pixel[6]] > cb)
714  if (p[pixel[7]] > cb)
715  if (p[pixel[8]] > cb)
716  if (p[pixel[9]] > cb)
717  if (p[pixel[10]] > cb)
718  {}
719  else {
720  continue;
721  }
722  else {
723  continue;
724  }
725  else {
726  continue;
727  }
728  else {
729  continue;
730  }
731  else {
732  continue;
733  }
734  else if (p[pixel[5]] > cb)
735  if (p[pixel[6]] > cb)
736  if (p[pixel[7]] > cb)
737  if (p[pixel[8]] > cb)
738  if (p[pixel[9]] > cb)
739  if (p[pixel[10]] > cb)
740  {}
741  else {
742  continue;
743  }
744  else {
745  continue;
746  }
747  else {
748  continue;
749  }
750  else {
751  continue;
752  }
753  else {
754  continue;
755  }
756  else {
757  continue;
758  }
759  else {
760  continue;
761  }
762  else {
763  continue;
764  }
765  else if (p[pixel[11]] < c_b)
766  if (p[pixel[7]] < c_b)
767  if (p[pixel[8]] < c_b)
768  if (p[pixel[9]] < c_b)
769  if (p[pixel[10]] < c_b)
770  if (p[pixel[12]] < c_b)
771  if (p[pixel[13]] < c_b)
772  if (p[pixel[6]] < c_b)
773  if (p[pixel[5]] < c_b)
774  {}
775  else if (p[pixel[14]] < c_b)
776  {}
777  else {
778  continue;
779  }
780  else if (p[pixel[14]] < c_b)
781  if (p[pixel[15]] < c_b)
782  {}
783  else {
784  continue;
785  }
786  else {
787  continue;
788  }
789  else {
790  continue;
791  }
792  else {
793  continue;
794  }
795  else {
796  continue;
797  }
798  else {
799  continue;
800  }
801  else {
802  continue;
803  }
804  else {
805  continue;
806  }
807  else {
808  continue;
809  }
810  else if (p[pixel[3]] < c_b)
811  if (p[pixel[10]] > cb)
812  if (p[pixel[11]] > cb)
813  if (p[pixel[12]] > cb)
814  if (p[pixel[13]] > cb)
815  if (p[pixel[14]] > cb)
816  if (p[pixel[15]] > cb)
817  {}
818  else if (p[pixel[6]] > cb)
819  if (p[pixel[7]] > cb)
820  if (p[pixel[8]] > cb)
821  if (p[pixel[9]] > cb)
822  {}
823  else {
824  continue;
825  }
826  else {
827  continue;
828  }
829  else {
830  continue;
831  }
832  else {
833  continue;
834  }
835  else if (p[pixel[5]] > cb)
836  if (p[pixel[6]] > cb)
837  if (p[pixel[7]] > cb)
838  if (p[pixel[8]] > cb)
839  if (p[pixel[9]] > cb)
840  {}
841  else {
842  continue;
843  }
844  else {
845  continue;
846  }
847  else {
848  continue;
849  }
850  else {
851  continue;
852  }
853  else {
854  continue;
855  }
856  else if (p[pixel[4]] > cb)
857  if (p[pixel[5]] > cb)
858  if (p[pixel[6]] > cb)
859  if (p[pixel[7]] > cb)
860  if (p[pixel[8]] > cb)
861  if (p[pixel[9]] > cb)
862  {}
863  else {
864  continue;
865  }
866  else {
867  continue;
868  }
869  else {
870  continue;
871  }
872  else {
873  continue;
874  }
875  else {
876  continue;
877  }
878  else {
879  continue;
880  }
881  else {
882  continue;
883  }
884  else {
885  continue;
886  }
887  else if (p[pixel[10]] < c_b)
888  if (p[pixel[7]] < c_b)
889  if (p[pixel[8]] < c_b)
890  if (p[pixel[9]] < c_b)
891  if (p[pixel[11]] < c_b)
892  if (p[pixel[6]] < c_b)
893  if (p[pixel[5]] < c_b)
894  if (p[pixel[4]] < c_b)
895  {}
896  else if (p[pixel[12]] < c_b)
897  if (p[pixel[13]] < c_b)
898  {}
899  else {
900  continue;
901  }
902  else {
903  continue;
904  }
905  else if (p[pixel[12]] < c_b)
906  if (p[pixel[13]] < c_b)
907  if (p[pixel[14]] < c_b)
908  {}
909  else {
910  continue;
911  }
912  else {
913  continue;
914  }
915  else {
916  continue;
917  }
918  else if (p[pixel[12]] < c_b)
919  if (p[pixel[13]] < c_b)
920  if (p[pixel[14]] < c_b)
921  if (p[pixel[15]] < c_b)
922  {}
923  else {
924  continue;
925  }
926  else {
927  continue;
928  }
929  else {
930  continue;
931  }
932  else {
933  continue;
934  }
935  else {
936  continue;
937  }
938  else {
939  continue;
940  }
941  else {
942  continue;
943  }
944  else {
945  continue;
946  }
947  else {
948  continue;
949  }
950  else if (p[pixel[10]] > cb)
951  if (p[pixel[11]] > cb)
952  if (p[pixel[12]] > cb)
953  if (p[pixel[13]] > cb)
954  if (p[pixel[14]] > cb)
955  if (p[pixel[15]] > cb)
956  {}
957  else if (p[pixel[6]] > cb)
958  if (p[pixel[7]] > cb)
959  if (p[pixel[8]] > cb)
960  if (p[pixel[9]] > cb)
961  {}
962  else {
963  continue;
964  }
965  else {
966  continue;
967  }
968  else {
969  continue;
970  }
971  else {
972  continue;
973  }
974  else if (p[pixel[5]] > cb)
975  if (p[pixel[6]] > cb)
976  if (p[pixel[7]] > cb)
977  if (p[pixel[8]] > cb)
978  if (p[pixel[9]] > cb)
979  {}
980  else {
981  continue;
982  }
983  else {
984  continue;
985  }
986  else {
987  continue;
988  }
989  else {
990  continue;
991  }
992  else {
993  continue;
994  }
995  else if (p[pixel[4]] > cb)
996  if (p[pixel[5]] > cb)
997  if (p[pixel[6]] > cb)
998  if (p[pixel[7]] > cb)
999  if (p[pixel[8]] > cb)
1000  if (p[pixel[9]] > cb)
1001  {}
1002  else {
1003  continue;
1004  }
1005  else {
1006  continue;
1007  }
1008  else {
1009  continue;
1010  }
1011  else {
1012  continue;
1013  }
1014  else {
1015  continue;
1016  }
1017  else {
1018  continue;
1019  }
1020  else {
1021  continue;
1022  }
1023  else {
1024  continue;
1025  }
1026  else if (p[pixel[10]] < c_b)
1027  if (p[pixel[7]] < c_b)
1028  if (p[pixel[8]] < c_b)
1029  if (p[pixel[9]] < c_b)
1030  if (p[pixel[11]] < c_b)
1031  if (p[pixel[12]] < c_b)
1032  if (p[pixel[6]] < c_b)
1033  if (p[pixel[5]] < c_b)
1034  if (p[pixel[4]] < c_b)
1035  {}
1036  else if (p[pixel[13]] < c_b)
1037  {}
1038  else {
1039  continue;
1040  }
1041  else if (p[pixel[13]] < c_b)
1042  if (p[pixel[14]] < c_b)
1043  {}
1044  else {
1045  continue;
1046  }
1047  else {
1048  continue;
1049  }
1050  else if (p[pixel[13]] < c_b)
1051  if (p[pixel[14]] < c_b)
1052  if (p[pixel[15]] < c_b)
1053  {}
1054  else {
1055  continue;
1056  }
1057  else {
1058  continue;
1059  }
1060  else {
1061  continue;
1062  }
1063  else {
1064  continue;
1065  }
1066  else {
1067  continue;
1068  }
1069  else {
1070  continue;
1071  }
1072  else {
1073  continue;
1074  }
1075  else {
1076  continue;
1077  }
1078  else {
1079  continue;
1080  }
1081  else if (p[pixel[2]] < c_b)
1082  if (p[pixel[9]] > cb)
1083  if (p[pixel[10]] > cb)
1084  if (p[pixel[11]] > cb)
1085  if (p[pixel[12]] > cb)
1086  if (p[pixel[13]] > cb)
1087  if (p[pixel[14]] > cb)
1088  if (p[pixel[15]] > cb)
1089  {}
1090  else if (p[pixel[6]] > cb)
1091  if (p[pixel[7]] > cb)
1092  if (p[pixel[8]] > cb)
1093  {}
1094  else {
1095  continue;
1096  }
1097  else {
1098  continue;
1099  }
1100  else {
1101  continue;
1102  }
1103  else if (p[pixel[5]] > cb)
1104  if (p[pixel[6]] > cb)
1105  if (p[pixel[7]] > cb)
1106  if (p[pixel[8]] > cb)
1107  {}
1108  else {
1109  continue;
1110  }
1111  else {
1112  continue;
1113  }
1114  else {
1115  continue;
1116  }
1117  else {
1118  continue;
1119  }
1120  else if (p[pixel[4]] > cb)
1121  if (p[pixel[5]] > cb)
1122  if (p[pixel[6]] > cb)
1123  if (p[pixel[7]] > cb)
1124  if (p[pixel[8]] > cb)
1125  {}
1126  else {
1127  continue;
1128  }
1129  else {
1130  continue;
1131  }
1132  else {
1133  continue;
1134  }
1135  else {
1136  continue;
1137  }
1138  else {
1139  continue;
1140  }
1141  else if (p[pixel[3]] > cb)
1142  if (p[pixel[4]] > cb)
1143  if (p[pixel[5]] > cb)
1144  if (p[pixel[6]] > cb)
1145  if (p[pixel[7]] > cb)
1146  if (p[pixel[8]] > cb)
1147  {}
1148  else {
1149  continue;
1150  }
1151  else {
1152  continue;
1153  }
1154  else {
1155  continue;
1156  }
1157  else {
1158  continue;
1159  }
1160  else {
1161  continue;
1162  }
1163  else {
1164  continue;
1165  }
1166  else {
1167  continue;
1168  }
1169  else {
1170  continue;
1171  }
1172  else if (p[pixel[9]] < c_b)
1173  if (p[pixel[7]] < c_b)
1174  if (p[pixel[8]] < c_b)
1175  if (p[pixel[10]] < c_b)
1176  if (p[pixel[6]] < c_b)
1177  if (p[pixel[5]] < c_b)
1178  if (p[pixel[4]] < c_b)
1179  if (p[pixel[3]] < c_b)
1180  {}
1181  else if (p[pixel[11]] < c_b)
1182  if (p[pixel[12]] < c_b)
1183  {}
1184  else {
1185  continue;
1186  }
1187  else {
1188  continue;
1189  }
1190  else if (p[pixel[11]] < c_b)
1191  if (p[pixel[12]] < c_b)
1192  if (p[pixel[13]] < c_b)
1193  {}
1194  else {
1195  continue;
1196  }
1197  else {
1198  continue;
1199  }
1200  else {
1201  continue;
1202  }
1203  else if (p[pixel[11]] < c_b)
1204  if (p[pixel[12]] < c_b)
1205  if (p[pixel[13]] < c_b)
1206  if (p[pixel[14]] < c_b)
1207  {}
1208  else {
1209  continue;
1210  }
1211  else {
1212  continue;
1213  }
1214  else {
1215  continue;
1216  }
1217  else {
1218  continue;
1219  }
1220  else if (p[pixel[11]] < c_b)
1221  if (p[pixel[12]] < c_b)
1222  if (p[pixel[13]] < c_b)
1223  if (p[pixel[14]] < c_b)
1224  if (p[pixel[15]] < c_b)
1225  {}
1226  else {
1227  continue;
1228  }
1229  else {
1230  continue;
1231  }
1232  else {
1233  continue;
1234  }
1235  else {
1236  continue;
1237  }
1238  else {
1239  continue;
1240  }
1241  else {
1242  continue;
1243  }
1244  else {
1245  continue;
1246  }
1247  else {
1248  continue;
1249  }
1250  else {
1251  continue;
1252  }
1253  else if (p[pixel[9]] > cb)
1254  if (p[pixel[10]] > cb)
1255  if (p[pixel[11]] > cb)
1256  if (p[pixel[12]] > cb)
1257  if (p[pixel[13]] > cb)
1258  if (p[pixel[14]] > cb)
1259  if (p[pixel[15]] > cb)
1260  {}
1261  else if (p[pixel[6]] > cb)
1262  if (p[pixel[7]] > cb)
1263  if (p[pixel[8]] > cb)
1264  {}
1265  else {
1266  continue;
1267  }
1268  else {
1269  continue;
1270  }
1271  else {
1272  continue;
1273  }
1274  else if (p[pixel[5]] > cb)
1275  if (p[pixel[6]] > cb)
1276  if (p[pixel[7]] > cb)
1277  if (p[pixel[8]] > cb)
1278  {}
1279  else {
1280  continue;
1281  }
1282  else {
1283  continue;
1284  }
1285  else {
1286  continue;
1287  }
1288  else {
1289  continue;
1290  }
1291  else if (p[pixel[4]] > cb)
1292  if (p[pixel[5]] > cb)
1293  if (p[pixel[6]] > cb)
1294  if (p[pixel[7]] > cb)
1295  if (p[pixel[8]] > cb)
1296  {}
1297  else {
1298  continue;
1299  }
1300  else {
1301  continue;
1302  }
1303  else {
1304  continue;
1305  }
1306  else {
1307  continue;
1308  }
1309  else {
1310  continue;
1311  }
1312  else if (p[pixel[3]] > cb)
1313  if (p[pixel[4]] > cb)
1314  if (p[pixel[5]] > cb)
1315  if (p[pixel[6]] > cb)
1316  if (p[pixel[7]] > cb)
1317  if (p[pixel[8]] > cb)
1318  {}
1319  else {
1320  continue;
1321  }
1322  else {
1323  continue;
1324  }
1325  else {
1326  continue;
1327  }
1328  else {
1329  continue;
1330  }
1331  else {
1332  continue;
1333  }
1334  else {
1335  continue;
1336  }
1337  else {
1338  continue;
1339  }
1340  else {
1341  continue;
1342  }
1343  else if (p[pixel[9]] < c_b)
1344  if (p[pixel[7]] < c_b)
1345  if (p[pixel[8]] < c_b)
1346  if (p[pixel[10]] < c_b)
1347  if (p[pixel[11]] < c_b)
1348  if (p[pixel[6]] < c_b)
1349  if (p[pixel[5]] < c_b)
1350  if (p[pixel[4]] < c_b)
1351  if (p[pixel[3]] < c_b)
1352  {}
1353  else if (p[pixel[12]] < c_b)
1354  {}
1355  else {
1356  continue;
1357  }
1358  else if (p[pixel[12]] < c_b)
1359  if (p[pixel[13]] < c_b)
1360  {}
1361  else {
1362  continue;
1363  }
1364  else {
1365  continue;
1366  }
1367  else if (p[pixel[12]] < c_b)
1368  if (p[pixel[13]] < c_b)
1369  if (p[pixel[14]] < c_b)
1370  {}
1371  else {
1372  continue;
1373  }
1374  else {
1375  continue;
1376  }
1377  else {
1378  continue;
1379  }
1380  else if (p[pixel[12]] < c_b)
1381  if (p[pixel[13]] < c_b)
1382  if (p[pixel[14]] < c_b)
1383  if (p[pixel[15]] < c_b)
1384  {}
1385  else {
1386  continue;
1387  }
1388  else {
1389  continue;
1390  }
1391  else {
1392  continue;
1393  }
1394  else {
1395  continue;
1396  }
1397  else {
1398  continue;
1399  }
1400  else {
1401  continue;
1402  }
1403  else {
1404  continue;
1405  }
1406  else {
1407  continue;
1408  }
1409  else {
1410  continue;
1411  }
1412  else if (p[pixel[1]] < c_b)
1413  if (p[pixel[8]] > cb)
1414  if (p[pixel[9]] > cb)
1415  if (p[pixel[10]] > cb)
1416  if (p[pixel[11]] > cb)
1417  if (p[pixel[12]] > cb)
1418  if (p[pixel[13]] > cb)
1419  if (p[pixel[14]] > cb)
1420  if (p[pixel[15]] > cb)
1421  {}
1422  else if (p[pixel[6]] > cb)
1423  if (p[pixel[7]] > cb)
1424  {}
1425  else {
1426  continue;
1427  }
1428  else {
1429  continue;
1430  }
1431  else if (p[pixel[5]] > cb)
1432  if (p[pixel[6]] > cb)
1433  if (p[pixel[7]] > cb)
1434  {}
1435  else {
1436  continue;
1437  }
1438  else {
1439  continue;
1440  }
1441  else {
1442  continue;
1443  }
1444  else if (p[pixel[4]] > cb)
1445  if (p[pixel[5]] > cb)
1446  if (p[pixel[6]] > cb)
1447  if (p[pixel[7]] > cb)
1448  {}
1449  else {
1450  continue;
1451  }
1452  else {
1453  continue;
1454  }
1455  else {
1456  continue;
1457  }
1458  else {
1459  continue;
1460  }
1461  else if (p[pixel[3]] > cb)
1462  if (p[pixel[4]] > cb)
1463  if (p[pixel[5]] > cb)
1464  if (p[pixel[6]] > cb)
1465  if (p[pixel[7]] > cb)
1466  {}
1467  else {
1468  continue;
1469  }
1470  else {
1471  continue;
1472  }
1473  else {
1474  continue;
1475  }
1476  else {
1477  continue;
1478  }
1479  else {
1480  continue;
1481  }
1482  else if (p[pixel[2]] > cb)
1483  if (p[pixel[3]] > cb)
1484  if (p[pixel[4]] > cb)
1485  if (p[pixel[5]] > cb)
1486  if (p[pixel[6]] > cb)
1487  if (p[pixel[7]] > cb)
1488  {}
1489  else {
1490  continue;
1491  }
1492  else {
1493  continue;
1494  }
1495  else {
1496  continue;
1497  }
1498  else {
1499  continue;
1500  }
1501  else {
1502  continue;
1503  }
1504  else {
1505  continue;
1506  }
1507  else {
1508  continue;
1509  }
1510  else {
1511  continue;
1512  }
1513  else if (p[pixel[8]] < c_b)
1514  if (p[pixel[7]] < c_b)
1515  if (p[pixel[9]] < c_b)
1516  if (p[pixel[6]] < c_b)
1517  if (p[pixel[5]] < c_b)
1518  if (p[pixel[4]] < c_b)
1519  if (p[pixel[3]] < c_b)
1520  if (p[pixel[2]] < c_b)
1521  {}
1522  else if (p[pixel[10]] < c_b)
1523  if (p[pixel[11]] < c_b)
1524  {}
1525  else {
1526  continue;
1527  }
1528  else {
1529  continue;
1530  }
1531  else if (p[pixel[10]] < c_b)
1532  if (p[pixel[11]] < c_b)
1533  if (p[pixel[12]] < c_b)
1534  {}
1535  else {
1536  continue;
1537  }
1538  else {
1539  continue;
1540  }
1541  else {
1542  continue;
1543  }
1544  else if (p[pixel[10]] < c_b)
1545  if (p[pixel[11]] < c_b)
1546  if (p[pixel[12]] < c_b)
1547  if (p[pixel[13]] < c_b)
1548  {}
1549  else {
1550  continue;
1551  }
1552  else {
1553  continue;
1554  }
1555  else {
1556  continue;
1557  }
1558  else {
1559  continue;
1560  }
1561  else if (p[pixel[10]] < c_b)
1562  if (p[pixel[11]] < c_b)
1563  if (p[pixel[12]] < c_b)
1564  if (p[pixel[13]] < c_b)
1565  if (p[pixel[14]] < c_b)
1566  {}
1567  else {
1568  continue;
1569  }
1570  else {
1571  continue;
1572  }
1573  else {
1574  continue;
1575  }
1576  else {
1577  continue;
1578  }
1579  else {
1580  continue;
1581  }
1582  else if (p[pixel[10]] < c_b)
1583  if (p[pixel[11]] < c_b)
1584  if (p[pixel[12]] < c_b)
1585  if (p[pixel[13]] < c_b)
1586  if (p[pixel[14]] < c_b)
1587  if (p[pixel[15]] < c_b)
1588  {}
1589  else {
1590  continue;
1591  }
1592  else {
1593  continue;
1594  }
1595  else {
1596  continue;
1597  }
1598  else {
1599  continue;
1600  }
1601  else {
1602  continue;
1603  }
1604  else {
1605  continue;
1606  }
1607  else {
1608  continue;
1609  }
1610  else {
1611  continue;
1612  }
1613  else {
1614  continue;
1615  }
1616  else if (p[pixel[8]] > cb)
1617  if (p[pixel[9]] > cb)
1618  if (p[pixel[10]] > cb)
1619  if (p[pixel[11]] > cb)
1620  if (p[pixel[12]] > cb)
1621  if (p[pixel[13]] > cb)
1622  if (p[pixel[14]] > cb)
1623  if (p[pixel[15]] > cb)
1624  {}
1625  else if (p[pixel[6]] > cb)
1626  if (p[pixel[7]] > cb)
1627  {}
1628  else {
1629  continue;
1630  }
1631  else {
1632  continue;
1633  }
1634  else if (p[pixel[5]] > cb)
1635  if (p[pixel[6]] > cb)
1636  if (p[pixel[7]] > cb)
1637  {}
1638  else {
1639  continue;
1640  }
1641  else {
1642  continue;
1643  }
1644  else {
1645  continue;
1646  }
1647  else if (p[pixel[4]] > cb)
1648  if (p[pixel[5]] > cb)
1649  if (p[pixel[6]] > cb)
1650  if (p[pixel[7]] > cb)
1651  {}
1652  else {
1653  continue;
1654  }
1655  else {
1656  continue;
1657  }
1658  else {
1659  continue;
1660  }
1661  else {
1662  continue;
1663  }
1664  else if (p[pixel[3]] > cb)
1665  if (p[pixel[4]] > cb)
1666  if (p[pixel[5]] > cb)
1667  if (p[pixel[6]] > cb)
1668  if (p[pixel[7]] > cb)
1669  {}
1670  else {
1671  continue;
1672  }
1673  else {
1674  continue;
1675  }
1676  else {
1677  continue;
1678  }
1679  else {
1680  continue;
1681  }
1682  else {
1683  continue;
1684  }
1685  else if (p[pixel[2]] > cb)
1686  if (p[pixel[3]] > cb)
1687  if (p[pixel[4]] > cb)
1688  if (p[pixel[5]] > cb)
1689  if (p[pixel[6]] > cb)
1690  if (p[pixel[7]] > cb)
1691  {}
1692  else {
1693  continue;
1694  }
1695  else {
1696  continue;
1697  }
1698  else {
1699  continue;
1700  }
1701  else {
1702  continue;
1703  }
1704  else {
1705  continue;
1706  }
1707  else {
1708  continue;
1709  }
1710  else {
1711  continue;
1712  }
1713  else {
1714  continue;
1715  }
1716  else if (p[pixel[8]] < c_b)
1717  if (p[pixel[7]] < c_b)
1718  if (p[pixel[9]] < c_b)
1719  if (p[pixel[10]] < c_b)
1720  if (p[pixel[6]] < c_b)
1721  if (p[pixel[5]] < c_b)
1722  if (p[pixel[4]] < c_b)
1723  if (p[pixel[3]] < c_b)
1724  if (p[pixel[2]] < c_b)
1725  {}
1726  else if (p[pixel[11]] < c_b)
1727  {}
1728  else {
1729  continue;
1730  }
1731  else if (p[pixel[11]] < c_b)
1732  if (p[pixel[12]] < c_b)
1733  {}
1734  else {
1735  continue;
1736  }
1737  else {
1738  continue;
1739  }
1740  else if (p[pixel[11]] < c_b)
1741  if (p[pixel[12]] < c_b)
1742  if (p[pixel[13]] < c_b)
1743  {}
1744  else {
1745  continue;
1746  }
1747  else {
1748  continue;
1749  }
1750  else {
1751  continue;
1752  }
1753  else if (p[pixel[11]] < c_b)
1754  if (p[pixel[12]] < c_b)
1755  if (p[pixel[13]] < c_b)
1756  if (p[pixel[14]] < c_b)
1757  {}
1758  else {
1759  continue;
1760  }
1761  else {
1762  continue;
1763  }
1764  else {
1765  continue;
1766  }
1767  else {
1768  continue;
1769  }
1770  else if (p[pixel[11]] < c_b)
1771  if (p[pixel[12]] < c_b)
1772  if (p[pixel[13]] < c_b)
1773  if (p[pixel[14]] < c_b)
1774  if (p[pixel[15]] < c_b)
1775  {}
1776  else {
1777  continue;
1778  }
1779  else {
1780  continue;
1781  }
1782  else {
1783  continue;
1784  }
1785  else {
1786  continue;
1787  }
1788  else {
1789  continue;
1790  }
1791  else {
1792  continue;
1793  }
1794  else {
1795  continue;
1796  }
1797  else {
1798  continue;
1799  }
1800  else {
1801  continue;
1802  }
1803  else if (p[pixel[0]] < c_b)
1804  if (p[pixel[1]] > cb)
1805  if (p[pixel[8]] > cb)
1806  if (p[pixel[7]] > cb)
1807  if (p[pixel[9]] > cb)
1808  if (p[pixel[6]] > cb)
1809  if (p[pixel[5]] > cb)
1810  if (p[pixel[4]] > cb)
1811  if (p[pixel[3]] > cb)
1812  if (p[pixel[2]] > cb)
1813  {}
1814  else if (p[pixel[10]] > cb)
1815  if (p[pixel[11]] > cb)
1816  {}
1817  else {
1818  continue;
1819  }
1820  else {
1821  continue;
1822  }
1823  else if (p[pixel[10]] > cb)
1824  if (p[pixel[11]] > cb)
1825  if (p[pixel[12]] > cb)
1826  {}
1827  else {
1828  continue;
1829  }
1830  else {
1831  continue;
1832  }
1833  else {
1834  continue;
1835  }
1836  else if (p[pixel[10]] > cb)
1837  if (p[pixel[11]] > cb)
1838  if (p[pixel[12]] > cb)
1839  if (p[pixel[13]] > cb)
1840  {}
1841  else {
1842  continue;
1843  }
1844  else {
1845  continue;
1846  }
1847  else {
1848  continue;
1849  }
1850  else {
1851  continue;
1852  }
1853  else if (p[pixel[10]] > cb)
1854  if (p[pixel[11]] > cb)
1855  if (p[pixel[12]] > cb)
1856  if (p[pixel[13]] > cb)
1857  if (p[pixel[14]] > cb)
1858  {}
1859  else {
1860  continue;
1861  }
1862  else {
1863  continue;
1864  }
1865  else {
1866  continue;
1867  }
1868  else {
1869  continue;
1870  }
1871  else {
1872  continue;
1873  }
1874  else if (p[pixel[10]] > cb)
1875  if (p[pixel[11]] > cb)
1876  if (p[pixel[12]] > cb)
1877  if (p[pixel[13]] > cb)
1878  if (p[pixel[14]] > cb)
1879  if (p[pixel[15]] > cb)
1880  {}
1881  else {
1882  continue;
1883  }
1884  else {
1885  continue;
1886  }
1887  else {
1888  continue;
1889  }
1890  else {
1891  continue;
1892  }
1893  else {
1894  continue;
1895  }
1896  else {
1897  continue;
1898  }
1899  else {
1900  continue;
1901  }
1902  else {
1903  continue;
1904  }
1905  else if (p[pixel[8]] < c_b)
1906  if (p[pixel[9]] < c_b)
1907  if (p[pixel[10]] < c_b)
1908  if (p[pixel[11]] < c_b)
1909  if (p[pixel[12]] < c_b)
1910  if (p[pixel[13]] < c_b)
1911  if (p[pixel[14]] < c_b)
1912  if (p[pixel[15]] < c_b)
1913  {}
1914  else if (p[pixel[6]] < c_b)
1915  if (p[pixel[7]] < c_b)
1916  {}
1917  else {
1918  continue;
1919  }
1920  else {
1921  continue;
1922  }
1923  else if (p[pixel[5]] < c_b)
1924  if (p[pixel[6]] < c_b)
1925  if (p[pixel[7]] < c_b)
1926  {}
1927  else {
1928  continue;
1929  }
1930  else {
1931  continue;
1932  }
1933  else {
1934  continue;
1935  }
1936  else if (p[pixel[4]] < c_b)
1937  if (p[pixel[5]] < c_b)
1938  if (p[pixel[6]] < c_b)
1939  if (p[pixel[7]] < c_b)
1940  {}
1941  else {
1942  continue;
1943  }
1944  else {
1945  continue;
1946  }
1947  else {
1948  continue;
1949  }
1950  else {
1951  continue;
1952  }
1953  else if (p[pixel[3]] < c_b)
1954  if (p[pixel[4]] < c_b)
1955  if (p[pixel[5]] < c_b)
1956  if (p[pixel[6]] < c_b)
1957  if (p[pixel[7]] < c_b)
1958  {}
1959  else {
1960  continue;
1961  }
1962  else {
1963  continue;
1964  }
1965  else {
1966  continue;
1967  }
1968  else {
1969  continue;
1970  }
1971  else {
1972  continue;
1973  }
1974  else if (p[pixel[2]] < c_b)
1975  if (p[pixel[3]] < c_b)
1976  if (p[pixel[4]] < c_b)
1977  if (p[pixel[5]] < c_b)
1978  if (p[pixel[6]] < c_b)
1979  if (p[pixel[7]] < c_b)
1980  {}
1981  else {
1982  continue;
1983  }
1984  else {
1985  continue;
1986  }
1987  else {
1988  continue;
1989  }
1990  else {
1991  continue;
1992  }
1993  else {
1994  continue;
1995  }
1996  else {
1997  continue;
1998  }
1999  else {
2000  continue;
2001  }
2002  else {
2003  continue;
2004  }
2005  else {
2006  continue;
2007  }
2008  else if (p[pixel[1]] < c_b)
2009  if (p[pixel[2]] > cb)
2010  if (p[pixel[9]] > cb)
2011  if (p[pixel[7]] > cb)
2012  if (p[pixel[8]] > cb)
2013  if (p[pixel[10]] > cb)
2014  if (p[pixel[6]] > cb)
2015  if (p[pixel[5]] > cb)
2016  if (p[pixel[4]] > cb)
2017  if (p[pixel[3]] > cb)
2018  {}
2019  else if (p[pixel[11]] > cb)
2020  if (p[pixel[12]] > cb)
2021  {}
2022  else {
2023  continue;
2024  }
2025  else {
2026  continue;
2027  }
2028  else if (p[pixel[11]] > cb)
2029  if (p[pixel[12]] > cb)
2030  if (p[pixel[13]] > cb)
2031  {}
2032  else {
2033  continue;
2034  }
2035  else {
2036  continue;
2037  }
2038  else {
2039  continue;
2040  }
2041  else if (p[pixel[11]] > cb)
2042  if (p[pixel[12]] > cb)
2043  if (p[pixel[13]] > cb)
2044  if (p[pixel[14]] > cb)
2045  {}
2046  else {
2047  continue;
2048  }
2049  else {
2050  continue;
2051  }
2052  else {
2053  continue;
2054  }
2055  else {
2056  continue;
2057  }
2058  else if (p[pixel[11]] > cb)
2059  if (p[pixel[12]] > cb)
2060  if (p[pixel[13]] > cb)
2061  if (p[pixel[14]] > cb)
2062  if (p[pixel[15]] > cb)
2063  {}
2064  else {
2065  continue;
2066  }
2067  else {
2068  continue;
2069  }
2070  else {
2071  continue;
2072  }
2073  else {
2074  continue;
2075  }
2076  else {
2077  continue;
2078  }
2079  else {
2080  continue;
2081  }
2082  else {
2083  continue;
2084  }
2085  else {
2086  continue;
2087  }
2088  else if (p[pixel[9]] < c_b)
2089  if (p[pixel[10]] < c_b)
2090  if (p[pixel[11]] < c_b)
2091  if (p[pixel[12]] < c_b)
2092  if (p[pixel[13]] < c_b)
2093  if (p[pixel[14]] < c_b)
2094  if (p[pixel[15]] < c_b)
2095  {}
2096  else if (p[pixel[6]] < c_b)
2097  if (p[pixel[7]] < c_b)
2098  if (p[pixel[8]] < c_b)
2099  {}
2100  else {
2101  continue;
2102  }
2103  else {
2104  continue;
2105  }
2106  else {
2107  continue;
2108  }
2109  else if (p[pixel[5]] < c_b)
2110  if (p[pixel[6]] < c_b)
2111  if (p[pixel[7]] < c_b)
2112  if (p[pixel[8]] < c_b)
2113  {}
2114  else {
2115  continue;
2116  }
2117  else {
2118  continue;
2119  }
2120  else {
2121  continue;
2122  }
2123  else {
2124  continue;
2125  }
2126  else if (p[pixel[4]] < c_b)
2127  if (p[pixel[5]] < c_b)
2128  if (p[pixel[6]] < c_b)
2129  if (p[pixel[7]] < c_b)
2130  if (p[pixel[8]] < c_b)
2131  {}
2132  else {
2133  continue;
2134  }
2135  else {
2136  continue;
2137  }
2138  else {
2139  continue;
2140  }
2141  else {
2142  continue;
2143  }
2144  else {
2145  continue;
2146  }
2147  else if (p[pixel[3]] < c_b)
2148  if (p[pixel[4]] < c_b)
2149  if (p[pixel[5]] < c_b)
2150  if (p[pixel[6]] < c_b)
2151  if (p[pixel[7]] < c_b)
2152  if (p[pixel[8]] < c_b)
2153  {}
2154  else {
2155  continue;
2156  }
2157  else {
2158  continue;
2159  }
2160  else {
2161  continue;
2162  }
2163  else {
2164  continue;
2165  }
2166  else {
2167  continue;
2168  }
2169  else {
2170  continue;
2171  }
2172  else {
2173  continue;
2174  }
2175  else {
2176  continue;
2177  }
2178  else {
2179  continue;
2180  }
2181  else if (p[pixel[2]] < c_b)
2182  if (p[pixel[3]] > cb)
2183  if (p[pixel[10]] > cb)
2184  if (p[pixel[7]] > cb)
2185  if (p[pixel[8]] > cb)
2186  if (p[pixel[9]] > cb)
2187  if (p[pixel[11]] > cb)
2188  if (p[pixel[6]] > cb)
2189  if (p[pixel[5]] > cb)
2190  if (p[pixel[4]] > cb)
2191  {}
2192  else if (p[pixel[12]] > cb)
2193  if (p[pixel[13]] > cb)
2194  {}
2195  else {
2196  continue;
2197  }
2198  else {
2199  continue;
2200  }
2201  else if (p[pixel[12]] > cb)
2202  if (p[pixel[13]] > cb)
2203  if (p[pixel[14]] > cb)
2204  {}
2205  else {
2206  continue;
2207  }
2208  else {
2209  continue;
2210  }
2211  else {
2212  continue;
2213  }
2214  else if (p[pixel[12]] > cb)
2215  if (p[pixel[13]] > cb)
2216  if (p[pixel[14]] > cb)
2217  if (p[pixel[15]] > cb)
2218  {}
2219  else {
2220  continue;
2221  }
2222  else {
2223  continue;
2224  }
2225  else {
2226  continue;
2227  }
2228  else {
2229  continue;
2230  }
2231  else {
2232  continue;
2233  }
2234  else {
2235  continue;
2236  }
2237  else {
2238  continue;
2239  }
2240  else {
2241  continue;
2242  }
2243  else if (p[pixel[10]] < c_b)
2244  if (p[pixel[11]] < c_b)
2245  if (p[pixel[12]] < c_b)
2246  if (p[pixel[13]] < c_b)
2247  if (p[pixel[14]] < c_b)
2248  if (p[pixel[15]] < c_b)
2249  {}
2250  else if (p[pixel[6]] < c_b)
2251  if (p[pixel[7]] < c_b)
2252  if (p[pixel[8]] < c_b)
2253  if (p[pixel[9]] < c_b)
2254  {}
2255  else {
2256  continue;
2257  }
2258  else {
2259  continue;
2260  }
2261  else {
2262  continue;
2263  }
2264  else {
2265  continue;
2266  }
2267  else if (p[pixel[5]] < c_b)
2268  if (p[pixel[6]] < c_b)
2269  if (p[pixel[7]] < c_b)
2270  if (p[pixel[8]] < c_b)
2271  if (p[pixel[9]] < c_b)
2272  {}
2273  else {
2274  continue;
2275  }
2276  else {
2277  continue;
2278  }
2279  else {
2280  continue;
2281  }
2282  else {
2283  continue;
2284  }
2285  else {
2286  continue;
2287  }
2288  else if (p[pixel[4]] < c_b)
2289  if (p[pixel[5]] < c_b)
2290  if (p[pixel[6]] < c_b)
2291  if (p[pixel[7]] < c_b)
2292  if (p[pixel[8]] < c_b)
2293  if (p[pixel[9]] < c_b)
2294  {}
2295  else {
2296  continue;
2297  }
2298  else {
2299  continue;
2300  }
2301  else {
2302  continue;
2303  }
2304  else {
2305  continue;
2306  }
2307  else {
2308  continue;
2309  }
2310  else {
2311  continue;
2312  }
2313  else {
2314  continue;
2315  }
2316  else {
2317  continue;
2318  }
2319  else {
2320  continue;
2321  }
2322  else if (p[pixel[3]] < c_b)
2323  if (p[pixel[4]] > cb)
2324  if (p[pixel[13]] > cb)
2325  if (p[pixel[7]] > cb)
2326  if (p[pixel[8]] > cb)
2327  if (p[pixel[9]] > cb)
2328  if (p[pixel[10]] > cb)
2329  if (p[pixel[11]] > cb)
2330  if (p[pixel[12]] > cb)
2331  if (p[pixel[6]] > cb)
2332  if (p[pixel[5]] > cb)
2333  {}
2334  else if (p[pixel[14]] > cb)
2335  {}
2336  else {
2337  continue;
2338  }
2339  else if (p[pixel[14]] > cb)
2340  if (p[pixel[15]] > cb)
2341  {}
2342  else {
2343  continue;
2344  }
2345  else {
2346  continue;
2347  }
2348  else {
2349  continue;
2350  }
2351  else {
2352  continue;
2353  }
2354  else {
2355  continue;
2356  }
2357  else {
2358  continue;
2359  }
2360  else {
2361  continue;
2362  }
2363  else {
2364  continue;
2365  }
2366  else if (p[pixel[13]] < c_b)
2367  if (p[pixel[11]] > cb)
2368  if (p[pixel[5]] > cb)
2369  if (p[pixel[6]] > cb)
2370  if (p[pixel[7]] > cb)
2371  if (p[pixel[8]] > cb)
2372  if (p[pixel[9]] > cb)
2373  if (p[pixel[10]] > cb)
2374  if (p[pixel[12]] > cb)
2375  {}
2376  else {
2377  continue;
2378  }
2379  else {
2380  continue;
2381  }
2382  else {
2383  continue;
2384  }
2385  else {
2386  continue;
2387  }
2388  else {
2389  continue;
2390  }
2391  else {
2392  continue;
2393  }
2394  else {
2395  continue;
2396  }
2397  else if (p[pixel[11]] < c_b)
2398  if (p[pixel[12]] < c_b)
2399  if (p[pixel[14]] < c_b)
2400  if (p[pixel[15]] < c_b)
2401  {}
2402  else if (p[pixel[6]] < c_b)
2403  if (p[pixel[7]] < c_b)
2404  if (p[pixel[8]] < c_b)
2405  if (p[pixel[9]] < c_b)
2406  if (p[pixel[10]] < c_b)
2407  {}
2408  else {
2409  continue;
2410  }
2411  else {
2412  continue;
2413  }
2414  else {
2415  continue;
2416  }
2417  else {
2418  continue;
2419  }
2420  else {
2421  continue;
2422  }
2423  else if (p[pixel[5]] < c_b)
2424  if (p[pixel[6]] < c_b)
2425  if (p[pixel[7]] < c_b)
2426  if (p[pixel[8]] < c_b)
2427  if (p[pixel[9]] < c_b)
2428  if (p[pixel[10]] < c_b)
2429  {}
2430  else {
2431  continue;
2432  }
2433  else {
2434  continue;
2435  }
2436  else {
2437  continue;
2438  }
2439  else {
2440  continue;
2441  }
2442  else {
2443  continue;
2444  }
2445  else {
2446  continue;
2447  }
2448  else {
2449  continue;
2450  }
2451  else {
2452  continue;
2453  }
2454  else if (p[pixel[5]] > cb)
2455  if (p[pixel[6]] > cb)
2456  if (p[pixel[7]] > cb)
2457  if (p[pixel[8]] > cb)
2458  if (p[pixel[9]] > cb)
2459  if (p[pixel[10]] > cb)
2460  if (p[pixel[11]] > cb)
2461  if (p[pixel[12]] > cb)
2462  {}
2463  else {
2464  continue;
2465  }
2466  else {
2467  continue;
2468  }
2469  else {
2470  continue;
2471  }
2472  else {
2473  continue;
2474  }
2475  else {
2476  continue;
2477  }
2478  else {
2479  continue;
2480  }
2481  else {
2482  continue;
2483  }
2484  else {
2485  continue;
2486  }
2487  else if (p[pixel[4]] < c_b)
2488  if (p[pixel[5]] > cb)
2489  if (p[pixel[14]] > cb)
2490  if (p[pixel[7]] > cb)
2491  if (p[pixel[8]] > cb)
2492  if (p[pixel[9]] > cb)
2493  if (p[pixel[10]] > cb)
2494  if (p[pixel[11]] > cb)
2495  if (p[pixel[12]] > cb)
2496  if (p[pixel[13]] > cb)
2497  if (p[pixel[6]] > cb)
2498  {}
2499  else if (p[pixel[15]] > cb)
2500  {}
2501  else {
2502  continue;
2503  }
2504  else {
2505  continue;
2506  }
2507  else {
2508  continue;
2509  }
2510  else {
2511  continue;
2512  }
2513  else {
2514  continue;
2515  }
2516  else {
2517  continue;
2518  }
2519  else {
2520  continue;
2521  }
2522  else {
2523  continue;
2524  }
2525  else if (p[pixel[14]] < c_b)
2526  if (p[pixel[12]] > cb)
2527  if (p[pixel[6]] > cb)
2528  if (p[pixel[7]] > cb)
2529  if (p[pixel[8]] > cb)
2530  if (p[pixel[9]] > cb)
2531  if (p[pixel[10]] > cb)
2532  if (p[pixel[11]] > cb)
2533  if (p[pixel[13]] > cb)
2534  {}
2535  else {
2536  continue;
2537  }
2538  else {
2539  continue;
2540  }
2541  else {
2542  continue;
2543  }
2544  else {
2545  continue;
2546  }
2547  else {
2548  continue;
2549  }
2550  else {
2551  continue;
2552  }
2553  else {
2554  continue;
2555  }
2556  else if (p[pixel[12]] < c_b)
2557  if (p[pixel[13]] < c_b)
2558  if (p[pixel[15]] < c_b)
2559  {}
2560  else if (p[pixel[6]] < c_b)
2561  if (p[pixel[7]] < c_b)
2562  if (p[pixel[8]] < c_b)
2563  if (p[pixel[9]] < c_b)
2564  if (p[pixel[10]] < c_b)
2565  if (p[pixel[11]] < c_b)
2566  {}
2567  else {
2568  continue;
2569  }
2570  else {
2571  continue;
2572  }
2573  else {
2574  continue;
2575  }
2576  else {
2577  continue;
2578  }
2579  else {
2580  continue;
2581  }
2582  else {
2583  continue;
2584  }
2585  else {
2586  continue;
2587  }
2588  else {
2589  continue;
2590  }
2591  else if (p[pixel[6]] > cb)
2592  if (p[pixel[7]] > cb)
2593  if (p[pixel[8]] > cb)
2594  if (p[pixel[9]] > cb)
2595  if (p[pixel[10]] > cb)
2596  if (p[pixel[11]] > cb)
2597  if (p[pixel[12]] > cb)
2598  if (p[pixel[13]] > cb)
2599  {}
2600  else {
2601  continue;
2602  }
2603  else {
2604  continue;
2605  }
2606  else {
2607  continue;
2608  }
2609  else {
2610  continue;
2611  }
2612  else {
2613  continue;
2614  }
2615  else {
2616  continue;
2617  }
2618  else {
2619  continue;
2620  }
2621  else {
2622  continue;
2623  }
2624  else if (p[pixel[5]] < c_b)
2625  if (p[pixel[6]] > cb)
2626  if (p[pixel[15]] < c_b)
2627  if (p[pixel[13]] > cb)
2628  if (p[pixel[7]] > cb)
2629  if (p[pixel[8]] > cb)
2630  if (p[pixel[9]] > cb)
2631  if (p[pixel[10]] > cb)
2632  if (p[pixel[11]] > cb)
2633  if (p[pixel[12]] > cb)
2634  if (p[pixel[14]] > cb)
2635  {}
2636  else {
2637  continue;
2638  }
2639  else {
2640  continue;
2641  }
2642  else {
2643  continue;
2644  }
2645  else {
2646  continue;
2647  }
2648  else {
2649  continue;
2650  }
2651  else {
2652  continue;
2653  }
2654  else {
2655  continue;
2656  }
2657  else if (p[pixel[13]] < c_b)
2658  if (p[pixel[14]] < c_b)
2659  {}
2660  else {
2661  continue;
2662  }
2663  else {
2664  continue;
2665  }
2666  else if (p[pixel[7]] > cb)
2667  if (p[pixel[8]] > cb)
2668  if (p[pixel[9]] > cb)
2669  if (p[pixel[10]] > cb)
2670  if (p[pixel[11]] > cb)
2671  if (p[pixel[12]] > cb)
2672  if (p[pixel[13]] > cb)
2673  if (p[pixel[14]] > cb)
2674  {}
2675  else {
2676  continue;
2677  }
2678  else {
2679  continue;
2680  }
2681  else {
2682  continue;
2683  }
2684  else {
2685  continue;
2686  }
2687  else {
2688  continue;
2689  }
2690  else {
2691  continue;
2692  }
2693  else {
2694  continue;
2695  }
2696  else {
2697  continue;
2698  }
2699  else if (p[pixel[6]] < c_b)
2700  if (p[pixel[7]] > cb)
2701  if (p[pixel[14]] > cb)
2702  if (p[pixel[8]] > cb)
2703  if (p[pixel[9]] > cb)
2704  if (p[pixel[10]] > cb)
2705  if (p[pixel[11]] > cb)
2706  if (p[pixel[12]] > cb)
2707  if (p[pixel[13]] > cb)
2708  if (p[pixel[15]] > cb)
2709  {}
2710  else {
2711  continue;
2712  }
2713  else {
2714  continue;
2715  }
2716  else {
2717  continue;
2718  }
2719  else {
2720  continue;
2721  }
2722  else {
2723  continue;
2724  }
2725  else {
2726  continue;
2727  }
2728  else {
2729  continue;
2730  }
2731  else if (p[pixel[14]] < c_b)
2732  if (p[pixel[15]] < c_b)
2733  {}
2734  else {
2735  continue;
2736  }
2737  else {
2738  continue;
2739  }
2740  else if (p[pixel[7]] < c_b)
2741  if (p[pixel[8]] < c_b)
2742  {}
2743  else if (p[pixel[15]] < c_b)
2744  {}
2745  else {
2746  continue;
2747  }
2748  else if (p[pixel[14]] < c_b)
2749  if (p[pixel[15]] < c_b)
2750  {}
2751  else {
2752  continue;
2753  }
2754  else {
2755  continue;
2756  }
2757  else if (p[pixel[13]] > cb)
2758  if (p[pixel[7]] > cb)
2759  if (p[pixel[8]] > cb)
2760  if (p[pixel[9]] > cb)
2761  if (p[pixel[10]] > cb)
2762  if (p[pixel[11]] > cb)
2763  if (p[pixel[12]] > cb)
2764  if (p[pixel[14]] > cb)
2765  if (p[pixel[15]] > cb)
2766  {}
2767  else {
2768  continue;
2769  }
2770  else {
2771  continue;
2772  }
2773  else {
2774  continue;
2775  }
2776  else {
2777  continue;
2778  }
2779  else {
2780  continue;
2781  }
2782  else {
2783  continue;
2784  }
2785  else {
2786  continue;
2787  }
2788  else {
2789  continue;
2790  }
2791  else if (p[pixel[13]] < c_b)
2792  if (p[pixel[14]] < c_b)
2793  if (p[pixel[15]] < c_b)
2794  {}
2795  else {
2796  continue;
2797  }
2798  else {
2799  continue;
2800  }
2801  else {
2802  continue;
2803  }
2804  else if (p[pixel[12]] > cb)
2805  if (p[pixel[7]] > cb)
2806  if (p[pixel[8]] > cb)
2807  if (p[pixel[9]] > cb)
2808  if (p[pixel[10]] > cb)
2809  if (p[pixel[11]] > cb)
2810  if (p[pixel[13]] > cb)
2811  if (p[pixel[14]] > cb)
2812  if (p[pixel[6]] > cb)
2813  {}
2814  else if (p[pixel[15]] > cb)
2815  {}
2816  else {
2817  continue;
2818  }
2819  else {
2820  continue;
2821  }
2822  else {
2823  continue;
2824  }
2825  else {
2826  continue;
2827  }
2828  else {
2829  continue;
2830  }
2831  else {
2832  continue;
2833  }
2834  else {
2835  continue;
2836  }
2837  else {
2838  continue;
2839  }
2840  else if (p[pixel[12]] < c_b)
2841  if (p[pixel[13]] < c_b)
2842  if (p[pixel[14]] < c_b)
2843  if (p[pixel[15]] < c_b)
2844  {}
2845  else if (p[pixel[6]] < c_b)
2846  if (p[pixel[7]] < c_b)
2847  if (p[pixel[8]] < c_b)
2848  if (p[pixel[9]] < c_b)
2849  if (p[pixel[10]] < c_b)
2850  if (p[pixel[11]] < c_b)
2851  {}
2852  else {
2853  continue;
2854  }
2855  else {
2856  continue;
2857  }
2858  else {
2859  continue;
2860  }
2861  else {
2862  continue;
2863  }
2864  else {
2865  continue;
2866  }
2867  else {
2868  continue;
2869  }
2870  else {
2871  continue;
2872  }
2873  else {
2874  continue;
2875  }
2876  else {
2877  continue;
2878  }
2879  else if (p[pixel[11]] > cb)
2880  if (p[pixel[7]] > cb)
2881  if (p[pixel[8]] > cb)
2882  if (p[pixel[9]] > cb)
2883  if (p[pixel[10]] > cb)
2884  if (p[pixel[12]] > cb)
2885  if (p[pixel[13]] > cb)
2886  if (p[pixel[6]] > cb)
2887  if (p[pixel[5]] > cb)
2888  {}
2889  else if (p[pixel[14]] > cb)
2890  {}
2891  else {
2892  continue;
2893  }
2894  else if (p[pixel[14]] > cb)
2895  if (p[pixel[15]] > cb)
2896  {}
2897  else {
2898  continue;
2899  }
2900  else {
2901  continue;
2902  }
2903  else {
2904  continue;
2905  }
2906  else {
2907  continue;
2908  }
2909  else {
2910  continue;
2911  }
2912  else {
2913  continue;
2914  }
2915  else {
2916  continue;
2917  }
2918  else {
2919  continue;
2920  }
2921  else if (p[pixel[11]] < c_b)
2922  if (p[pixel[12]] < c_b)
2923  if (p[pixel[13]] < c_b)
2924  if (p[pixel[14]] < c_b)
2925  if (p[pixel[15]] < c_b)
2926  {}
2927  else if (p[pixel[6]] < c_b)
2928  if (p[pixel[7]] < c_b)
2929  if (p[pixel[8]] < c_b)
2930  if (p[pixel[9]] < c_b)
2931  if (p[pixel[10]] < c_b)
2932  {}
2933  else {
2934  continue;
2935  }
2936  else {
2937  continue;
2938  }
2939  else {
2940  continue;
2941  }
2942  else {
2943  continue;
2944  }
2945  else {
2946  continue;
2947  }
2948  else if (p[pixel[5]] < c_b)
2949  if (p[pixel[6]] < c_b)
2950  if (p[pixel[7]] < c_b)
2951  if (p[pixel[8]] < c_b)
2952  if (p[pixel[9]] < c_b)
2953  if (p[pixel[10]] < c_b)
2954  {}
2955  else {
2956  continue;
2957  }
2958  else {
2959  continue;
2960  }
2961  else {
2962  continue;
2963  }
2964  else {
2965  continue;
2966  }
2967  else {
2968  continue;
2969  }
2970  else {
2971  continue;
2972  }
2973  else {
2974  continue;
2975  }
2976  else {
2977  continue;
2978  }
2979  else {
2980  continue;
2981  }
2982  else if (p[pixel[10]] > cb)
2983  if (p[pixel[7]] > cb)
2984  if (p[pixel[8]] > cb)
2985  if (p[pixel[9]] > cb)
2986  if (p[pixel[11]] > cb)
2987  if (p[pixel[12]] > cb)
2988  if (p[pixel[6]] > cb)
2989  if (p[pixel[5]] > cb)
2990  if (p[pixel[4]] > cb)
2991  {}
2992  else if (p[pixel[13]] > cb)
2993  {}
2994  else {
2995  continue;
2996  }
2997  else if (p[pixel[13]] > cb)
2998  if (p[pixel[14]] > cb)
2999  {}
3000  else {
3001  continue;
3002  }
3003  else {
3004  continue;
3005  }
3006  else if (p[pixel[13]] > cb)
3007  if (p[pixel[14]] > cb)
3008  if (p[pixel[15]] > cb)
3009  {}
3010  else {
3011  continue;
3012  }
3013  else {
3014  continue;
3015  }
3016  else {
3017  continue;
3018  }
3019  else {
3020  continue;
3021  }
3022  else {
3023  continue;
3024  }
3025  else {
3026  continue;
3027  }
3028  else {
3029  continue;
3030  }
3031  else {
3032  continue;
3033  }
3034  else if (p[pixel[10]] < c_b)
3035  if (p[pixel[11]] < c_b)
3036  if (p[pixel[12]] < c_b)
3037  if (p[pixel[13]] < c_b)
3038  if (p[pixel[14]] < c_b)
3039  if (p[pixel[15]] < c_b)
3040  {}
3041  else if (p[pixel[6]] < c_b)
3042  if (p[pixel[7]] < c_b)
3043  if (p[pixel[8]] < c_b)
3044  if (p[pixel[9]] < c_b)
3045  {}
3046  else {
3047  continue;
3048  }
3049  else {
3050  continue;
3051  }
3052  else {
3053  continue;
3054  }
3055  else {
3056  continue;
3057  }
3058  else if (p[pixel[5]] < c_b)
3059  if (p[pixel[6]] < c_b)
3060  if (p[pixel[7]] < c_b)
3061  if (p[pixel[8]] < c_b)
3062  if (p[pixel[9]] < c_b)
3063  {}
3064  else {
3065  continue;
3066  }
3067  else {
3068  continue;
3069  }
3070  else {
3071  continue;
3072  }
3073  else {
3074  continue;
3075  }
3076  else {
3077  continue;
3078  }
3079  else if (p[pixel[4]] < c_b)
3080  if (p[pixel[5]] < c_b)
3081  if (p[pixel[6]] < c_b)
3082  if (p[pixel[7]] < c_b)
3083  if (p[pixel[8]] < c_b)
3084  if (p[pixel[9]] < c_b)
3085  {}
3086  else {
3087  continue;
3088  }
3089  else {
3090  continue;
3091  }
3092  else {
3093  continue;
3094  }
3095  else {
3096  continue;
3097  }
3098  else {
3099  continue;
3100  }
3101  else {
3102  continue;
3103  }
3104  else {
3105  continue;
3106  }
3107  else {
3108  continue;
3109  }
3110  else {
3111  continue;
3112  }
3113  else if (p[pixel[9]] > cb)
3114  if (p[pixel[7]] > cb)
3115  if (p[pixel[8]] > cb)
3116  if (p[pixel[10]] > cb)
3117  if (p[pixel[11]] > cb)
3118  if (p[pixel[6]] > cb)
3119  if (p[pixel[5]] > cb)
3120  if (p[pixel[4]] > cb)
3121  if (p[pixel[3]] > cb)
3122  {}
3123  else if (p[pixel[12]] > cb)
3124  {}
3125  else {
3126  continue;
3127  }
3128  else if (p[pixel[12]] > cb)
3129  if (p[pixel[13]] > cb)
3130  {}
3131  else {
3132  continue;
3133  }
3134  else {
3135  continue;
3136  }
3137  else if (p[pixel[12]] > cb)
3138  if (p[pixel[13]] > cb)
3139  if (p[pixel[14]] > cb)
3140  {}
3141  else {
3142  continue;
3143  }
3144  else {
3145  continue;
3146  }
3147  else {
3148  continue;
3149  }
3150  else if (p[pixel[12]] > cb)
3151  if (p[pixel[13]] > cb)
3152  if (p[pixel[14]] > cb)
3153  if (p[pixel[15]] > cb)
3154  {}
3155  else {
3156  continue;
3157  }
3158  else {
3159  continue;
3160  }
3161  else {
3162  continue;
3163  }
3164  else {
3165  continue;
3166  }
3167  else {
3168  continue;
3169  }
3170  else {
3171  continue;
3172  }
3173  else {
3174  continue;
3175  }
3176  else {
3177  continue;
3178  }
3179  else if (p[pixel[9]] < c_b)
3180  if (p[pixel[10]] < c_b)
3181  if (p[pixel[11]] < c_b)
3182  if (p[pixel[12]] < c_b)
3183  if (p[pixel[13]] < c_b)
3184  if (p[pixel[14]] < c_b)
3185  if (p[pixel[15]] < c_b)
3186  {}
3187  else if (p[pixel[6]] < c_b)
3188  if (p[pixel[7]] < c_b)
3189  if (p[pixel[8]] < c_b)
3190  {}
3191  else {
3192  continue;
3193  }
3194  else {
3195  continue;
3196  }
3197  else {
3198  continue;
3199  }
3200  else if (p[pixel[5]] < c_b)
3201  if (p[pixel[6]] < c_b)
3202  if (p[pixel[7]] < c_b)
3203  if (p[pixel[8]] < c_b)
3204  {}
3205  else {
3206  continue;
3207  }
3208  else {
3209  continue;
3210  }
3211  else {
3212  continue;
3213  }
3214  else {
3215  continue;
3216  }
3217  else if (p[pixel[4]] < c_b)
3218  if (p[pixel[5]] < c_b)
3219  if (p[pixel[6]] < c_b)
3220  if (p[pixel[7]] < c_b)
3221  if (p[pixel[8]] < c_b)
3222  {}
3223  else {
3224  continue;
3225  }
3226  else {
3227  continue;
3228  }
3229  else {
3230  continue;
3231  }
3232  else {
3233  continue;
3234  }
3235  else {
3236  continue;
3237  }
3238  else if (p[pixel[3]] < c_b)
3239  if (p[pixel[4]] < c_b)
3240  if (p[pixel[5]] < c_b)
3241  if (p[pixel[6]] < c_b)
3242  if (p[pixel[7]] < c_b)
3243  if (p[pixel[8]] < c_b)
3244  {}
3245  else {
3246  continue;
3247  }
3248  else {
3249  continue;
3250  }
3251  else {
3252  continue;
3253  }
3254  else {
3255  continue;
3256  }
3257  else {
3258  continue;
3259  }
3260  else {
3261  continue;
3262  }
3263  else {
3264  continue;
3265  }
3266  else {
3267  continue;
3268  }
3269  else {
3270  continue;
3271  }
3272  else if (p[pixel[8]] > cb)
3273  if (p[pixel[7]] > cb)
3274  if (p[pixel[9]] > cb)
3275  if (p[pixel[10]] > cb)
3276  if (p[pixel[6]] > cb)
3277  if (p[pixel[5]] > cb)
3278  if (p[pixel[4]] > cb)
3279  if (p[pixel[3]] > cb)
3280  if (p[pixel[2]] > cb)
3281  {}
3282  else if (p[pixel[11]] > cb)
3283  {}
3284  else {
3285  continue;
3286  }
3287  else if (p[pixel[11]] > cb)
3288  if (p[pixel[12]] > cb)
3289  {}
3290  else {
3291  continue;
3292  }
3293  else {
3294  continue;
3295  }
3296  else if (p[pixel[11]] > cb)
3297  if (p[pixel[12]] > cb)
3298  if (p[pixel[13]] > cb)
3299  {}
3300  else {
3301  continue;
3302  }
3303  else {
3304  continue;
3305  }
3306  else {
3307  continue;
3308  }
3309  else if (p[pixel[11]] > cb)
3310  if (p[pixel[12]] > cb)
3311  if (p[pixel[13]] > cb)
3312  if (p[pixel[14]] > cb)
3313  {}
3314  else {
3315  continue;
3316  }
3317  else {
3318  continue;
3319  }
3320  else {
3321  continue;
3322  }
3323  else {
3324  continue;
3325  }
3326  else if (p[pixel[11]] > cb)
3327  if (p[pixel[12]] > cb)
3328  if (p[pixel[13]] > cb)
3329  if (p[pixel[14]] > cb)
3330  if (p[pixel[15]] > cb)
3331  {}
3332  else {
3333  continue;
3334  }
3335  else {
3336  continue;
3337  }
3338  else {
3339  continue;
3340  }
3341  else {
3342  continue;
3343  }
3344  else {
3345  continue;
3346  }
3347  else {
3348  continue;
3349  }
3350  else {
3351  continue;
3352  }
3353  else {
3354  continue;
3355  }
3356  else if (p[pixel[8]] < c_b)
3357  if (p[pixel[9]] < c_b)
3358  if (p[pixel[10]] < c_b)
3359  if (p[pixel[11]] < c_b)
3360  if (p[pixel[12]] < c_b)
3361  if (p[pixel[13]] < c_b)
3362  if (p[pixel[14]] < c_b)
3363  if (p[pixel[15]] < c_b)
3364  {}
3365  else if (p[pixel[6]] < c_b)
3366  if (p[pixel[7]] < c_b)
3367  {}
3368  else {
3369  continue;
3370  }
3371  else {
3372  continue;
3373  }
3374  else if (p[pixel[5]] < c_b)
3375  if (p[pixel[6]] < c_b)
3376  if (p[pixel[7]] < c_b)
3377  {}
3378  else {
3379  continue;
3380  }
3381  else {
3382  continue;
3383  }
3384  else {
3385  continue;
3386  }
3387  else if (p[pixel[4]] < c_b)
3388  if (p[pixel[5]] < c_b)
3389  if (p[pixel[6]] < c_b)
3390  if (p[pixel[7]] < c_b)
3391  {}
3392  else {
3393  continue;
3394  }
3395  else {
3396  continue;
3397  }
3398  else {
3399  continue;
3400  }
3401  else {
3402  continue;
3403  }
3404  else if (p[pixel[3]] < c_b)
3405  if (p[pixel[4]] < c_b)
3406  if (p[pixel[5]] < c_b)
3407  if (p[pixel[6]] < c_b)
3408  if (p[pixel[7]] < c_b)
3409  {}
3410  else {
3411  continue;
3412  }
3413  else {
3414  continue;
3415  }
3416  else {
3417  continue;
3418  }
3419  else {
3420  continue;
3421  }
3422  else {
3423  continue;
3424  }
3425  else if (p[pixel[2]] < c_b)
3426  if (p[pixel[3]] < c_b)
3427  if (p[pixel[4]] < c_b)
3428  if (p[pixel[5]] < c_b)
3429  if (p[pixel[6]] < c_b)
3430  if (p[pixel[7]] < c_b)
3431  {}
3432  else {
3433  continue;
3434  }
3435  else {
3436  continue;
3437  }
3438  else {
3439  continue;
3440  }
3441  else {
3442  continue;
3443  }
3444  else {
3445  continue;
3446  }
3447  else {
3448  continue;
3449  }
3450  else {
3451  continue;
3452  }
3453  else {
3454  continue;
3455  }
3456  else {
3457  continue;
3458  }
3459  else if (p[pixel[7]] > cb)
3460  if (p[pixel[8]] > cb)
3461  if (p[pixel[9]] > cb)
3462  if (p[pixel[6]] > cb)
3463  if (p[pixel[5]] > cb)
3464  if (p[pixel[4]] > cb)
3465  if (p[pixel[3]] > cb)
3466  if (p[pixel[2]] > cb)
3467  if (p[pixel[1]] > cb)
3468  {}
3469  else if (p[pixel[10]] > cb)
3470  {}
3471  else {
3472  continue;
3473  }
3474  else if (p[pixel[10]] > cb)
3475  if (p[pixel[11]] > cb)
3476  {}
3477  else {
3478  continue;
3479  }
3480  else {
3481  continue;
3482  }
3483  else if (p[pixel[10]] > cb)
3484  if (p[pixel[11]] > cb)
3485  if (p[pixel[12]] > cb)
3486  {}
3487  else {
3488  continue;
3489  }
3490  else {
3491  continue;
3492  }
3493  else {
3494  continue;
3495  }
3496  else if (p[pixel[10]] > cb)
3497  if (p[pixel[11]] > cb)
3498  if (p[pixel[12]] > cb)
3499  if (p[pixel[13]] > cb)
3500  {}
3501  else {
3502  continue;
3503  }
3504  else {
3505  continue;
3506  }
3507  else {
3508  continue;
3509  }
3510  else {
3511  continue;
3512  }
3513  else if (p[pixel[10]] > cb)
3514  if (p[pixel[11]] > cb)
3515  if (p[pixel[12]] > cb)
3516  if (p[pixel[13]] > cb)
3517  if (p[pixel[14]] > cb)
3518  {}
3519  else {
3520  continue;
3521  }
3522  else {
3523  continue;
3524  }
3525  else {
3526  continue;
3527  }
3528  else {
3529  continue;
3530  }
3531  else {
3532  continue;
3533  }
3534  else if (p[pixel[10]] > cb)
3535  if (p[pixel[11]] > cb)
3536  if (p[pixel[12]] > cb)
3537  if (p[pixel[13]] > cb)
3538  if (p[pixel[14]] > cb)
3539  if (p[pixel[15]] > cb)
3540  {}
3541  else {
3542  continue;
3543  }
3544  else {
3545  continue;
3546  }
3547  else {
3548  continue;
3549  }
3550  else {
3551  continue;
3552  }
3553  else {
3554  continue;
3555  }
3556  else {
3557  continue;
3558  }
3559  else {
3560  continue;
3561  }
3562  else {
3563  continue;
3564  }
3565  else if (p[pixel[7]] < c_b)
3566  if (p[pixel[8]] < c_b)
3567  if (p[pixel[9]] < c_b)
3568  if (p[pixel[6]] < c_b)
3569  if (p[pixel[5]] < c_b)
3570  if (p[pixel[4]] < c_b)
3571  if (p[pixel[3]] < c_b)
3572  if (p[pixel[2]] < c_b)
3573  if (p[pixel[1]] < c_b)
3574  {}
3575  else if (p[pixel[10]] < c_b)
3576  {}
3577  else {
3578  continue;
3579  }
3580  else if (p[pixel[10]] < c_b)
3581  if (p[pixel[11]] < c_b)
3582  {}
3583  else {
3584  continue;
3585  }
3586  else {
3587  continue;
3588  }
3589  else if (p[pixel[10]] < c_b)
3590  if (p[pixel[11]] < c_b)
3591  if (p[pixel[12]] < c_b)
3592  {}
3593  else {
3594  continue;
3595  }
3596  else {
3597  continue;
3598  }
3599  else {
3600  continue;
3601  }
3602  else if (p[pixel[10]] < c_b)
3603  if (p[pixel[11]] < c_b)
3604  if (p[pixel[12]] < c_b)
3605  if (p[pixel[13]] < c_b)
3606  {}
3607  else {
3608  continue;
3609  }
3610  else {
3611  continue;
3612  }
3613  else {
3614  continue;
3615  }
3616  else {
3617  continue;
3618  }
3619  else if (p[pixel[10]] < c_b)
3620  if (p[pixel[11]] < c_b)
3621  if (p[pixel[12]] < c_b)
3622  if (p[pixel[13]] < c_b)
3623  if (p[pixel[14]] < c_b)
3624  {}
3625  else {
3626  continue;
3627  }
3628  else {
3629  continue;
3630  }
3631  else {
3632  continue;
3633  }
3634  else {
3635  continue;
3636  }
3637  else {
3638  continue;
3639  }
3640  else if (p[pixel[10]] < c_b)
3641  if (p[pixel[11]] < c_b)
3642  if (p[pixel[12]] < c_b)
3643  if (p[pixel[13]] < c_b)
3644  if (p[pixel[14]] < c_b)
3645  if (p[pixel[15]] < c_b)
3646  {}
3647  else {
3648  continue;
3649  }
3650  else {
3651  continue;
3652  }
3653  else {
3654  continue;
3655  }
3656  else {
3657  continue;
3658  }
3659  else {
3660  continue;
3661  }
3662  else {
3663  continue;
3664  }
3665  else {
3666  continue;
3667  }
3668  else {
3669  continue;
3670  }
3671  else {
3672  continue;
3673  }
3674 
3675  // When we have more corner than allocted space reallocate
3676  if (corner_cnt >= *ret_corners_length) {
3677  *ret_corners_length *= 2;
3678  *ret_corners = realloc(*ret_corners, sizeof(struct point_t) * (*ret_corners_length));
3679  }
3680 
3681  (*ret_corners)[corner_cnt].x = x;
3682  (*ret_corners)[corner_cnt].y = y;
3683  corner_cnt++;
3684 
3685  // Skip some in the width direction
3686  x += min_dist;
3687  }
3688  }
3689  *num_corners = corner_cnt;
3690 }
3691 
3697 static void fast_make_offsets(int32_t *pixel, uint16_t row_stride, uint8_t pixel_size)
3698 {
3699  pixel[0] = 0 * pixel_size + row_stride * 3 * pixel_size;
3700  pixel[1] = 1 * pixel_size + row_stride * 3 * pixel_size;
3701  pixel[2] = 2 * pixel_size + row_stride * 2 * pixel_size;
3702  pixel[3] = 3 * pixel_size + row_stride * 1 * pixel_size;
3703  pixel[4] = 3 * pixel_size + row_stride * 0 * pixel_size;
3704  pixel[5] = 3 * pixel_size + row_stride * -1 * pixel_size;
3705  pixel[6] = 2 * pixel_size + row_stride * -2 * pixel_size;
3706  pixel[7] = 1 * pixel_size + row_stride * -3 * pixel_size;
3707  pixel[8] = 0 * pixel_size + row_stride * -3 * pixel_size;
3708  pixel[9] = -1 * pixel_size + row_stride * -3 * pixel_size;
3709  pixel[10] = -2 * pixel_size + row_stride * -2 * pixel_size;
3710  pixel[11] = -3 * pixel_size + row_stride * -1 * pixel_size;
3711  pixel[12] = -3 * pixel_size + row_stride * 0 * pixel_size;
3712  pixel[13] = -3 * pixel_size + row_stride * 1 * pixel_size;
3713  pixel[14] = -2 * pixel_size + row_stride * 2 * pixel_size;
3714  pixel[15] = -1 * pixel_size + row_stride * 3 * pixel_size;
3715 }
3716 
unsigned short uint16_t
Definition: types.h:16
Definition: image.h:43
uint16_t w
Image width.
Definition: image.h:45
uint16_t h
Image height.
Definition: image.h:46
signed short int16_t
Definition: types.h:17
void * buf
Image buffer (depending on the image_type)
Definition: image.h:53
Definition: image.h:57
signed long int32_t
Definition: types.h:19
unsigned char uint8_t
Definition: types.h:14
static void fast_make_offsets(int32_t *pixel, uint16_t row_stride, uint8_t pixel_size)
Make offsets for FAST9 calculation.
Definition: fast_rosten.c:3697
UYVY format (uint16 per pixel)
Definition: image.h:36
static float p[2][2]
void fast9_detect(struct image_t *img, uint8_t threshold, uint16_t min_dist, uint16_t x_padding, uint16_t y_padding, uint16_t *num_corners, uint16_t *ret_corners_length, struct point_t **ret_corners, uint16_t *roi)
Do a FAST9 corner detection.
Definition: fast_rosten.c:52
enum image_type type
The image type.
Definition: image.h:44