Простое обнаружение нескольких двоичных объектов в двоичном изображении?

Если есть заданный 2d-массив изображения, где был выполнен порог, и теперь он находится в двоичной информации.

Есть ли какой-то особый способ обработки этого изображения, чтобы я получил несколько координат блоба на изображении?

Я не могу использовать openCV, потому что этот процесс должен выполняться одновременно на более чем 10 смоделированных роботах на специальном симуляторе в C.

Мне нужны координаты xy капель, но сначала мне нужно сначала найти эти несколько капель.

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

PS: Одиночный блоб не должен быть проблемой. Проблема в нескольких блобах.

Просто фора?


person ivanwong888899999    schedule 21.04.2013    source источник
comment
Попробуйте поискать в Google подключенные компоненты. Вы также можете найти обнаружение больших двоичных объектов на основе оператора Лапласа или Гаусса.   -  person Zaphod    schedule 21.04.2013
comment
Ну лапласиан оператора Гаусса, я не понимаю как это реализовать в коде....   -  person ivanwong888899999    schedule 21.04.2013


Ответы (3)


Взгляните на QuickBlob, небольшую автономную библиотеку C, которая идеально подходит для ваших нужд.

QuickBlob поставляется с небольшим инструментом командной строки (csv-blobs), который выводит положение и размер каждого блоба, найденного во входном изображении:

./csv-blobs white image.png
X,Y,size,color
28.37,10.90,41,white
51.64,10.36,42,white
...

Вот пример (выходное изображение создается благодаря show-blobs.py крошечной утилите Python, которая поставляется с QuickBlob):

входное изображениевыходное изображение

person deltheil    schedule 22.04.2013

Вы можете просмотреть бинарное изображение, пометив соединенные части с помощью следующего алгоритма:

  1. Создайте двумерный массив целых чисел, labelArray, который будет содержать метки связанных областей, и инициируйте его для всех нулей.

  2. Итерация по каждому двоичному пикселю, p, строка за строкой

    A. Если p истинно и соответствующее значение для этой позиции в labelArray равно 0 (без метки), назначьте его новой метке и выполните поиск в ширину, который добавит все окружающие бинарные пиксели, которые также истинны, к той же метке. .

Единственная проблема сейчас заключается в том, что у вас есть несколько капель, которые касаются друг друга. Поскольку вы знаете размер BLOB-объектов, вы сможете вычислить, сколько BLOB-объектов находится в данной подключенной области. Это сложная часть. На этом этапе вы можете попробовать выполнить кластеризацию методом k-средних. Вы также можете попробовать другие методы, такие как бинарное расширение.

person Justin Peel    schedule 21.04.2013

Я знаю, что я очень опаздываю на вечеринку, но я просто добавляю это для бенефициаров, которые исследуют эту проблему.

Вот хорошее описание, которое может соответствовать вашим потребностям. http://www.mcs.csueastbay.edu/~grewe/CS6825/Mat/BinaryImageProcessing/BlobDetection.htm

person leed25d    schedule 19.11.2015