Aforge Выдает ошибку и неправильно ищет образы

Имеется метод:

public static Blob[] FindObject(Bitmap bitmap) {
        // locate objects using blob counter
        BlobCounter blobCounter = new BlobCounter();
        blobCounter.ProcessImage(bitmap);
        Blob[] blobs = blobCounter.GetObjectsInformation();
        
        // create Graphics object to draw on the image and a pen
        SimpleShapeChecker shapeChecker = new SimpleShapeChecker();

        Graphics g = Graphics.FromImage(bitmap);
        Pen redPen = new Pen(Color.Red, 2);
        Pen invis = new Pen(Color.Transparent, 2);
        Pen yellowPen = new Pen(Color.Yellow, 2);
        Pen greenPen = new Pen(Color.Green, 2);
        Pen bluePen = new Pen(Color.Blue, 2);

        for (int i = 0, n = blobs.Length; i < n; i++)
        {
            List<IntPoint> edgePoints =
                blobCounter.GetBlobsEdgePoints(blobs[i]);

            AForge.Point center;
            float radius;

            if (shapeChecker.IsCircle(edgePoints, out center, out radius))
            {
                g.DrawEllipse(yellowPen,
                    (float)(center.X - radius), (float)(center.Y - radius),
                    (float)(radius * 2), (float)(radius * 2));
            }
            else
            {
                List<IntPoint> corners;
                    if (shapeChecker.IsQuadrilateral(edgePoints, out corners))
                    {
                        if (shapeChecker.CheckPolygonSubType(corners) ==
                            PolygonSubType.Rectangle)
                        {
                            g.DrawPolygon(greenPen, ToPointsArray(corners));
                        }
                        else
                        {
                            g.DrawPolygon(bluePen, ToPointsArray(corners));
                        }
                    }
                    else
                    {
                        corners = PointsCloud.FindQuadrilateralCorners(edgePoints);
                        g.DrawPolygon(invis, ToPointsArray(corners));
                    }                  
            }
            //Console.WriteLine(blobs[i].Rectangle);
        }

        redPen.Dispose();
        greenPen.Dispose();
        bluePen.Dispose();
        yellowPen.Dispose();
        g.Dispose();
        return blobs;
    }

Возникает ошибка

Необработанное исключение: System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.

Имя параметра: index в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) в AForge.Math.Geometry.PointsCloud.FindQuadrilateralCorners(IEnumerable1 cloud) в AForge.Math.Geometry.SimpleShapeChecker.IsQuadrilateral(List1 edgePoints, List`1& corners)

После фрагмента кода else { List corners;...

Ошибка возникает не со всеми картинками. Например эта выходит с ошибкой: https://ibb.co/By7WFJN

Я добавлял ошибочный код в try{} catch{}. И сохранял результаты. По итогу вместо 6-7 объектов библиотека находила 12 среди которых непонятные образы. Так же я вычислил, что ошибка из-за того что edgePoints.Count имеет слишком маленькое значение. Я бы хотел удалять такие элементы из blobs[] массива, но никак не могу это сделать. Прошу помощи с удалением таких объектов. Либо другой библиотекой и небольшим простым примером для вычисления объектов на изображении. Спасибо!!


Ответы (0 шт):