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