Вам понадобится что-то вроде https://codereview.stackexchange.com/questions/148897/floodfill-algorithm,, которое реализует https://en.wikipedia.org/wiki/Flood_fill. Это хорошо подходит для numba или cython, если это возможно для вас.
Возможно, выможно использовать OpenCV, который уже предлагает заливку: https://docs.opencv.org/3.4/d7/d1b/group__imgproc__misc.html#gaf1f55a048f8a45bc3383586e80b1f0d0.
Предположим, вы преобразовали в двоичную форму, поэтому фон имеет один цвет, а объекты - нулевой цвет.Установите c = 2
, отсканируйте нулевой пиксель и залейте его цветом c
.Теперь увеличьте c
, отсканируйте ноль, заполните его, вспените, промойте, повторите.Вы получите в результате каждый объект, имеющий отдельный цвет, чтобы вы могли использовать его в качестве маски изоляции.Отдельные цвета очень полезны при отладке, но, конечно, достаточно трех цветов (или даже двух), если вы просто хотите считать.Окончательное растровое изображение будет равномерно окрашивать фон в двухцветном случае.
Использование 4-элементной окрестности фон Неймана против 8-элементной окрестности сделаетбольшая разница в конечном результате.Для краски легче «просочиться» через диагональное соединение в настройке из 8 элементов.Обнаружение краев и утолщение могут помочь уменьшить нежелательную утечку цвета.