Обнаружение угла по местоположению точек или изображению
У меня есть несколько простых форм, которые не обязательно правильные.
Мне нужен алгоритм, чтобы найти их углы, на самом деле я хочу суммировать их точки до минимума, чтобы сохранить их в формате dxf, и у меня есть расположение их точек в массиве. Простые алгоритмы, такие как harris или surf, не находят подходящих точек и возвращают слишком много очков в результате. Можете ли вы помочь мне решить эту проблему с помощью алгоритма или идеи или кода? (в C, C#, Java,...) или обработки изображений заранее спасибо.
1 ответ
То, что вы хотите достичь, называется векторизацией полигонов.
Во-первых, вам нужно применить алгоритм контура, чтобы получить пиксели в последовательности. В этом случае, кажется, что простое связывание пикселей с их соседом подойдет (знайте, что в вашем примере некоторые фигуры открыты, и вам, вероятно, придется расширить окрестности до двух или трех пикселей.
Затем определите длинные прямые края с помощью алгоритма Дугласа-Пекера ( https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm) или аналогичного.
Некоторые из ваших углов тупые, и вы можете исправить их. Я бы предложил отбросить последовательности коротких сегментов, образующих плоские углы, и соединить длинные соседние сегменты, чтобы восстановить квадратные углы.
Не ожидайте "идеальных" результатов.