Обнаружение угла по местоположению точек или изображению

У меня есть несколько простых форм, которые не обязательно правильные. введите описание изображения здесь

Мне нужен алгоритм, чтобы найти их углы, на самом деле я хочу суммировать их точки до минимума, чтобы сохранить их в формате dxf, и у меня есть расположение их точек в массиве. Простые алгоритмы, такие как harris или surf, не находят подходящих точек и возвращают слишком много очков в результате. Можете ли вы помочь мне решить эту проблему с помощью алгоритма или идеи или кода? (в C, C#, Java,...) или обработки изображений заранее спасибо.

1 ответ

Решение

То, что вы хотите достичь, называется векторизацией полигонов.

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

Затем определите длинные прямые края с помощью алгоритма Дугласа-Пекера ( https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm) или аналогичного.

Некоторые из ваших углов тупые, и вы можете исправить их. Я бы предложил отбросить последовательности коротких сегментов, образующих плоские углы, и соединить длинные соседние сегменты, чтобы восстановить квадратные углы.

Не ожидайте "идеальных" результатов.

Другие вопросы по тегам