Вычисление сходства между нарисованными линиями

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

Например, на следующей диаграмме: diagram

Линии A и B явно похожи, а B и C — нет. Алгоритм должен это отражать. Кроме того, имеет значение «направление» линии, обозначенное начальной и конечной точками. Такой алгоритм уже существует?


person flukes1    schedule 22.09.2010    source источник
comment
Взгляните на преобразование Хафа. Это может быть излишним, возможно, у кого-то есть лучшее решение.   -  person Ivo    schedule 22.09.2010
comment
Линии А и С тоже не похожи   -  person W4t3randWind    schedule 15.06.2017


Ответы (2)


Наивным подходом может быть вычисление суммы расстояний между соответствующими точками на двух линиях. Итак, давайте предположим, что обе линии имеют почти одинаковую длину, а количество точек на линиях примерно одинаково и равноудаленно.
1 .Переведите линию 2 так, чтобы ее начальная точка совпадала с начальной точкой линии 1.
2. вычислить сумму расстояний между соответствующими точками между линией 1 и линией 2.
3. Если среднее расстояние (т. е. SUM/NUMBER_OF_POINTS) меньше THRESHOLD, то линии похожи, в противном случае они различны.
Это может быть расширено для поддержки линий разных размеров. В этом случае просто увеличьте меньшую линию, чтобы она совпадала с более длинной линией, тогда остальные могут быть аналогичны описанному выше подходу.
Помимо расчета расстояния, вы можете рассчитать разницу наклонов линий и, если они отличаются наклоны в любой точке (или в нескольких точках, для этого вам нужно поэкспериментировать) слишком высоки (выше некоторого ПОРОГА), тогда они не похожи.

person bhups    schedule 22.09.2010
comment
FWIW, я думаю, что bhups означает, что вам нужна сумма абсолютных значений различий между соответствующими точками. Знак имеет значение, а расстояние не определено. - person W4t3randWind; 15.06.2017

Этот ответ очень задерживается, но я опубликую его ради других, таких как я, которые наткнутся на него при поиске.

Я считаю, что Расстояние Фреше может быть той мерой, которую вы ищете, особенно потому, что направление имеет значение.

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

person Gulzar    schedule 08.01.2019