Получить количество строк в изображении, используя AForge или OpenCV

1

Я пытаюсь определить, проходит ли линия через изображение или нет, используя обнаружение линии трансформации С# и AForge. В том же контексте я думаю о лучшем решении, которое обнаруживает, что изображение четкое (без строк), чтобы вернуть ложное значение и наоборот. У меня есть следующее изображение, и я хочу проверить, проходит ли строка через него, я верну true, иначе return false:

http://s10.postimg.org/3sn8wari1/image.png

Я использовал следующий код, чтобы получить количество строк, но кажется, что это неточно или я плохо использую алгоритм.

        AForge.Imaging.Image.FormatImage(ref SEChild);
        // lock the source image
        BitmapData sourceData = SEChild.LockBits(
            new System.Drawing.Rectangle(0, 0, SEChild.Width, SEChild.Height),
            ImageLockMode.ReadOnly, SEChild.PixelFormat);
        // binarize the image
        UnmanagedImage binarySource = filter.Apply(new UnmanagedImage(sourceData));

        HoughLineTransformation lineTransform = new HoughLineTransformation();
        lineTransform. = 10;
        // apply Hough line transofrm
        lineTransform.ProcessImage(binarySource);
        HoughLine[] lines = lineTransform.GetLinesByRelativeIntensity(0.5);
        if (lines.Count() > 0)
        {
            Result += "NW: Yes!\n";
        }
        else
        {
            Result += "NW: No!\n";
        }
Теги:
image-processing
hough-transform
aforge

1 ответ

0
Лучший ответ

Я применил решение, мощное со всеми кривыми, кроме прямых.

Я использовал библиотеку AForge.net и впоследствии использовал следующие шаги, как показано в коде:

  1. Примените Euclidean Color Filtering на изображении
  2. Примените счетчик Blob на полученном изображении и получите количество прямоугольников (Blobs), которые были найдены на изображении.

Код:

  private bool CheckLines(Bitmap image, Color filterColor)
    {
        EuclideanColorFiltering ColorFilter = new EuclideanColorFiltering();
        // set center colour and radius
        AForge.Imaging.RGB color = new RGB(filterColor.R, filterColor.G, filterColor.B, filterColor.A);
        ColorFilter.CenterColor = color;
        ColorFilter.Radius = 100;
        // Apply the filter
        ColorFilter.ApplyInPlace(image);

        // Define the Blob counter and use it!
        BlobCounter blobCounter = new BlobCounter();
        blobCounter.MinWidth = 5;
        blobCounter.MinHeight = 5;
        blobCounter.FilterBlobs = true;
        //blobCounter.ObjectsOrder = ObjectsOrder.Size;
        blobCounter.ProcessImage(image);
        System.Drawing.Rectangle[] rects = blobCounter.GetObjectsRectangles();
        if (rects.Length > 0)
        {
            return true;
        }
        return false;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню