Pull to refresh

Подсчёт объектов на изображении

Reading time2 min
Views14K
Сегодня я расскажу о двух алгоритмах подсчёта количества объектов на изображении. Этот топик предназначен в первую очередь для тех, кто только начинает заниматься обработкой изображений. Для профессионалов ничего нового я не скажу.
В процессе высокоуровневой обработки изображений довольно часто возникает задача подсчёта количества объектов. Конечно, её можно решить с помощью алгоритма рекурсивной пометки областей (метод марок).
пометить (точка, метка)
начало 
    если (точка не принадлежит фону и не помечена) то
     начало
        присвоить точке метку(точка, метка);
        пометить(точка выше, метка);
        пометить(точка ниже, метка);
        пометить(точка левее, метка);
        пометить(точка правее, метка);
    конец
конец
 

Вышеописанный алгоритм необходимо применить к каждому пикселу исходного изображения, меняя метки после каждого найденного объекта. После выполнения алгоритма количество объектов будет равно количеству использованных меток.
Этот алгоритм позволяет не только подсчитать количество объектов, но и отделить их друг от друга. Нетрудно заметить, что этот алгоритм использует рекурсию, а значит, у нас возникает две потенциальных проблемы. Во-первых, скорость работы алгоритма может быть недостаточной для обработки данных в реальном времени, во-вторых, потенциально нам может не хватать размера стека, особенно, если мы говорим о реализации этого алгоритма в железе (ПЛИС).
Второй метод подсчёта объектов основан на вычислении разницы между количеством внешних и внутренних углов. Внешним углом называется окрестность 2*2 пиксела, содержащая три пиксела фона и один пиксел объекта, внутренним углом называется окрестность 2*2 пиксела, содержащая три пиксела объекта и один пиксел фона.
Шаблоны внешних углов:

Шаблоны внутренних углов:

Количество объектов на изображении вычисляется, как четверть разности количества внешних и внутренних углов.
Ресурсы, требуемые для работы этого алгоритма минимальны. В программной реализации требуется однократный проход по всему изображению, а в аппаратной реализации дополнительно потребуется только два счётчика.
Важно понимать, что этот алгоритм корректно работает только при условии, что внутри объекта нет фоновых пикселов. Такие пикселы носят название шум типа «перец» и легко устраняются методами математической морфологии.
И как всегда, вы можете скачать программу, реализующую описанные алгоритмы:

P.S. Если тема интересна, могу написать топик, о реализации алгоритмов обработки изображений на ПЛИС.
Tags:
Hubs:
Total votes 54: ↑47 and ↓7+40
Comments22

Articles