2011-08-10 5 views
1

вывод некоторой обработки состоит из бинарной карты с несколькими связанными областями.Matlab: найти основную ось двоичной области

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

Любой намек на то, как добиться этого результата эффективным способом?

+0

Являются ли ваши области выпуклыми или могут быть вогнутыми? Что представляет собой область? У вас есть представительный пример, который вы можете поделиться с нами? – John

+0

@ Danilo: возможно, вы можете использовать свойство 'Extrema' функции [REGIONPROPS] (http://www.mathworks.com/help/toolbox/images/ref/regionprops.html#bqkf8iq) – Amro

ответ

1

Моим первым наклонением было бы рассматривать пиксели как 2D-точки и использовать анализ основных компонентов. PCA предоставит вам основную ось каждого региона (princomp, если у вас есть панель инструментов stat).

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

Я предположил, что у вас уже есть бинарное изображение, разделенное на регионы. Если это неверно, вы можете использовать bwlabel (если регионы не касаются) или k-означает (если они есть) в первую очередь.

2

Если у вас есть набор инструментов для обработки изображений, вы можете использовать regionprops, который даст вам несколько стандартных мер любой бинарной области. Сюда входит

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

В зависимости от того, как вы хотели бы нарисовать свои линии, функция regionprops также возвращает длину для основных и второстепенных осей в 2-D связанных областях и делает это на основе каждого региона, предоставляя вам вектор длины оси. Если вы укажете 4 соседний подключенный вы довольно уверены, что длина будет находиться исключительно в пределах подключенной области. Но это не гарантируется, так как `regionprops 'вычисляет большую длину оси эллипса, который имеет тот же нормализованный второй центральный момент, что и связанная область.

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