Обработка изображений: улучшение алгоритма распознавания банки Coca-ColaC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Обработка изображений: улучшение алгоритма распознавания банки Coca-Cola

Сообщение Anonymous »

Одним из самых интересных проектов, над которыми я работал за последние пару лет, был проект по обработке изображений. Целью была разработка системы, позволяющей распознавать банки Coca-Cola (обратите внимание, что я подчеркиваю слово «банки», через минуту вы поймете, почему). Ниже вы можете увидеть образец, в котором банка распознается в зеленом прямоугольнике с масштабированием и вращением.
Изображение

Некоторые ограничения проекта:
  • Фон может быть очень шумным.
  • can может иметь любой масштаб, поворот или даже ориентацию. (в разумных пределах).
  • Изображение может иметь некоторую размытость (контуры могут быть не совсем прямыми).
  • Может быть кока- На изображении бутылки с колой, и алгоритм должен обнаруживать только банку!
  • Яркость изображения может сильно различаться (поэтому полагаться нельзя" слишком много» при определении цвета).
  • Банка может быть частично скрыта по бокам или посередине и, возможно, частично скрыта за бутылкой.
  • На изображении вообще не могло быть может, и в этом случае приходилось ничего не находить и писать об этом сообщение.

    Таким образом, вы можете столкнуться с такими сложными вещами (в данном случае мой алгоритм полностью провалится):
    Изображение

    Я работал над этим проектом некоторое время назад, и мне было очень весело делать это, и у меня было достойная реализация. Вот некоторые подробности моей реализации:
    Язык: выполнено на C++ с использованием библиотеки OpenCV.
    Предварительно -обработка: для предварительной обработки изображения, т. е. преобразования изображения в более необработанную форму для передачи алгоритму, я использовал 2 метода:
    • < li>Изменение цветовой области с RGB на HSV и фильтрация на основе «красного» оттенка, насыщенности выше определенного порога, чтобы избежать оранжевых цветов, и фильтрация низкого значения, чтобы избежать темных тонов. Конечным результатом было двоичное черно-белое изображение, где все белые пиксели представляли собой пиксели, соответствующие этому порогу. Очевидно, что в изображении по-прежнему много мусора, но это уменьшает количество измерений, с которыми вам приходится работать.
      Изображение
    • Фильтрация шума с использованием медианной фильтрации (взятие медианного значения пикселя всех соседей и замена пикселя этим значением) для уменьшения шума.
    • Использование фильтра Canny Edge Detection Filter для получения контуров всех элементов после двух предшествующих шагов.
      Изображение
    Алгоритм: Сам алгоритм, который я выбрал для этой задачи, был взят из этой замечательной книги по извлечению признаков и называется «Обобщенный». Преобразование Хафа (сильно отличается от обычного преобразования Хафа). По сути, там говорится о нескольких вещах:
  • Вы можете описать объект в пространстве, не зная его аналитического уравнения (как в данном случае).
  • Он устойчив к деформациям изображения, таким как масштабирование и поворот, поскольку он в основном проверяет ваше изображение на предмет каждой комбинации коэффициента масштабирования и коэффициента поворота.
  • Он использует базу модель (шаблон), которую «обучит» алгоритм.
  • Каждый пиксель, оставшийся в контурном изображении, будет голосовать за другой пиксель, который предположительно будет центром (с точки зрения гравитации) вашего объект, основываясь на том, что он узнал из модели.
В конечном итоге вы получаете тепловую карту голосов, например здесь все пиксели контура банки будут голосовать за ее гравитационный центр, поэтому у вас будет много голосов в одном пикселе, соответствующем центру, и вы увидите пик на тепловой карте, как показано ниже:
Изображение

Как только вы это сделаете, появится простой порог Эвристика на основе - может дать вам местоположение центрального пикселя, из которого вы можете получить масштаб и поворот, а затем построить вокруг него маленький прямоугольник (окончательный масштаб и коэффициент поворота, очевидно, будут относительно вашего исходного шаблона). По крайней мере теоретически...
Результаты: хотя этот подход работал в основных случаях, в некоторых областях его явно не хватало:
  • Это очень медленно! Я недостаточно подчеркиваю это. На обработку 30 тестовых изображений понадобился почти целый день, очевидно потому, что у меня был очень высокий коэффициент масштабирования для вращения и перемещения, так как некоторые банки были очень маленькими.
  • Это было вполне терялись, когда на изображении были бутылки, и по какой-то причине почти всегда находили бутылку вместо банки (возможно, потому, что бутылки были больше, следовательно, имели больше пикселей, а значит, больше голосов)
  • Нечеткие изображения тоже были бесполезны, поскольку голоса попадали в пиксели в случайных местах вокруг центра, что заканчивалось очень зашумленной тепловой картой.
  • Инвариантность в перемещении и вращении была достигнута, но не в ориентации, то есть банка, которая не была направлена ​​прямо в объектив камеры, не была распознана.
Как мне улучшить свои конкретные< /strong> алгоритм, использующий исключительно функции OpenCV, для решения четырех конкретных упомянутых проблем?

Подробнее здесь: https://stackoverflow.com/questions/101 ... ecognition
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обработка изображений: улучшение алгоритма распознавания банки Coca-Cola
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Стратегии для добавления банки в обстановку класса банки Springboot после
    Anonymous » » в форуме JAVA
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Последняя версия cola.js и d3
    Anonymous » » в форуме Javascript
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Предварительная обработка изображений для оптического распознавания символов (pytesseract)
    Anonymous » » в форуме Python
    0 Ответы
    119 Просмотры
    Последнее сообщение Anonymous
  • Предварительная обработка изображений в Python для оптического распознавания символов
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»