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

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

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

Ответы [ 5 ]

3 голосов
/ 10 декабря 2008

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

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

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

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

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

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

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

2 голосов
/ 10 декабря 2008

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

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

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

0 голосов
/ 18 февраля 2009

Альтернативой заливке является алгоритм connnected-components . Итак,

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

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

0 голосов
/ 14 декабря 2008

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

0 голосов
/ 10 декабря 2008

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

  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-объектов, выбор случайных точек в этом порядке может быть достаточным. Недостатком является то, что вы можете пропустить полезный, но маленький шарик.

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