2013-02-15 4 views
0

У меня есть сегменты 2D линии. Моя цель - сделать разные замкнутые многоугольники. Но здесь я хочу выбрать большинство сегментов внешней линии, когда несколько параллельных сегментов линии остаются закрытыми друг для друга. с различными комбинациями линий, я могу создавать разные замкнутые полигоны. Я думал и изо всех сил пытался узнать, как получить большинство внешних линий, поскольку мне нужен многоугольник, который создается внешними большинством линий. (Polyogns в конце построены путем пересечения сегментов сегмента adjoying.) Я думал получить большую ограничительную рамку, содержащую все сегменты, и получить центроид, а затем найти перпендикулярные расстояния для каждой линии. В этом процессе я нашел близлежащие линейные сегменты, которые ориентированы близко друг к другу (т. Е. Вблизи параллельных линий). Таким образом, из тех близких параллельных линий я хочу, чтобы внешний самый один. (то есть красный). Но если я использовал центроид и сравнивал расстояния, то самое длинное расстояние (между соседними параллельными линиями) не дает правильной внешней самой линии, когда существуют более вогнутые и выпуклые витки, так как некоторые внешние (самые красные) случаи не дают самой длинной расстояние. У меня есть; координаты конечных точек для каждого сегмента линии. (то есть векторные данные)Как выбрать сегменты внешней линии

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

ПРИМЕЧАНИЕ. Мои сегменты линии ориентированы в другом направлении. И не только до X & Y осей. Кроме того, близлежащие линии donot всегда имеют 90 или 180 углов со смежными линиями.

, пожалуйста, предложите мне метод. заранее заблаговременно

например, если A, B и C, D являются соседними параллельными отрезками. то внешняя большая строка должна быть B и C. Но если я сравниваю расстояния от центра тяжести (O), то я могу получить C как самый внешний, но B не может получить, поскольку расстояние от O до B меньше, чем от O до A. My метод терпит неудачу в этом типе пятен. Итак, смотрите альтернативы ..

enter image description here

+1

У вас есть только линии, параллельные оси? –

+0

@Grigor Gevorgyan: нет, мои линии не всегда параллельны осям XY. некоторые из них наклонены к осям. – niro

+0

Мне не очень понятно, что вы имеете в виду с «сегментами внешней линии». Вы имеете в виду внешние в группе близлежащие параллельные линии? Или внешние линии всего полигона? –

ответ

1

общий способ найти линий с помощью преобразования Хока.

http://en.wikipedia.org/wiki/Hough_transform

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

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

+0

Мои данные представлены в векторном формате. из-за путаницы я обновляю свое изображение. – niro

+0

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

Смежные вопросы