Нашел ваш вопрос, пока сам искал ответ. Надеюсь, вы уже решили это. Я понял это, и на случай, если кто-то еще найдет этот вопрос, вот мое понимание функции border().
Граничная функция представляет собой реализацию альфа-форм. Используя альфа-формы, набору точек можно присвоить многоугольник с помощью набора кругов определенного радиуса: представьте себе произвольную фигуру, нарисованную вокруг точек, и продолжайте удалять как можно большую часть этой формы, используя круги определенного радиуса. Продолжайте как можно дольше, не замыкая ни одной точки. Небольшой радиус будет означать, что можно удалить больше «материала», больший радиус означает меньшее «удаление», т. Е. Маленький радиус создает плотную обрезанную форму, тогда как бесконечный радиус воссоздает выпуклую оболочку набора. Точки, определенные как краевые, затем соединяются прямыми гранями. Это может создать пустые области внутри набора точек. См., например. http://doc.cgal.org/latest/Alpha_shapes_2/index.html
В MATLAB есть функция alphashape(), которая вычисляет альфа-формы со всеми возможными альфа-радиусами, дающими различные формы. Это используется в граничной функции.
рабочий процесс границы():
(1) Создать альфа-форму
(2) Найдите критический альфа-радиус, необходимый для создания одной области для альфа-формы
(3) Извлечь все альфа-значения, которые создают уникальные фигуры выше этого критического значения.
(4) Используйте коэффициент сжатия S, чтобы выбрать одно значение альфа-канала для использования.
Пример: при S=0,25 используйте альфа-радиус с индексом (1–.25)*число(alphavalues>=alpha_crit). Это создает альфа-форму с использованием 75-го наименьшего альфа-радиуса, что дает одну область (для S = 0,25).
Если S=1 (максимальное сжатие), дает наименьший альфа-радиус, который дает одну область для альфа-формы.
Если S=0 (без сжатия), дает максимальный альфа-радиус, который дает уникальную форму. (Увеличение альфа-радиуса не имеет никакого эффекта).
(5) установить порог для заполнения отверстий в альфа-форме таким же, как площадь альфа-фигуры, т. е. заполнить все отверстия
(6) Возвращает индексы исходного облака точек, соответствующие вершинам этой альфа-формы.
Соответствующий раздел файла border.m (строки 79-86)
Acrit = shp.criticalAlpha('one-region'); %alpha-radius required for single region
spec = shp.alphaSpectrum();%all alphavalues
idx = find(spec==Acrit);
subspec = spec(1:idx);%alphavalues up to criticalAlpha
subspec = flipud(subspec);%reverse order
idx = max(ceil((1-S)*numel(subspec)),1); %find index from shrink factor
alphaval = subspec(idx);
shp.Alpha = alphaval; %set alpha value of alpha shape
shp.HoleThreshold = areavol; % remove holes in interior
Надеюсь, что это достаточно ясно и полезно для кого-то.
Я использую MATLAB R2014b.
person
YiraDati
schedule
06.05.2016