Рисование многоугольника вокруг групп точек данных в MATLAB

У меня есть набор точек данных, каждая из которых относится к определенному кластеру (группе). Мне нужно нарисовать многоугольник вокруг каждого из этих кластеров. Кто-нибудь знает как это сделать?

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

3 ответов


попробовать convhull. Он возвращает индексы из точек в наборе данных, которые будут определять выпуклую оболочку. Вам придется сделать это для каждого кластера, который вы планируете.

например:

x=rand(1,100); %#generate x and y data for your clusters
y=rand(1,100);
k=convhull(x,y); %#generate indices marking the outermost points

hold on
plot(x,y,'b.') %# plot your cluster points
plot(x(k),y(k),'r-') %# plots only k indices, giving the convex hull

Это даст вам многоугольник, индексы которого совпадают с выбросами ваших кластеров.


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

надеюсь, это указывает вам в правильном направлении.


convhull работает только в том случае, если у вас выпуклая форма (например, эллипсоид). Если ваше распределение данных имеет вогнутые кривые, такие как форма банана, то convhull не будет работать. К счастью, MATLAB имеет функцию для обработки этого: alphashape

в зависимости от значения" Альфа " вы получаете больше или меньше граней в результирующем многоугольнике.

Как только у вас есть координаты x, y граней, вы можете либо построить их напрямую, но многоугольник будет иметь плоские стороны, или:

вместо интерполяции вы можете определить сетку x,y,z, в которой можно просмотреть данные, и спросить,является ли x, y в Альфа-форме? Если это так, дайте ему значение z = 1, а если нет, дайте ему значение z = 0. затем просто контур сетки, где z = 1.

вы также можете использовать impoly для рисования многоугольника вручную

hobbysplines на обмене файлами Matlab также позволяет сглаживать края многоугольника