По крайней мере для вашего примера, очень простой алгоритм будет работать.
- Найти черный пиксель из изображения
- Используя алгоритм заливки, найдите все пикселиподключен к нему, и отделить его.Это одна из ваших трасс.
- Работая с разделенной трассой, найдите белый пиксель и используйте алгоритм заливки, чтобы найти все пиксели, связанные с ним.Если вы бежите к краю изображения, это не дыра.Если вы этого не сделаете, это может быть дыра или петля в след.Используйте пороговое значение для размера отверстия, чтобы определить, является ли это оконечным отверстием или петлей.
- Пометьте отверстие и удалите его из рассмотрения.Повторяйте до тех пор, пока не останется больше необработанных белых пикселей.
- Удалите всю трассу из рассмотрения и перейдите к 1.
- Когда на шаге 1 не будет рассмотрено больше черных пикселей, выготово.
Вероятно, вы довольно далеко продвинулись бы с базовой библиотекой редактирования изображений, которая имеет функцию заливки, функцию разделения определенного цвета на новое изображение и функцию замены цветов (последние два тривиальны для реализации, и в Интернете доступно множество алгоритмов заполнения.Вы можете использовать разные цвета, чтобы пометить разные вещи, например, закрасить все, что "не учитывается", красным.Это также обеспечивает интересную визуализацию, если вы посмотрите на нее в режиме реального времени!