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); }
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); }