Возможно, уже поздно, но я просто подумал об этом и придумал что-то, что стоит попробовать.
Определите набор фигур, каждая из которых параметризована небольшим количеством параметров. Например, определите круг через его среднюю точку (две переменные) и радиус (третью переменную), линию через две конечные точки (четыре переменные), стрелку в виде линии с дополнительным параметром для размера головы и т. Д. на.
Теперь вы можете превратить это в проблему минимизации. Для каждой точки i
на контуре и каждой фигуры определите минимальное расстояние до фигуры в зависимости от параметров фигуры di(params)
. Теперь определите функцию вероятности, которая скажет вам, насколько путь выглядит как форма. Кандидатом по умолчанию является то, что называется «хи-квадрат» в теории вероятностей:
chi^2 (params) = sum_i ( di(params) )^2
chi^2
является функцией параметров для каждой фигуры, поэтому следующим шагом является минимизация этого количества. Обычно для этого доступны библиотеки, но процедура минимизации также может быть реализована вручную.
После минимизации chi^2
для каждой фигуры форма, которая получает наименьшее значение chi^2
, является той, которая больше всего напоминает путь. И у вас уже есть параметры, которые подходят лучше всего!
Теперь, чтобы заставить это работать должным образом, сложно и займет много времени и настройки (поиск более подходящих функций вероятности, эффективных процедур минимизации, хорошего набора базовых форм и т. Д.). Google находит гораздо более подробные объяснения - но так я бы начал, если бы никакой другой информации не было.