Дилемма об алгоритме обрезки изображения - возможно ли это? - PullRequest
6 голосов
/ 18 октября 2008

Я создаю веб-приложение с использованием .NET 3.5 (ASP.NET, SQL Server, C #, WCF, WF и т. Д.) И столкнулся с серьезной дилеммой проектирования. Это, между прочим, унифицированный проект, но все, что я разрабатываю, зависит от меня.

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

В идеале я хотел бы, чтобы система была полностью автоматизирована. Но я думаю, я не могу все по-своему. Кроме того, мои навыки в том, что я упомянул выше (.NET 3.5, SQL Server, AJAX, веб-дизайн), в отличие от C ++, но я был бы открыт для любого решения, просто чтобы увидеть возможность.

Я также нашел этот патент: Патент США 7034848 - Система и способ автоматической обрезки графических изображений

Спасибо

Ответы [ 8 ]

2 голосов
/ 22 октября 2008

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

Эта статья Альта и Джонса объясняет, как она работает и как ее можно оптимизировать.

Хотя это C ++, вы, возможно, захотите взглянуть на библиотеки обработки изображений, предоставляемые проектом OpenCV , которые включают в себя код для обучения и использования каскадов Хаара. Для обучения системы вам понадобится набор изображений автомобилей и других автомобилей!

2 голосов
/ 19 октября 2008

Это одна из проблем, которую нужно было решить, чтобы завершить DARPA Grand Challenge . У видео Google есть отличная презентация от руководителя проекта , в которой он рассказывает о том, как они подошли к своему решению и как к нему подошли другие команды. Соответствующая часть начинается около 19:30 видео, но это отличный разговор, и все это стоит посмотреть. Надеюсь, это даст вам хорошую отправную точку для решения вашей проблемы.

2 голосов
/ 19 октября 2008

То, о чем вы говорите, является проблемой открытого исследования или даже несколькими проблемами исследования. Одним из способов решения этой проблемы является сегментация изображения. Если вы можете с уверенностью предположить, что на изображении присутствует один интересующий вас объект, вы можете попробовать алгоритм сегментации по фигуре. Таких алгоритмов много, и ни один из них не идеален. Обычно они выводят маску сегментации: двоичное изображение, где фигура белая, а фон черный. Затем вы найдете ограничительную рамку фигуры и будете использовать ее для обрезки. Следует помнить, что ни один из существующих алгоритмов сегментации не даст вам того, что вы хотите, 100% времени.

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

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

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

0 голосов
/ 18 октября 2008

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

Более того, я наткнулся на несколько сайтов с 3d-моделями автомобилей. Я всегда мог использовать это, воткнуть в 3d-модель и визуализировать.

С трехмерной моделью было бы легче работать, с реальной фотографией намного сложнее. Это сосет: (

0 голосов
/ 18 октября 2008

Начните с анализа изображений самостоятельно. Таким образом, вы можете сформулировать критерии для соответствия автомобиля. И вы можете определить, что вы не можете сопоставить.

Если все автомобили имеют одинаковый фон, например, это не должно быть таким сложным. Но в твоем примере машина на улице. Там могут быть припаркованные автомобили. Должны ли они быть признаны?

Если у вас есть доступ к MatLab, вы можете протестировать фильтры распознавания образов с помощью специализированного программного обеспечения, такого как PRTools .

Когда я учился (давным-давно :) Я использовал Khoros Cantata и обнаружил, что краевой фильтр может значительно упростить изображение.

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

0 голосов
/ 18 октября 2008

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

С учетом сказанного, если вы можете сделать предположений вроде: будет присутствовать только 1 объект, то вы можете использовать алгоритмы распознавания изображений .
Теперь, когда я об этом думаю. Недавно я прочитал лекцию об искусственном интеллекте в роботах и ​​в методах исследования роботов. Их исследования касались языкового взаимодействия, эволюции и распознавания языка . Но для того, чтобы сделать это, им также потребовалось несколько простых алгоритмов распознавания изображений для обработки воспринимаемой среды. Одним из приемов, которые они использовали, было создание трехмерного графика изображения, где x и y, где нормальные оси x и y и ось z были яркостью этой конкретной точки, затем они использовали ту же технику для красно-зеленых значений, и сине-желтый. И вот, у них было что-то (относительно) простое, которое они могли бы использовать, чтобы выбрать объекты из воспринимаемой среды.
(Мне очень жаль, но я не могу найти ссылку на хорошие графики, которые у них были, которые показали, как все это работало).

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

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

Итак, это в основном будет означать, что вы:

  • нужно сделать некоторые предположения, иначе он ужасно потерпит неудачу
  • , вероятно, лучше всего будет использовать технику искусственного интеллекта и, в частности, распознавание изображений
  • может взглянуть на paint.NET и их алгоритм для их magic wand
  • попробуйте использовать тот факт, что на хорошей фотографии будет объект интереса где-то посередине изображения

.. но я не говорю, что это решение вашей проблемы, может быть, можно использовать что-то более простое.

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

0 голосов
/ 18 октября 2008

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

Некоторые проекты, которые делают это, описаны здесь:

http://blogs.zdnet.com/emergingtech/?p=629

0 голосов
/ 18 октября 2008

Если я правильно читаю ... И здесь светит ИИ.

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

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

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