/// <summary> /// returns true if the points given are on a line /// </summary> /// <param name="img_mono">mono image data (1 byte per pixel)</param> /// <param name="img_width">width of the image</param> /// <param name="img_height">height of the image</param> /// <param name="p1">first corner</param> /// <param name="p2">second corner</param> /// <returns>true if this is a line</returns> public static bool isLine(byte[] img_mono, int img_width, int img_height, FASTcorner p1, FASTcorner p2, int line_threshold, ref int response) { bool line = true; int diff_x = 0, diff_y = 0, sample_number = 0; const int max_samples = 100; const int radius = 10; int dx = p2.x - p1.x; int dy = p2.y - p1.y; while ((sample_number < max_samples) && (line)) { line = false; int x = p1.x + (dx * sample_number / max_samples); int y = p1.y + (dy * sample_number / max_samples); if ((x > radius) && (x < img_width - radius) && (y > radius) && (y < img_height - radius)) { int n = (y * img_width) + x; int r = radius; diff_x = (img_mono[n - r] + img_mono[n - r]) - (img_mono[n + r] + img_mono[n + r]); if (diff_x < 0) { diff_x = -diff_x; } if (diff_x < line_threshold) { r = radius * img_width; diff_y = (img_mono[n - r] + img_mono[n - r]) - (img_mono[n + r] + img_mono[n + r]); if (diff_y < 0) { diff_y = -diff_y; } } if ((diff_x > line_threshold) || (diff_y > line_threshold)) { line = true; response += diff_x + diff_y; } } else { line = true; } sample_number++; } return(line); }
/// <summary> /// returns true if the points given are on a line /// </summary> /// <param name="img_mono">mono image data (1 byte per pixel)</param> /// <param name="img_width">width of the image</param> /// <param name="img_height">height of the image</param> /// <param name="p1">first corner</param> /// <param name="p2">second corner</param> /// <returns>true if this is a line</returns> public static bool isLine(byte[] img_mono, int img_width, int img_height, FASTcorner p1, FASTcorner p2, int line_threshold, ref int response) { bool line = true; int diff_x = 0, diff_y = 0, sample_number = 0; const int max_samples = 100; const int radius = 10; int dx = p2.x - p1.x; int dy = p2.y - p1.y; while ((sample_number < max_samples) && (line)) { line = false; int x = p1.x + (dx * sample_number / max_samples); int y = p1.y + (dy * sample_number / max_samples); if ((x > radius) && (x < img_width - radius) && (y > radius) && (y < img_height - radius)) { int n = (y * img_width) + x; int r = radius; diff_x = (img_mono[n - r] + img_mono[n - r]) - (img_mono[n + r] + img_mono[n + r]); if (diff_x < 0) diff_x = -diff_x; if (diff_x < line_threshold) { r = radius * img_width; diff_y = (img_mono[n - r] + img_mono[n - r]) - (img_mono[n + r] + img_mono[n + r]); if (diff_y < 0) diff_y = -diff_y; } if ((diff_x > line_threshold) || (diff_y > line_threshold)) { line = true; response += diff_x + diff_y; } } else line = true; sample_number++; } return (line); }
protected void UpdateCornerDisparities(FASTcorner[] corners, int search_radius_percent) { int[] disparity_histogram = new int[image_width]; int search_pixels = image_width * search_radius_percent / 100; for (int i = 0; i < corners.Length; i++) { int min_dist = search_pixels; min_dist *= min_dist; int disparity = 0; int max = 0; for (int d = disparity_histogram.Length-1; d >= 0; d--) disparity_histogram[d] = 0; for (int j = 0; j < features.Count; j++) { int dx = (int)(features[j].x - corners[i].x); int dy = (int)(features[j].y - corners[i].y); int dist = dx*dx + dy*dy; if (dist < min_dist) { int disp = (int)features[j].disparity; disparity_histogram[disp]++; if (disparity_histogram[disp] > max) { max = disparity_histogram[disp]; disparity = disp; } //min_dist = dist; } } if (max > 1) { corners[i].disparity = disparity; } else corners[i].disparity = -1; } features.Clear(); for (int i = 0; i < corners.Length; i++) { if (corners[i].disparity > 0) features.Add(new StereoFeature(corners[i].x, corners[i].y, corners[i].disparity)); } }
protected List<FASTline> DetectLines(FASTcorner[] corners, byte[] img, int image_width, int image_height) { List<FASTline> lines = new List<FASTline>(); int average_response = 0; int hits = 0; int min_line_length_pixels = image_width * minimum_line_length / 100; int min_line_length_pixels_sqr = min_line_length_pixels * min_line_length_pixels; for (int i = 0; i < corners.Length-1; i++) { for (int j = i + 1; j < corners.Length; j++) { int dx = corners[i].x - corners[j].x; int dy = corners[i].y - corners[j].y; int length_sqr = dx*dx + dy*dy; if (length_sqr > min_line_length_pixels_sqr) { // is this a line ? int response = 0; if (FASTline.isLine(img, image_width, image_height, corners[i], corners[j], line_detection_threshold, ref response)) { FASTline line = new FASTline(corners[i], corners[j], response); lines.Add(line); average_response += response; hits++; } } } } if (hits > 0) { average_response /= hits; int threshold = average_response * 150 / 100; for (int i = lines.Count-1; i >= 0; i--) { if (lines[i].response < threshold) lines.RemoveAt(i); } //Console.WriteLine("average: " + average_response.ToString()); } return(lines); }
/// <summary> /// perform non-maximal supression /// </summary> /// <param name="img">image - one byte per pixel</param> /// <param name="xsize">width of the image</param> /// <param name="ysize">height of the image</param> /// <param name="corners">returned corner features</param> /// <param name="barrier">detection threshold</param> /// <returns></returns> public static unsafe FASTcorner[] fast_nonmax(byte[] img, int xsize, int ysize, FASTcorner[] corners, int barrier, float calibration_offset_x, float calibration_offset_y) { bool found; fixed (byte* im = img) { int numcorners = corners.Length; // Create a list of integer pointer offstes, corresponding to the // direction offsets in dir[] int[] mpointer_dir = new int[16]; int[] row_start = new int[ysize]; int[] scores = new int[numcorners]; FASTcorner[] nonmax_corners = new FASTcorner[numcorners]; int num_nonmax = 0; int prev_row = -1; int i, j; int point_above = 0; int point_below = 0; fixed (int* pointer_dir = mpointer_dir) { pointer_dir[0] = 0 + 3 * xsize; pointer_dir[1] = 1 + 3 * xsize; pointer_dir[2] = 2 + 2 * xsize; pointer_dir[3] = 3 + 1 * xsize; pointer_dir[4] = 3 + 0 * xsize; pointer_dir[5] = 3 + -1 * xsize; pointer_dir[6] = 2 + -2 * xsize; pointer_dir[7] = 1 + -3 * xsize; pointer_dir[8] = 0 + -3 * xsize; pointer_dir[9] = -1 + -3 * xsize; pointer_dir[10] = -2 + -2 * xsize; pointer_dir[11] = -3 + -1 * xsize; pointer_dir[12] = -3 + 0 * xsize; pointer_dir[13] = -3 + 1 * xsize; pointer_dir[14] = -2 + 2 * xsize; pointer_dir[15] = -1 + 3 * xsize; if (numcorners < 5) return null; // xsize ysize numcorners corners // Compute the score for each detected corner, and find where each row begins // (the corners are output in raster scan order). A beginning of -1 signifies // that there are no corners on that row. for (i = 0; i < ysize; i++) row_start[i] = -1; for (i = 0; i < numcorners; i++) { if (corners[i].y != prev_row) { row_start[(int)corners[i].y] = i; prev_row = (int)corners[i].y; } scores[i] = corner_score(im + (int)corners[i].x + (int)corners[i].y * xsize, pointer_dir, barrier); } // Point above points (roughly) to the pixel above the one of interest, if there // is a feature there. int ctr; for (i = 1; i < numcorners - 1; i++) { int score = scores[i]; FASTcorner pos = corners[i]; // Check left if (corners[i - 1].x == pos.x - 1 && corners[i - 1].y == pos.y && scores[i - 1] > score) continue; // Check right if (corners[i + 1].x == pos.x + 1 && corners[i + 1].y == pos.y && scores[i - 1] > score) continue; // Check above if (pos.y > 0 && pos.y < ysize - 1 && row_start[pos.y - 1] > -1) { if (corners[point_above].y < pos.y - 1) point_above = row_start[pos.y - 1]; // Make point above point to the first of the pixels above the current point, // if it exists. ctr = 0; for (; corners[point_above].y < pos.y && corners[point_above].x < pos.x - 1; point_above++) { ctr++; if (ctr > 100) break; } for (j = point_above; corners[j].y < pos.y && corners[j].x <= pos.x + 1; j++) { int x = corners[j].x; if ((x == pos.x - 1 || x == pos.x || x == pos.x + 1) && scores[j] > score) { goto cont; } } } // Check below if (pos.y > 0 && pos.y < ysize - 2 && row_start[pos.y + 1] > -1) // Nothing below { if (corners[point_below].y < pos.y + 1) point_below = row_start[pos.y + 1]; // Make point below point to one of the pixels below the current point, if it // exists. ctr = 0; if (point_below < corners.Length) { for (; corners[point_below].y == pos.y + 1 && corners[point_below].x < pos.x - 1; point_below++) { ctr++; if (ctr > 100) break; if (point_below >= corners.Length - 1) break; } found = false; j = point_below; while ((!found) && (j < corners.Length)) { if (corners[j].y == pos.y + 1 && corners[j].x <= pos.x + 1) found = true; int x = corners[j].x; if ((x == pos.x - 1 || x == pos.x || x == pos.x + 1) && scores[j] > score) { goto cont; } if (j >= corners.Length) found = true; j++; } } } int xx = (int)(corners[i].x + calibration_offset_x); int yy = (int)(corners[i].y + calibration_offset_y); if ((xx > -1) && (xx < xsize) && (yy > -1) && (yy < ysize)) { nonmax_corners[num_nonmax] = new FASTcorner(xx, yy); nonmax_corners[num_nonmax].score = score; num_nonmax++; } cont: ; } Array.Resize(ref nonmax_corners, num_nonmax); return nonmax_corners; } } }
/// <summary> /// show the detected corner features in the given image /// </summary> /// <param name="corners">array containing detected corners</param> /// <param name="background">background image to be used</param> /// <param name="bmp">image to be returned</param> /// <param name="image_width">width of the image</param> /// <param name="image_height">height of the image</param> public static void Show(FASTcorner[] corners, byte[] background, byte[] bmp, int image_width, int image_height, int bytes_per_pixel) { // copy the background Buffer.BlockCopy(background,0,bmp,0,image_width * image_height * bytes_per_pixel); for (int i = 0; i < corners.Length; i++) { FASTcorner corner = corners[i]; int n = ((corner.y * image_width) + corner.x) * bytes_per_pixel; // update the image if (bytes_per_pixel < 3) { bmp[n] = (byte)255; } else { for (int col = 0; col < bytes_per_pixel; col++) { if (col != 1) bmp[n + col] = 0; else bmp[n + col] = (byte)255; } } } }
/// <summary> /// detect FAST corners // It is assumed that the image supplied is mono (one byte per pixel) /// Note that non-maximal supression should be carried out after running this function /// </summary> /// <param name="img">image - one byte per pixel</param> /// <param name="xsize"></param> /// <param name="ysize"></param> /// <param name="barrier">detection threshold</param> /// <returns>array of corner features</returns> public static unsafe FASTcorner[] fast_corner_detect_10(Byte[] img, int xsize, int ysize, int barrier) { int boundary = 3, y, cb, c_b; Byte* line_max; Byte* line_min; int rsize = 512, total = 0; FASTcorner[] ret = new FASTcorner[rsize]; Byte* cache_0; Byte* cache_1; Byte* cache_2; int[] mpixel = new int[16]; fixed (int* pixel = mpixel) { fixed (Byte* im = img) { pixel[0] = 0 + 3 * xsize; pixel[1] = 1 + 3 * xsize; pixel[2] = 2 + 2 * xsize; pixel[3] = 3 + 1 * xsize; pixel[4] = 3 + 0 * xsize; pixel[5] = 3 + -1 * xsize; pixel[6] = 2 + -2 * xsize; pixel[7] = 1 + -3 * xsize; pixel[8] = 0 + -3 * xsize; pixel[9] = -1 + -3 * xsize; pixel[10] = -2 + -2 * xsize; pixel[11] = -3 + -1 * xsize; pixel[12] = -3 + 0 * xsize; pixel[13] = -3 + 1 * xsize; pixel[14] = -2 + 2 * xsize; pixel[15] = -1 + 3 * xsize; for (y = boundary; y < ysize - boundary; y++) { cache_0 = im + boundary + y * xsize; line_min = cache_0 - boundary; line_max = im + xsize - boundary + y * xsize; cache_1 = cache_0 + pixel[9]; cache_2 = cache_0 + pixel[3]; int ctr = 0; for (; cache_0 < line_max; cache_0++, cache_1++, cache_2++) { ctr++; if (ctr > 1000) break; cb = *cache_0 + barrier; c_b = *cache_0 - barrier; if (*cache_1 > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_1 + 1) > cb) goto success; else if (*(cache_1 + 1) < c_b) continue; else if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[1]) < c_b) continue; else if (*(cache_0 + pixel[11]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[10]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_1 + 2) < c_b) continue; else if (*(cache_0 + pixel[14]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) continue; else if (*(cache_0 + -3) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*cache_2 < c_b) continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 2) > cb) goto success; else if (*(cache_1 + 2) < c_b) continue; else if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + pixel[11]) > cb) if (*cache_2 > cb) if (*(cache_1 + 2) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_1 + 1) > cb) if (*cache_2 > cb) goto success; else if (*cache_2 < c_b) continue; else if (*(cache_2 + -6) > cb) if (*(cache_0 + -3) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[1]) > cb) goto success; else continue; else if (*(cache_0 + pixel[1]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*cache_2 > cb) if (*(cache_1 + 1) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) continue; else if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_0 + pixel[10]) > cb) goto success; else if (*(cache_0 + pixel[10]) < c_b) continue; else if (*cache_2 > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) continue; else if (*(cache_0 + pixel[5]) > cb) if (*cache_2 > cb) if (*(cache_2 + -6) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[11]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else if (*(cache_0 + pixel[1]) < c_b) continue; else if (*(cache_0 + pixel[6]) < c_b) continue; else goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[0]) < c_b) continue; else if (*(cache_0 + pixel[6]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else if (*(cache_0 + pixel[1]) < c_b) continue; else if (*(cache_1 + 2) > cb) if (*(cache_1 + 1) > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[0]) < c_b) continue; else if (*(cache_0 + pixel[6]) > cb) if (*(cache_1 + 2) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[15]) < c_b) continue; else if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 1) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 1) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_2 + -6) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[1]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + -3) > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[1]) < c_b) continue; else if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + -3) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_2 + -6) > cb) goto success; else continue; else if (*(cache_1 + 2) < c_b) continue; else if (*(cache_0 + pixel[1]) > cb) if (*(cache_2 + -6) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[10]) > cb) if (*cache_2 > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + 3) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[10]) < c_b) if (*cache_2 < c_b) goto success; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[11]) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_2 + -6) > cb) if (*(cache_1 + 2) < c_b) if (*(cache_0 + 3) < c_b) goto success; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[15]) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*cache_2 < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + 3) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*cache_2 < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + 3) < c_b) if (*(cache_0 + -3) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + 3) > cb) if (*(cache_2 + -6) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + -3) > cb) goto success; else continue; else continue; else continue; else goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else if (*(cache_0 + pixel[1]) < c_b) continue; else if (*(cache_1 + 2) > cb) goto success; else continue; else continue; else if (*(cache_2 + -6) < c_b) continue; else if (*cache_2 > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[6]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[0]) < c_b) continue; else if (*(cache_0 + pixel[6]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_2 + -6) > cb) goto success; else if (*(cache_2 + -6) < c_b) continue; else if (*cache_2 > cb) if (*(cache_0 + 3) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) continue; else if (*(cache_0 + 3) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 2) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*cache_2 < c_b) continue; else if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + 3) > cb) if (*(cache_1 + 2) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*cache_2 < c_b) continue; else if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[10]) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) continue; else if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[0]) > cb || *(cache_0 + pixel[0]) < c_b) continue; else goto success; else continue; else continue; else if (*(cache_0 + pixel[5]) > cb) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_2 + -6) > cb) goto success; else if (*(cache_2 + -6) < c_b) continue; else if (*cache_2 > cb) if (*(cache_0 + 3) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + 3) > cb) if (*cache_2 > cb) goto success; else if (*cache_2 < c_b) continue; else if (*(cache_2 + -6) > cb) goto success; else continue; else continue; else if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) continue; else if (*cache_2 > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*cache_1 < c_b) if (*(cache_0 + pixel[1]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[15]) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[2]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[14]) > cb) if (*(cache_1 + 2) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + 3) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[14]) > cb) if (*cache_2 > cb) if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + 3) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[2]) > cb) if (*cache_2 > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[5]) > cb) goto success; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + -3) > cb) continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[5]) < c_b) goto success; else continue; else goto success; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_2 + -6) > cb) if (*cache_2 < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else if (*(cache_2 + -6) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[10]) > cb) if (*cache_2 > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_1 + 2) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_1 + 2) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_1 + 2) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + -3) > cb) continue; else if (*(cache_0 + -3) < c_b) if (*(cache_2 + -6) > cb) continue; else if (*(cache_2 + -6) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[5]) < c_b) goto success; else continue; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_1 + 1) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[5]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[5]) > cb) if (*cache_2 > cb) if (*(cache_0 + pixel[15]) > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) continue; else if (*(cache_1 + 2) > cb || *(cache_1 + 2) < c_b) continue; else if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) continue; else if (*(cache_0 + pixel[10]) > cb) if (*cache_2 > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[2]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + 3) > cb) if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_1 + 1) > cb) goto success; else if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[15]) > cb) continue; else if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[0]) > cb) continue; else if (*(cache_0 + pixel[0]) < c_b) goto success; else if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else if (*(cache_0 + pixel[5]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[15]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[2]) > cb || *(cache_0 + pixel[2]) < c_b) continue; else if (*(cache_1 + 1) < c_b) if (*(cache_1 + 2) > cb || *(cache_1 + 2) < c_b) continue; else goto success; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*cache_2 > cb) continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[5]) > cb) continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[0]) > cb) continue; else if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_1 + 2) > cb) continue; else if (*(cache_1 + 2) < c_b) if (*(cache_1 + 1) > cb) continue; else if (*(cache_1 + 1) < c_b) goto success; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[15]) < c_b) goto success; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[15]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[10]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_1 + 1) < c_b) goto success; else continue; else if (*(cache_0 + -3) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_2 + -6) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[5]) > cb) continue; else if (*(cache_0 + pixel[5]) < c_b) goto success; else if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[11]) > cb) continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + pixel[10]) > cb) continue; else if (*(cache_0 + pixel[10]) < c_b) goto success; else if (*cache_2 < c_b) goto success; else continue; else continue; else if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_1 + 1) > cb) continue; else if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[15]) > cb) continue; else if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[0]) > cb) continue; else if (*(cache_0 + pixel[0]) < c_b) goto success; else if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[15]) > cb) if (*cache_2 > cb) continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + 3) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 2) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + 3) > cb) continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[2]) > cb || *(cache_0 + pixel[2]) < c_b) continue; else if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[5]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[15]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + -3) > cb) continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[14]) > cb) continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[0]) < c_b) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_2 + -6) > cb) continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_1 + 1) < c_b) goto success; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + 3) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_1 + 1) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_2 + -6) > cb) continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*cache_2 > cb) if (*(cache_2 + -6) < c_b) if (*(cache_0 + -3) < c_b) goto success; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[2]) > cb) continue; else if (*(cache_0 + pixel[2]) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + -3) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 1) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + -3) < c_b) if (*(cache_1 + 2) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[10]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*cache_2 > cb) if (*(cache_0 + pixel[15]) > cb) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + 3) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else continue; else if (*(cache_0 + pixel[14]) < c_b) continue; else if (*(cache_1 + 1) > cb) goto success; else continue; else if (*(cache_0 + pixel[5]) < c_b) continue; else if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + -3) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[5]) > cb) goto success; else continue; else continue; else if (*(cache_1 + 1) < c_b) continue; else if (*(cache_0 + pixel[14]) > cb) if (*(cache_1 + 2) > cb) goto success; else continue; else continue; else if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[0]) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_1 + 1) > cb) goto success; else continue; else if (*(cache_1 + 1) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[1]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[10]) < c_b) continue; else if (*(cache_0 + 3) > cb) if (*(cache_0 + -3) > cb) if (*(cache_1 + 1) > cb || *(cache_1 + 1) < c_b) continue; else if (*(cache_0 + pixel[11]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[5]) > cb) continue; else if (*(cache_0 + pixel[5]) < c_b) goto success; else if (*(cache_0 + pixel[14]) > cb) goto success; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) continue; else if (*(cache_0 + pixel[5]) > cb) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) > cb) if (*(cache_0 + pixel[10]) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else if (*(cache_0 + pixel[11]) < c_b) continue; else if (*(cache_0 + pixel[5]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + 3) > cb) if (*(cache_1 + 2) > cb || *(cache_1 + 2) < c_b) continue; else goto success; else continue; else continue; else if (*(cache_0 + 3) > cb) if (*(cache_0 + pixel[14]) > cb) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_0 + pixel[11]) > cb) goto success; else continue; else if (*(cache_0 + pixel[11]) > cb) if (*(cache_0 + pixel[1]) > cb) if (*(cache_2 + -6) > cb) if (*(cache_0 + pixel[2]) > cb) if (*(cache_0 + pixel[0]) > cb) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*cache_2 < c_b) if (*(cache_0 + pixel[15]) < c_b) if (*(cache_0 + pixel[5]) > cb) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_1 + 2) > cb) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[14]) < c_b) goto success; else continue; else continue; else if (*(cache_1 + 2) < c_b) continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[5]) < c_b) if (*(cache_1 + 2) > cb) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) > cb) continue; else if (*(cache_0 + pixel[6]) < c_b) goto success; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + 3) > cb) continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[14]) < c_b) goto success; else continue; else if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[2]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_1 + 2) < c_b) if (*(cache_0 + 3) > cb) continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[14]) > cb) if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[2]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[6]) > cb) continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_2 + -6) < c_b) goto success; else continue; else continue; else continue; else if (*(cache_1 + 1) < c_b) if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[14]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[6]) > cb) if (*(cache_0 + pixel[10]) > cb) goto success; else continue; else if (*(cache_0 + pixel[6]) < c_b) if (*(cache_0 + 3) > cb) continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_1 + 1) > cb || *(cache_1 + 1) < c_b) continue; else goto success; else continue; else continue; else continue; else continue; else if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + 3) > cb) continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_0 + pixel[1]) < c_b) goto success; else continue; else continue; else if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + pixel[2]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + pixel[11]) < c_b) if (*(cache_0 + -3) < c_b) if (*(cache_0 + pixel[10]) > cb) continue; else if (*(cache_0 + pixel[10]) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[2]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_0 + pixel[0]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else if (*(cache_0 + 3) < c_b) if (*(cache_0 + pixel[14]) < c_b) if (*(cache_0 + pixel[1]) < c_b) if (*(cache_2 + -6) < c_b) if (*(cache_0 + pixel[0]) < c_b) if (*(cache_0 + pixel[2]) < c_b) goto success; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; else continue; success: if (total >= rsize) { rsize *= 2; #if DOTNET_V1_1 ret = (FASTcorner[])ArrayResize(ret, rsize); #else Array.Resize(ref ret, rsize); #endif } int xx = (int)(cache_0 - line_min); int yy = y; ret[total] = new FASTcorner(xx, yy); total++; } } // resize the array so that we don't need to explicityly pass back the total // number of corners found #if DOTNET_V1_1 ret = (FASTcorner[])ArrayResize(ret, total); #else Array.Resize(ref ret, total); #endif return ret; } } }
public FASTline(FASTcorner point1, FASTcorner point2, int response) { this.point1 = point1; this.point2 = point2; this.response = response; }