Как эффективно сегментировать 2D-изображения в области / пятна схожих значений?

Как эффективно разделить 2D-изображение на капли с похожими значениями? Данный вход является массивом целых чисел, который включает оттенок для не-серых пикселей и яркость серых пикселей.

Я пишу виртуального мобильного робота с использованием Java и использую сегментацию для анализа карты, а также изображения с камеры. Это хорошо известная проблема в Computer Vision , но когда речь идет о производительности робота, это имеет значение, поэтому я хотел получить некоторые данные. Алгоритм имеет значение, поэтому вы можете размещать код на любом языке.

10.12.2008 08:13:31
5 ОТВЕТОВ
РЕШЕНИЕ

Я бы уменьшил выборку, в цветовом пространстве и количестве пикселей, использовал метод зрения (вероятно, означает смещение) и увеличил результат.

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

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

Еще несколько мыслей (в ответ на ваш комментарий).

1) Вы сливались, когда урезали? y [i] = (x [2i] + x [2i + 1]) / 2 Это должно устранить шум.

2) Как быстро вы хотите, чтобы это было?

3) Вы пробовали динамическое средство смещения? (Также Google для динамического х для всех алгоритмов х)

3
10.12.2008 10:06:35
+1 за идею. Это на самом деле первое, что я попробовал, но 1. Мое оригинальное изображение маленькое (100x100), и я хочу сохранить размер капли, и 2. Когда оно улавливает шум, оно усиливается. В реальных ситуациях с большим количеством градиентов это было бы хорошей идеей.
Eugene Yokota 10.12.2008 09:19:56
1. Я не смешивал во время понижающей дискретизации, но я наложил размытие по Гауссу на все изображение, чтобы заранее уменьшить крошечный шум. 2. У меня нет конкретной цели, но быстрее означает более частое обновление для роботов. 3. Нет, звучит намного круче, чем флуд.
Eugene Yokota 10.12.2008 11:02:15

Что у меня сейчас:

  1. Создайте буфер того же размера, что и входное изображение, инициализированный в UNSEGMENTED.
  2. Для каждого пикселя в изображении, где нет соответствующего значения буфера UNSEGMENTED, залейте буфер, используя значение пикселя.

    а. Проверка границы затопления выполняется путем проверки того, находится ли пиксель в пределах EPSILON(в настоящее время установленном в 10) значения исходного пикселя.

    б. Алгоритм заливки .

Возможная проблема:

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

private boolean isValuesCloseEnough(int a_lhs, int a_rhs) {
    return Math.abs(a_lhs - a_rhs) <= EPSILON;
}

Возможное улучшение:

Вместо того, чтобы проверять каждый пиксель UNSEGMENTED, я мог бы случайно выбрать несколько точек. Если вы ожидаете около 10 BLOB-объектов, выбор случайных точек в этом порядке может быть достаточным. Недостатком является то, что вы можете пропустить полезный, но маленький шарик.

0
10.12.2008 09:27:09

Не уверен, что это слишком эффективно, но вы можете попробовать использовать нейронную сеть Кохонена (или самоорганизующуюся карту; SOM), чтобы сгруппировать аналогичные значения, где каждый пиксель содержит исходный цвет и положение, и только цвет используется для Кохохен, группировка.

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

Есть также Сети Хопфилда . Их можно разбить на группы из того, что я прочитал.

2
12.12.2008 06:52:46

Проверьте Eyepatch (eyepatch.stanford.edu). Это должно помочь вам на этапе исследования, предоставляя различные возможные фильтры для сегментации.

0
14.12.2008 17:29:43

Альтернативой заливке является алгоритм связанных компонентов . Так,

  1. Дешево классифицировать ваши пиксели. например, разделить пиксели в цветовом пространстве.
  2. Запустите cc, чтобы найти капли
  3. Сохраните капли значительного размера

Этот подход широко используется в подходах раннего видения. Например, в основной статье « Blobworld: система индексации и поиска изображений на региональной основе ».

0
18.02.2009 09:52:19