Example #1
0
        /// <summary>
        /// Return the ground truth ellipse's parameters from the CSV file.
        /// </summary>
        /// <param name="imageFilename">Filename of the image</param>
        /// <param name="csvFilepath">Filepath to the CSV file with ground truth ellipses' parameters</param>
        /// <returns>Ground truth ellipse's parameters</returns>
        private static GtEllipse GetGtEllipseFromCsv(string imageFilename, string csvFilepath)
        {
            using (StreamReader sr = new StreamReader(csvFilepath))
            {
                GtEllipse gtEllipse;
                string    line;
                sr.ReadLine();  // skip the header
                while ((line = sr.ReadLine()) != null)
                {
                    string[] columns = line.Split(',');
                    if (string.Compare(columns[0], imageFilename) == 0)
                    {
                        if (string.IsNullOrEmpty(columns[1]))
                        {
                            gtEllipse = null;
                        }
                        else
                        {
                            Point2f center    = new Point2f(Convert.ToSingle(columns[1]), Convert.ToSingle(columns[2]));
                            Size2f  axes      = new Size2f(Convert.ToSingle(columns[3]), Convert.ToSingle(columns[4]));
                            float   angle     = Convert.ToSingle(columns[5]);
                            Size    imageSize = new Size(Convert.ToInt32(columns[6]), Convert.ToInt32(columns[7]));

                            gtEllipse = new GtEllipse(center, axes, angle, imageSize);
                        }
                        return(gtEllipse);
                    }
                    ;
                }
                throw new Exception("Filename not found in the CSV file.");
            }
        }
Example #2
0
        /// <summary>
        /// Evaluate ellipse fit by comparing its parameters to the ground truth ellipse's parameters from the CSV file.
        /// </summary>
        /// <param name="imageFilename">Filename of the image</param>
        /// <param name="fitEllipse">Fitted ellipse's parameters</param>
        /// <param name="csvFilepath">Filepath to the CSV file with ground truth ellipses' parameters</param>
        /// <returns>Fitted ellipse's fit score</returns>
        public static float EvaluateEllipseFit(string imageFilename, Ellipse fitEllipse, string csvFilepath)
        {
            GtEllipse gtEllipse = GetGtEllipseFromCsv(imageFilename, csvFilepath);

            if (gtEllipse != null)
            {
                if (fitEllipse != null)
                {
                    return(GetEllipseFitScore(fitEllipse, gtEllipse));
                }
                else
                {
                    return(0.0f);
                }
            }
            else
            {
                if (fitEllipse != null)
                {
                    return(0.0f);
                }
                else
                {
                    return(1.0f);
                }
            }
        }
Example #3
0
        /// <summary>
        /// Calculate ellipse's fit score based on fitted and ground truth ellipses' parameters.
        /// </summary>
        /// <param name="fitEllipse">Fitted ellipse's parameters</param>
        /// <param name="gtEllipse">Ground truth ellipse's parameters</param>
        /// <returns>Fitted ellipse's fit score</returns>
        private static float GetEllipseFitScore(Ellipse fitEllipse, GtEllipse gtEllipse)
        {
            Mat fitEllipseImage = DrawEllipse(fitEllipse, gtEllipse.ImageSize);
            Mat gtEllipseImage  = DrawEllipse(gtEllipse, gtEllipse.ImageSize);

            Cv2.WaitKey();

            return(EvaluateOverlap(gtEllipseImage, fitEllipseImage));
        }