Проблема рисования многоугольника на кластерах данных в MATLAB - PullRequest
2 голосов
/ 01 июня 2010

У меня есть несколько точек данных, которые я разделил на несколько кластеров с некоторыми алгоритмами кластеризации, как показано на рисунке ниже: (для появления изображения может потребоваться некоторое время) альтернативный текст http://www.freeimagehosting.net/uploads/05a807bc42.png

Каждый цвет представляет разные кластеры. Я должен нарисовать многоугольники вокруг каждого кластера. Я использую конвульс по этой причине. Но, как вы можете видеть, многоугольник для красного скопления очень большой и охватывает много областей, что я не ищу. Мне нужно рисовать линии (плойгоны) точно вокруг моих наборов данных. Например, на рисунке выше я хочу, чтобы многоугольник рисовался точно так же (и вокруг), как красный кластер с 3 ветвями. Другими словами, в этом случае мне нужен многоугольник с 3 ветками, чтобы покрыть мои красные скопления, а не тот большой многоугольник, который покрывает всю область. Кто-нибудь может мне с этим помочь? Обратите внимание , что решение должно быть общим, потому что кластеры будут меняться при каждом запуске алгоритма, поэтому оно должно быть общим.

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

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

Почему это не может быть действительно ответом здесь: представьте шесть точек, три в равностороннем треугольнике и еще три в равностороннем треугольнике внутри него в той же ориентации.

Каков правильный корпус вокруг этого? Это просто выпуклый корпус? Это внутренний треугольник с тремя линейными шпорами, выходящими из него? Имеет ли значение относительный размер треугольников? Если вам нужно указать этот параметр тогда?

0 голосов
/ 04 июня 2010

Если ваши кластеры очень компактны, вы можете попробовать следующее:

  1. Создайте сетку, скажем, с интервалом 0,1.
  2. Установите для каждого пикселя в сетке значение 1, если хотя бы одна точка данных покрывает его, установите для пикселя значение 0, если нет точки данных, покрывающей пиксель.
  3. Возможно, вам понадобится запустить imclose на вашей маске, чтобы заполнить маленькие дыры внутри, которые не были окрашены из-за явной неудачи.
  4. Извлечение пикселей границы с использованием, например, bwperim. Это контур многоугольника, который вы ищете.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...