Различать объекты? - PullRequest
       4

Различать объекты?

2 голосов
/ 04 февраля 2011

Я хочу идентифицировать мяч на картинке.Мне кажется, что я использую алгоритм распознавания краев sobel, с помощью которого я могу обнаруживать круглые объекты на изображении.

Но как мне различать разные объекты?Например, на одной картинке есть шарик для ног, а на другой - изображение луны ... как определить, какой объект был обнаружен.

Когда я использую свой алгоритм, я получаю мяч в обоих случаях.,Есть идеи?

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

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

Но ваша основная проблема - классификация - сортировка объектов на изображении по разным классам.

Для этого вам на самом деле не нужна нейронная сеть, вы можете просто попробовать сыграть с ближайшим соседом. Его функции немного похожи на нейронные сети, так как вы можете дать ему несколько эталонных изображений, где вы скажете системе, что там можно увидеть, и она оптимизирует себя до лучших средних значений для каждого обнаруженного вами атрибута. Этим вы получаете словарь кластеров для различных типов объектов.

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

Таким образом, в основном вам нужно заглянуть внутрь самих объектов, и вы можете попытаться сравнить их среднее значение цвета или значение в градациях серого или контраст внутри объекта (у луны в основном будут значения среднего серого, тогда как футбольный мяч состоит из черного и белые части)

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

Итак, что вам нужно сделать в первую очередь:

  1. Найдите несколько атрибутов, которые помогут вам различать различные круглые объекты (при условии, что они уже разделены)
  2. Реализуйте что-нибудь, чтобы получить эти значения из изображения круглого объекта (который, конечно, уже сегментирован, поэтому имеет фон 0)
  3. Создайте систему, в которую вы вводите несколько изображений, и их класс, чтобы иметь контролируемую систему обучения, и подайте в нее несколько изображений каждого типа (есть много реализаций этого онлайн)

Теперь ваша система работает и вы можете дать ей другие объекты для классификации.

  1. Для этого вам нужно сегментировать объекты на изображении, т.е. Edge-фильтры или преобразование Хафа
  2. Для каждого из сегментированных объектов в изображении дайте ему пройти через вашу систему классификации, и он должен сказать вам, к какому классу (типу объекта) он принадлежит ...

Надеюсь, это поможет ... если нет, пожалуйста, продолжайте спрашивать ...

1 голос
/ 04 февраля 2011

Когда вы применяете алгоритм обнаружения ребер, вы теряете информацию .

Таким образом, луна и шар одинаковы. Луна имеет другой цвет, другую текстуру ... Вы можете использовать эту информацию, чтобы различать, какой объект был обнаружен.

0 голосов
/ 04 февраля 2011

Это обсуждалось ранее. Посмотрите на этот вопрос . Подробнее здесь и здесь .

0 голосов
/ 04 февраля 2011

Это вопрос по ИИ.

Если вы думаете об этом, то вы знаете, что это шар, а не луна, потому что вы видели много шаров и лун в своей жизни.
Итак, вам нужно научить программу, что такое шар и что такое луна. Дайте ему какой-нибудь словарь или что-то в этом роде.

Конечно, проблема со словарем заключается в том, что для сопоставления объекта со всеми объектами в словаре потребуется время.

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

Вам придется немного прочитать об этом, решить, что за нейронная сеть и ее архитектура.

После того, как вы это осуществите, это станет легко. Вы просто даете ему много картинок для изучения (нейронные сети получают вектор в качестве входных данных, поэтому вы можете дать ему полную картину).
Для каждой картинки, которую вы даете, вы говорите, что это такое. Таким образом, вы даете это как 20 различных изображений луны, 20 различных изображений шара. После этого вы говорите ему учиться (обычно встроенная функция).

Нейронная сеть изучит данные, которые вы ей предоставили, и научится различать 2 объекта.

Позже вы можете использовать эту сеть, которой вы учили, дать ей изображение, и это будет знак того, что он думает, например, 30% мяч, 85% луна.

...