2010-05-11 3 views
6

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

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

ответ

7

Попробуйте функцию 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 

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

1

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

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

1

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

В зависимости от значения «альфа» вы получаете более или менее грани в полученном многоугольнике.

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

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

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

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

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