Matlab: найти большую ось бинарной области - PullRequest
1 голос
/ 10 августа 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

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

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

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

1 голос
/ 10 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...