Как использовать маршевые квадраты для нескольких контуров?

как заставить марширующие квадраты продолжаться после того, как он найдет первый контур?

контуры изображения, над которым я работаю, будут меняться довольно часто, и поскольку я работаю во встроенной среде (android/ios), мне прежде всего нужно быстрое решение. и использование внешней библиотеки не вариант.

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

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

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

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

Mark1: я выбрал марширующие квадраты, потому что мне нужен только контур контуров, даже если в теме есть дыры.


person Joseph    schedule 05.12.2015    source источник
comment
Возможно, есть проблема с терминологией... Алгоритм марширующих квадратов находит все контуры одновременно (включая отверстия, см. en.wikipedia.org/wiki/Marching_squares). Учитывая изображение, какой результат вы ищете? Общий многоугольник (т.е. не обязательно связанный или просто связанный) для каждого из значений, присутствующих на изображении?   -  person 6502    schedule 08.12.2015
comment
очевидно, вы правы, и есть две разные реализации этого алгоритма, и тот, который я сейчас использую, работает только с изображениями с одной формой, и вот откуда я это взял: emanueleferonato.com/2013/03/ 01/ это реализация, которую я сейчас использую, и она отличается от приведенной выше вики-статьи. так есть ли какая-либо реализация C++ алгоритма, упомянутого в статье вики, которая извлекает несколько фигур одновременно.   -  person Joseph    schedule 08.12.2015
comment
мне удалось найти хорошую быструю реализацию, которая извлекает всю геометрию за один проход!! ... так что я думаю, что это решено тогда.   -  person Joseph    schedule 09.12.2015
comment
Мне постоянно напоминают о xkcd.com/979 каждый раз, когда я вижу такой вопрос (открытый, но решенный) .   -  person syockit    schedule 08.01.2020


Ответы (1)


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

person Joseph    schedule 10.01.2020