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[] массива, но никак не могу это сделать. Прошу помощи с удалением таких объектов. Либо другой библиотекой и небольшим простым примером для вычисления объектов на изображении. Спасибо!!