2016-09-21 2 views
0

Поиск границы точек может быть полезен во многих областях информатики. В настоящее время у меня есть видимые вершины 3D-сетки, которые я проецировал 2D. Двумерные точки будут использоваться для получения границы и различных типов ребер.Граница двумерных точек

Пример изображения, полученного с помощью ссылки matlab on a function obtaining the boundary of points, показывает границы (оранжевые и красные) набора двумерных точек. Оранжевая граница использует коэффициент сжатия и похожа на границу, создаваемую convex hull function. В нашем случае нам нужна более естественная граница точек, таких как красная граничная линия (а не та, что достигается выпуклой функцией корпуса). Граничная функция по matlab не определена, поскольку я использую более старые версии 2014 года (я предполагаю, что это причина).

Есть ли другой способ/функция для достижения естественной граничной линии двумерных точек? Я проверил функцию выпуклого корпуса на изображении, и он пропускает множество граничных точек.

Boundary of Points `

+4

Что именно вы подразумеваете под более естественной границей? Функция Matlab использует коэффициент сжатия - вы просто хотите сделать это с другой степенью сжатия или у вас есть другой набор критериев? –

+2

Чтобы добавить к этому: для меня неясно, для красной линии, почему некоторые пункты не включены, а другие. – Bernhard

+0

Просто, чтобы уточнить, что я имел в виду под естественной границей в терминах формы объекта. Возьмем автомобиль, например. Предположим, что это первоначально представлено облаком точек в трехмерном пространстве. Я проецирую облако точек в 2D-пространство от направления точек камеры. Визуально внешние 2D-точки представляют собой границу или край автомобиля. Контур или край будут кривыми, иногда использование выпуклой оболочки может не представлять контурную линию автомобиля реалистично. Кажется, я не могу использовать граничную функцию в Matlab, поскольку она не определена. С другой стороны, я опробовал выпуклый корпус – Sade

ответ

1

Похож matlabs граничной функция просто возвращающаяся границы вашего множества узлов альфа-форма: https://en.wikipedia.org/wiki/Alpha_shape

Существует реализация для C++ в CGAL: http://doc.cgal.org/latest/Alpha_shapes_2/index.html из этой документации мы имеем:

enter image description here

Как уже упоминалось в Edelsbrunner-х и Mücke [2], можно интуитивно думать о α-форме как о следующем. Представьте себе огромную массу мороженого, составляющего пространство ℝ3 и содержащее точки как «твердые» кусочки шоколада. Используя одну из этих сферических ложок мороженого, мы вырезаем все части блока мороженого, которые мы можем достичь, не натыкаясь на кусочки шоколада, тем самым даже вырезая отверстия внутри (например, части, недоступные, просто перемещая ложку из снаружи). В конечном итоге мы получим (не обязательно выпуклый) объект, ограниченный шапками, дугами и точками. Если мы теперь выпрямляем все «круглые» грани до треугольников и отрезков линий, у нас есть интуитивное описание того, что называется α-формой S. Вот пример этого процесса в 2D (где наша ложка мороженого представляет собой просто круг):

+0

Это действительно полезно. Поэтому мне нужна альфа-форма. Поскольку я не могу использовать граничную функцию для достижения этого в matlab. Есть ли другой способ в matlab получить альфа-форму. – Sade

+0

https://www.mathworks.com/matlabcentral/fileexchange/28851-alpha-shapes http://www.mathworks.com/examples/matlab/mw/matlab-ex67295599-alpha-shapes Я проверю его, чтобы определить если это то, что я ищу. – Sade

+0

@Sade alphashape и его друзья, где вторглись в 2014b, но есть (не проверены мной) эта версия на центральном центральном уровне: https://nl.mathworks.com/matlabcentral/fileexchange/28851-alpha-shapes – Lanting

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