Меню Рубрики

Как сделать компьютерное зрения для движения по черной линии

Технический форум по робототехнике.

  • Список форумовМастерскаяНаши проекты
  • Изменить размер шрифта
  • Версия для печати
  • Магазин
  • Правила
  • Wiki
  • FAQ
  • Регистрация
  • Вход

Компьютерное зрение для движения по линии

Компьютерное зрение для движения по линии

ft-ninja » 09 янв 2012, 19:20

На новогодних каникулах в Москве в Политехническом музее проходили соревнования Каникулы роботов. В этом году я решил выступить в дисциплине Линия проф.

Для слежения за маршрутом я было решено использовать смартфон HTC и алгоритмы компьютерного зрения. И вот, что из этого получилось:

01. Внешний вид робота. Шасси из деталей конструктора fischertechnik. Для управления моторами используются функции контроллера ROBO TX.

02. Картинки с экрана HTC

03. Мой заезд на соревнованиях

В конце робот зацепился за препятствие «Стиральная доска» и до финиша не доехал ) Думаю к следующему разу нужно доработать ходовую часть.

Более подробно о ходе мыслей во время разработки можно почитать тут — \m/.

Робототехника в МБОУ «Гимназия №74»

Страницы сайта

Урок 10 Движение по черной линии

Рассмотрим простейший алгоритм движения по черной линии на одном датчике цвета на EV3.

Данный алгоритм является самым медленным, но самым стабильным.

Робот будет двигаться не строго по черной линии, а по ее границе, подворачивая то влево, то вправо и постепенно перемещаясь вперед.

Алгоритм очень простой: если датчик видит черный цвет, то робот поворачивает в одну сторону, если белый — в другую.

Реализация в среде Lego Mindstorms EV3

В обоих блоках движения выбираем режим «включить». Переключатель настраиваем на датчик цвета — измерение — цвет. В нижней части не забудьте изменить «нет цвета» на белый. Также, необходимо правильно указать все порты.

Не забудьте добавить цикл, без него робот никуда не поедет.

Проверьте. Для достижения лучшего результата попробуйте изменить значения рулевого управления и мощности.

Движение с двумя датчиками:

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


Алгоритм будет следующий:
• Если оба датчика видят белый цвет – двигаемся вперед;
• Если один из датчиков видит белый, а другой черный – поворачиваем в сторону черного;
• Если оба датчика видят черный цвет – мы на перекрестке (например, остановимся).

Для реализации алгоритма нам потребуется отслеживать показания обоих датчиков, и только после этого задавать движение роботу. Для этого будем использовать переключатели, вложенные в другой переключатель. Таким образом, мы опросим сначала первый датчик, а потом, независимо от показаний первого, опросим второй датчик, после чего зададим действие.
Подключим левый датчик к порту №1, правый – к порту №4.

Программа с комментариями:

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

Ссылка на сайт, откуда взята информация, и на котором можно найти еще много интересных объяснений:

Эта же программа для модели NXT:

Изучить программу движения. Запрограммировать робота. Переслать видео тестирования модели

Компьютерное зрение в Fischertechnik ROBO Pro

Компьютерное зрение — возможность обнаруживать и классифицировать объекты — важная составляющая современной робототехники. Благодаря использованию среды ROBO Pro роботы Fischertechnik могут определять цвета, размеры и распознавать образы.

В составе набора первооткрывателя Fischertechnik вместо множества датчиков — видеокамера. А в прилагаемом к конструктору программном обеспечении реализованы элементы машинного зрения.

Fischertechnik ROBO Pro — визуальная среда программирования. Она используется для составления алгоритмов для роботов из конструкторов Fischertechnik. Сегодня мы рассмотрим функции компьютерного зрения, реализованные в ней.

Функции компьютерного зрения поддерживаются в ROBO Pro, начиная с версии 4.х. Видеокамера подключается к USB-разъему контроллера Fischertechnik Robotics TXT или USB-порту компьютера.

Камера используется как многофункциональный датчик для:

  • определения цвета,
  • определения движения,
  • распознавания линий,
  • распознавания геометрических фигур.

Изображения передаются из контроллера TXT на компьютер по USB или по беспроводной связи Wi-Fi. Функции компьютерного зрения работают и в режиме Онлайн, и в режиме Загрузка. Т.е. программа может выполняться на компьютере или в контроллере.

Обладателям контроллеров Fischertechnik прошлых версий ROBO TX и ROBO Interface, не поддерживающих подключение видеокамеры, функции машинного зрения ROBO Pro тоже доступны — для этого подключите камеру к USB-порту компьютера.

Настройка (окно Камера)

Для настройка камеры и функций компьютерного зрения в ROBO Pro используется специальное окно Камера, находящееся на соответствующей закладке.

Установите переключатель Подключение камеры. Варианты:

При подключении к компьютеру выберете используемую камеру. Я подключил камеру Fischertechnik к контроллеру TXT. Для предварительного просмотра видео, поступающего с камеры, установите одноименный флажок.

Конечно, это окно не для приветствий. Здесь настаиваются функции машинного зрения, реализованные в ROBO Pro. Возвращаемые ими параметры используются в программе для управления роботом.

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

Для изменения размера и положения области определения функции используется меню Рисование – Правка.

Для настройки параметров функции используется контекстное меню (вызывается правой кнопкой мыши на области функции).

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

Создавать лишние функции, неиспользуемые в программе, не нужно.

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

Дисплей камеры

Изображение, поступающее с видеокамеры, можно добавить в пользовательский интерфейс или даже на блок-схему. Для этого используйте специальный элемент интерфейса – Дисплей камеры в группе Элементы интерфейса.

Для изменения размеров элемента воспользуйтесь меню Рисование — Правка.

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

Дисплей камеры удобно использовать при конструировании дистанционно управляемых роботов.

Программирование функций компьютерного зрения

После настроек функций компьютерного зрения в окне Камера приступайте к созданию программы.

Для доступа к результатам работы функций компьютерного зрения на программном уровне используется специальный программный элемент Камера, находящийся в группе Ввод и вывод.

В настройках элемента Камера выберете имя функции и возвращаемое значение. Созданные функции автоматически появляются в списке. Я создал функцию определения цвета с именем Color и могу обратиться к четырем возвращаемым ей значениям (R,G,B, BW).

Распознавание цвета

Распознавание цвета — функция компьютерного зрения, предназначенная для вычисления усредненного цвета графического поля, ограниченного прямоугольным контуром в видеокадре. Для вычисления цвета используются все пиксели расположенные внутри контура, ограничивающего поле. Размеры и положение ограничивающего контура можно изменить с помощью меню Рисование – Правка.

Результаты, которые возвращает функция Распознавание цвета представлены в виде четырех параметров: R, G, B и BW, где R – яркость красного цвета, G – зеленого цвета, B – голубого цвета и BW – общая яркость соответственно. Все параметры измеряются в процентах в диапазоне от 0 до 100, где 0% – темный (черный) цвет, а 100% – яркий (белый) цвет.

Видимый цвет зависит от освещения, но в ROBO Pro реализована система автоматической коррекции цвета в зависимости от условий освещения. Лучше всего она работает при незначительном количестве белого цвета в поле зрения видеокамеры.

Для демонстрации работы функции распознавания цвета, я собрал простую модель.

Решаем абстрактную задачу: включать светодиод, если в исследуемой области уровень красного более 55%.

Блок-схема в ROBO Pro:

Тестируем. Работает. Светодиод загорается, когда значение красного более 55 %, и гаснет в противном случае.

В ROBO Pro реализована автокоррекция по освещению, но результат варьируется в зависимости от освещения. Для уменьшения влияния внешней засветки можно использовать конструкцию, защищающую камеру и исследуемый объект от лишнего света, например как у робота-сортировщика Fischertechnik из набора «ЭлектроПневматика».

Детектор движения

Функция компьютерного зрения Детектор движения реагирует на движение в заданной области видеокадра. Эту функция используется для распознавания движущихся объектов и жестов.

Размеры и положение области кадра изменяются с помощью меню Рисование – Правка. Также в окне настроек укажите уникальное имя.

Для настройки алгоритма детектирования движения, используются два параметра: Порог контрастности и Порог площади. Установите их.

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

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

Установим параметры, предлагаемые по умолчанию: имя функции — Движение, порог площади — 10%, порог контрастности — 10%.

В блок-схему функция передает два параметра: С и A.

С – усредненное изменение контрастности. Для расчета этого значения используются только пиксели, изменение яркости которых превышает установленный Порог контрастности.

A – площадь, занимаемая пикселями, у которых изменение яркости превышает установленный Порог контрастности. Причем, если эта площадь меньше заданного Порога площади, то параметр С будет равен нулю.

Для определения движения в заданном участке кадра требуется сравнить возвращаемый параметр C с нулем.

Наблюдайте за изменением параметров C и A в режиме предварительного просмотра.

Не меняя модель, чуть-чуть видоизменим программу. Я создал функцию Движение. Установим для блока Камера обращение ее параметру C, а в блоке Ветвь зададим сравнение с нулем.

Запускаем программу. Камера работает в качестве датчика движения: при обнаружении движения светодиод загорается, если движения нет — гаснет.

Движение по линии

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

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

Размеры и положение измерительной шкалы изменяется с помощью меню Рисование – Правка.

Параметры Ширина минимальная и Ширина максимальная используются для ограничения допустимого размера ширины измеряемой линии.

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

Единицы, в которых измеряются эти два параметра, соответствуют шкале, размещенной в видеокадре.

Для правильного выбора значений параметров Ширина минимальная и Ширина максимальная используется функцию предварительного просмотра. Включите камеру, определите точный размер маршрутной линии по шкале в видеокадре. Минимальную ширину установите на 20% меньше, а максимальную на 50% больше.

Параметр Контрастность минимальная определяет, насколько яркость линии должна отличаться от яркости фона. Черная линия на абсолютно белом фоне соответствует контрастности 100%. Не забывайте, что при движении мобильных роботов могут возникать ситуации, когда контрастность существенно снижается в результате появления бликов и отраженного света.

Параметр Количество сегментов определяет, сколько линий будет различать функция. Максимум – 5 линий, для каждой из которых будет создан собственный набор измеряемых параметров. Результаты измерений линий будут отсортированы в порядке появления линий на измерительной шкале в видеокадре слева-направо.

Переключатель Инвертировать позволяет переключить алгоритм на обнаружение светлых линий на черном фоне вместо темных линий на белом фоне.

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

Переключатель Точность измерения ширины и координаты позволяет указать, с какой точностью будет выполняться определение линии. Чем выше точность, тем больше вычислений и времени требуется для решения задачи.

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

Функция Обнаружение линии возвращает в пользовательскую программу от четырех до семи параметров с результатами для каждой обнаруженной линии в зависимости от выбранного режима. Наиболее важные возвращаемые параметры – Контрастность (Quality) и Координата (Pos).

Читайте также:  С точки зрения бихевиоризма психология должна быть наукой о

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

Параметр Координата (Pos) – это координата центра обнаруженной линии в единицах измерительной шкалы.

Ширину обнаруженной линии можно узнать, обратившись к параметру Ширина (Width), который содержит ширину линии, измеренную в единицах измерительной шкалы.

Дополнительно в зависимости от положения переключателя Распознавание цвета в пользовательской программе могут быть доступны следующие параметры: общая яркость B/W, и яркости трех основных цветов по отдельности R (красный), G (зеленый) и B (голубой).

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

Простейший алгоритм движения по линии может выглядеть так:

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

Широкие возможности функции компьютерного зрения Движение по линии продемонстрированы в программе для робота-разведчика, которая есть на диске, входящем в комплект набора первооткрывателя Fischertechnik.

Обнаружение геометрической фигуры

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

Включите режим предварительного просмотра, поместите в кадр шарик, наблюдайте.

Эта функция используется в стандартном алгоритме робота-футболиста Fischertechnik. Функция возвращает координаты обнаруженного объекта, что позволяет создать робота, который играет в футбол обычным мячиком, а не помеченным ИК-передатчиком.

Размеры и положение анализируемой зоны, задаются с помощью меню Рисование – Правка. Также в окне настроек укажите уникальное имя и параметры, влияющие на работу алгоритма.

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

Параметры Минимальный / Максимальный размер ограничивают допустимый размер фигуры, которую требуется обнаружить. Единицы измерения соответствуют сетке, размещенной в видеокадре. Рекомендации по установке этих параметров такие же, как и для функции Движение по линии.

Для правильного выбора значений для параметров Минимальный / Максимальный размер используется предварительный просмотр. Как и в случае с функцией Движение по линии рекомендуется минимальное значение уменьшить на 20% от фактического, а максимальное — увеличить на 50%.

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

Функция Обнаружение геометрической фигуры возвращает в пользовательскую программу четыре параметра с результатами работы алгоритма функции для обнаруженной фигуры. Главные – Контрастность (Quality) и Координата (X и Y).

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

Параметр Координата (Pos) – это координата центра обнаруженной фигуры в единицах измерительной сетки.

Параметр Размер (R) — это диаметр окружности, описывающей обнаруженную фигуру, измеренный в единицах измерительной сетки.

Зона для исключения из обработки

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

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

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

Где купить программу ROBO Pro

Купить программное обеспечение ROBO Pro, конструктор Fischertechnik Robotics TXT Discovery set, а также другие наборы этой марки можно у официального дилера Fischertechnik в России — компании ПАКПАК. Магазин осуществляет доставку в регионы России, а также по странам СНГ и бывшего СССР.

Программа ROBO Pro стоит 1910 рублей, также она входит в комплект конструктора Fischertechnik Robotics 524328 TXT Discovery set, который стоит 28500 рублей.

ТЕХНОЛОГИИ, ИНЖИНИРИНГ, ИННОВАЦИИ

Измеритель диаметра, измеритель эксцентриситета, автоматизация, ГИС, моделирование, разработка программного обеспечения и электроники, БИМ

Как видят беспилотные автомобили: алгоритмы и методы

Автоиндустрия считается «первопроходцем» в области применения технологий машинного зрения и самым крупным их потребителем. По данным аналитиков, автомобильная индустрия формирует 23% рынка продуктов компьютерного зрения в Германии. А по данным VDMA, для Европы эта цифра составляет 21%. Поэтому не удивительно, что алгоритмы машинного зрения постепенно начали использоваться в самих автомобилях, а не только на этапах их производства. В настоящее время они применяются в технологиях автопилотирования и распознавания полос. В сегодняшнем материале мы начнем говорить о том, что «видят» автомобили и как они это делают, используя базовые алгоритмы и методы в качестве отправной точки цикла рассказов.

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

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

Стереопара позволяет идентифицировать пары сопряженных точек в пространстве, на основании которых строится карта расстояний. На ней дистанция до объекта обозначается оттенками серого — чем дальше, тем темнее. Пример такого изображения есть в работе Райнхарда Клетте (Reinhard Klette) из Оклендского технологического университета. Когда карта построена, производится анализ движения объектов (скорость, траектория) — это нужно для определения вероятных конфликтов.

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

Из простых методов определения сдвига выделяют метод фазовой корреляции — это вычисление преобразования Фурье для обоих изображений и нахождение их свертки. Также применяется поблочное сравнение: находится сдвиг, минимизирующий норму разности изображений в окне.

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


Стереопара, заснятая двумя камерами / фото cobravictor / PD

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

Этот метод хорошо определяет маленькие сдвиги, в рамках которых картинка похожа на свое линейное приближение. Но есть и другие подходы: метод Гуннара Фарнебака, который рассчитывает поток для всего изображения сразу, и алгоритм Хорна — Шранка, основанный на гипотезе об ограничении изменения проекций векторов оптического потока.

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

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

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

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

Отметим, что есть и другие способы определения расстояния до препятствий и избегания столкновений. Их появление и реализация станут возможными при распространении интернета вещей. Эти алгоритмы работают по-другому — их авторы предлагают использовать не камеры, а системы связи «автомобиль-автомобиль» и «автомобиль-инфраструктура».

DRCA-алгоритм

Алгоритм Decentralized Reactive Collision Avoidance предполагает, что если автомобили находятся на большом расстоянии друг от друга, они следуют по намеченным маршрутам. Если машины сближаются, то система выполняет маневр по избеганию столкновения. Блок-схема выглядит следующим образом:

Для определения того, столкнутся ли автомобили, DRCA использует концепцию «конуса столкновения» (collision cone), описываемого векторами скорости. Если угол β между вектором относительного положения r ⌄ ij и вектором относительной скорости v ⌄ ij больше или равен α — углу между вектором относительного положения и концом конуса столкновения — то конфликта маршрутов нет.

/ Конус столкновения — это угол между пунктирными линиями. Если вектор v оказывается в этой зоне, то автомобили «конфликтуют»

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

Метод искусственных силовых полей

Может применяться в комбинации с DRCA. Он основывается на вычислении искусственных силовых полей. Автомобили — это заряженные частицы. Частицы с одинаковым зарядом отталкиваются, а с противоположным — притягиваются. Поэтому автомобилям назначаются отрицательные заряды, а их желаемым маршрутам — положительные. Силовые векторы вычисляются на основании этих зарядов, а затем используются для определения направления движения.

Для оценки векторов силы притяжения применяются несколько способов. Yunior I. Cruz из Вашингтонского университета в своей работе описывает прием, который также был предложен для прокладывания маршрута самолетов с неизменяемой геометрией крыла.

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

Распознают полосы

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

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

Далее проводится выделение полезной информации. Дело в том, что система отмечает все линии, которые удовлетворяют заданным условиям. Как это выглядит, вы можете увидеть в работе Люка Флетчера (Luke Fletcher) по ссылке.

К решению этой проблемы компании подходят по-разному. Например, в Suzuki используют проективное преобразование. Камера проецирует две линии, которые сходятся в точке перспективы. Система учитывает только те полосы, которые параллельны спроецированным. Однако это не спасает от выделения трещин на асфальте, которые идут вдоль дороги.

Еще один способ определения полос получил название «Птичий глаз» (Bird’s Eye) и описан в книге «Mathematical Morphology and Its Application to Signal and Image Processing». Алгоритм начинает работу с того, что преобразует изображение в ортографическую проекцию, как бы поворачивая изображение вертикально. После чего также происходит выделение полос и вычисляются поля расстояния, например, с помощью Евклидова преобразования.

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

Алгоритм распознавания с построением бинарных изображений и кодом можно найти по ссылке на GitHub. Представленный проект является частью программы Udacity Self-Driving Car Nanodegree. Еще один пример с кусками кода из библиотеки алгоритмов OpenCV вы можете найти здесь.

Автор: Алина Тестова

Понравилась статья? Тогда поддержите нас, поделитесь с друзьями и заглядывайте по рекламным ссылкам!

8 примеров использования компьютерного зрения

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

1. Беспилотные автомобили

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

Читайте также:  Если зрение 5 какие очки нужны

Продукты компании NVIDIA, которая уже сделала большие шаги в области глубинного обучения, используются во многих беспилотных автомобилях. Например, суперкомпьютер NVIDIA Drive PX 2 уже служит базовой платформой для беспилотников Tesla, Volvo, Audi, BMW и Mercedes-Benz.

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

NVIDIA и Audi планируют в 2020 году выпустить на трассу первую полностью автономную машину, которая будет использовать новый суперкомпьютер Xavier AI.

Генеральный директор NVIDIA Джен-Сан Хуанг представляет ИИ Co Pilot. Фото: NVIDIA

NVIDIA также представила искусственный интеллект Co Pilot, который способен распознавать лица, движения губ, направление взгляда и язык — из-за чего водить автомобиль станет удобнее. Так, например, благодаря распознаванию движения губ компьютер будет лучше понимать произносимые слова, а способность улавливать направление взгляда (анализ глаз, лица и положения головы) поможет не только определить, не заснул ли водитель, но и спасет в трудных ситуациях, когда человек не замечает опасность — например, приближающегося сзади по центру дороги мотоциклиста. Что касается считывания движения губ, то сейчас сети, использующие глубинное обучение, способны распознавать речь с точностью до 95%, в то время как человек распознает ее с точностью в 3%. Сейчас эта невероятная способность используется для улучшения распознавания речи в автомобиле, а именно в шумных ситуациях.

2. Персонализация

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

Так, в концепт-каре Chrysler Portal есть специальные камеры, расположенные за рулем. С помощью компьютерного зрения автомобиль может мгновенно определять личность водителя еще до того, как тот сядет в машину, и загружать его любимые музыкальные композиции, настроить кресло в нужное положение, отрегулировать температуру и так далее. Машина умеет распознавать не только водителя, но и пассажиров, и точно так же автоматически регулировать сиденья и температуру и даже раскрывать шумоподавляющие «коконы», в которых можно послушать любимую музыку. Такие способности не только понравятся владельцам автомобилей, но и смогут сильно повлиять на райдшеринговые сервисы вроде Uber и Lyft.

3. Интерфейсы

Технологии отслеживания движения глаз с помощью компьютерного зрения используется не только в игровых ноутбуках, но и в обычных, и корпоративных компьютерах, для того чтобы ими могли управлять люди, которые не могут воспользоваться руками. Tobii Dynavox PCEye Mini представляет собой устройство размером с шариковую ручку, которое станет идеальным и незаметным аксессуаром для планшетов и ноутбуков. Также эта технология отслеживания движения глаз используется в новых игровых и обычных ноутбуках Asus и смартфонах Huawei.

Тем временем продолжает развиваться жестовое управление (технология компьютерного зрения, которое может распознавать особые движения руками). Теперь оно будет использоваться в будущих автомобилях BMW и Volkswagen.

Новый интерфейс HoloActive Touch позволяет пользователям управлять виртуальными 3D-экранами и нажимать кнопки в пространстве. Можно сказать, что он представляет собой простую версию самого настоящего голографического интерфейса Железного человека (он даже точно так же реагирует легкой вибрацией на нажатие элементов). Благодаря таким технологиям, как ManoMotion, можно будет легко добавить жестовое управление практически в любое устройство. Причем для получения контроля над виртуальным 3D-объектом с помощью жестов ManoMotion использует обычную 2D-камеру, так что вам не понадобится никакое дополнительное оборудование.

Устройство eyeSight’s Singlecue Gen 2 использует компьютерное зрение (распознавание жестов, анализ лица, определение действий) и позволяет управлять с помощью жестов телевизором, «умной» системой освещения и холодильниками.

Краудфандинговый проект Hayo, пожалуй, является самым интересным новым интерфейсом. Эта технология позволяет создавать виртуальные средства управления по всему дому — просто подняв или опустив руку, вы можете увеличить или уменьшить громкость музыки, или же включить свет на кухне, взмахнув рукой над столешницей. Все это работает благодаря цилиндрическому устройству, использующему компьютерное зрение, а также встроенную камеру и датчики 3D, инфракрасного излучения и движения.

4. Бытовые приборы

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

Элегантное устройство FridgeCam от Smarter крепится к стенке холодильника и может определять, когда истекает срок годности, сообщать, что именно находится в холодильнике, и даже рекомендовать рецепты блюд из выбранных продуктов. Устройство продается по неожиданно доступной цене — всего за $100.

5. Цифровые вывески

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

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

6. Смартфоны и дополненная реальность

Многие говорили об игре Pokemon Go как о первом массовом приложении с элементами дополненной реальности (AR). Однако как и другие приложения, пытающиеся запрыгнуть на AR-поезд, эта игра больше использовала GPS и триангуляцию, чтобы у пользователей возникло ощущение, что объект находится прямо перед ними. Обычно в смартфонах практически не используются настоящие технологии компьютерного зрения.

Однако в ноябре Lenovo выпустила Phab2 — первый смартфон с поддержкой технологии Google Tango. Эта технология представляет собой комбинацию датчиков и ПО с компьютерным зрением, которая может распознавать изображения, видео и окружающий мир в реальном времени с помощью линзы фотокамеры.

На выставке CES Asus впервые представила ZenPhone AR — смартфон с поддержкой Tango и Daydream VR от Google. Смартфон не только может отслеживать движения, анализировать окружение и точно определять положение, но и использует процессор Qualcomm Snapdragon 821, который позволяет распределять загрузку данных компьютерного зрения. Все это помогает применять настоящие технологии дополненной реальности, которые на самом деле анализируют обстановку через камеру смартфона.

Позже в этом году выйдет Changhong H2 — первый смартфон со встроенным молекулярным сканером. Он собирает свет, который отражается от объекта и разбивается на спектр, и затем анализирует его химический состав. Благодаря программному обеспечению, использующему компьютерное зрение, полученная информация может использоваться для разных целей — от выписки лекарств и подсчета калорий до определения состояния кожи и расчета уровня упитанности.

15 сентября в Москве состоится конференция по большим данным Big Data Conference. В программе — бизнес-кейсы, технические решения и научные достижения лучших специалистов в этой области.

Приглашаем всех, кто заинтересован в работе с большими данными и хочет их применять в реальном бизнесе.

Следите за Big Data Conference в Telegram и на Facebook.

В основном компьютерное зрение используется в камерах — так появляются все более умные камеры с новыми способностями, превышающими человеческие возможности.

Компания FLiR Systems выпустила несколько камер с датчиками тепла. Устройства FLIR Duo и Duo R внешне напоминают GoPro или другую экшн-камеру. Их можно прикрепить к любому дрону и отслеживать тепло в различных деловых и бытовых ситуациях — например, можно обнаружить утечку в изоляции крыши или вести воздушную топографическую съемку полей и нефтяных месторождений.

Даже Alexa от Amazon, Google Home и прочие цифровые помощники и роботы, доступные на рынке, вроде LG Hub и Kuri от Mayfield Robotics, обладают базовыми навыками компьютерного зрения и могут определить, кто с ними разговаривает, или же выгнать собаку с дивана.

А если серьезно, то компания ITRI разработала систему Intelligent Vision System, которая использует глубинное обучение и компьютерное зрение, чтобы роботы могли различать объекты разного размера (фигурки, чашки) и определять их положение. Распознав объект, робот сможет взять его и принести в нужное место. Такие навыки отлично бы пригодились для обслуживания столиков в ресторане или для игры в шахматы.

Алгоритм плавного движения по черной линии 2. Математика

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

А чтобы заставить робота считать, необходимо сначала самим определиться, как это делается.

Человек видит черную линию и ее четкую границу. Датчик освещенности работает несколько иначе.

Именно это свойство датчика освещенности – невозможность четко различить границу белого и черного – мы и будем использовать для расчета скорости движения.

Во-первых, введем понятие “Идеальная точка траектории”.

Показания датчика освещенности колеблются в диапазоне от 20 до 80, чаще всего на белом цвете показания равны примерно 65, на черном порядка 40.

Идеальная точка – условная точка примерно посередине белого и черного цветов, следуя которой робот будет перемещаться вдоль черной линии.

Здесь принципиально расположение точки – между белым и черным. Задать ее точно на белом или черном не получится по математическим причинам, почему – будет ясно позднее.

Эмпирическим путем мы вычислили, что идеальную точку можно высчитать по следующей формуле:

Дальше происходит следующее.

Робот должен двигаться строго по идеальной точке. Если случается отклонение в какую-либо сторону, робот должен вернуться к этой точке.

Составим математическое описание задачи.

Рассчитать мощность вращения каждого из двигателей с учетом степени отклонения от идеальной точки.

Исходные данные.

Текущие показания датчика освещенности.

Результат.

Мощность вращения мотора В.

Мощность вращения мотора С.

Решение.

Рассмотрим две ситуации. Первая: робот отклонился от черной линии в сторону белого.

В этом случае робот должен увеличить мощность вращение мотора В и уменьшить мощность мотора С.

В ситуации, когда робот заезжает на черную линию, все наоборот.

Чем сильнее робот отклоняется от идеальной точки, тем быстрее ему надо к ней вернуться.

Грамотно это называется ПИД-регулятор.

Но создание такого регулятора – задача довольно непростая, да и не всегда он требуется в целом виде.

Поэтому мы решили ограничиться только П-регулятором, адекватно реагирующем на отклонение от черной линии.

На языке математики это будет записано так:

где Hb и Hc – итоговые мощности моторов B и C соответственно,

Hбазовая – некая базовая мощность моторов, определяющая скорость движения робота. Подбирается экспериментально, в зависимости от конструкции робота и резкости поворотов.

Iтек – текущие показания датчика освещенности.

I ид – рассчитанная идеальная точка.

k – коэффициент пропорциональности, подбирается экспериментально.

В третьей части рассмотрим, как это запрограммировать в среде NXT-G.

При написании статьи использованы материалы сайтов:

Как работает компьютерное зрение. Изучаем основные алгоритмы, чтобы овладеть data science

Содержание статьи

Компьютерное зрение — это область науки, которая занимается задачами, связанными с анализом изображений и видео. Можно считать, что во всех них требуется ответить на вопрос, что изображено на картинке. Несмотря на кажущуюся тривиальность вопроса, ответить на него не так просто.

Как стать спецом по анализу данных

Эта статья подготовлена по материалам одного из уроков курса «Машинное обучение и анализ данных», который ты можешь пройти на платформе datasciencecourse.ru. Авторы курса — сотрудники Яндекса, которые доходчиво расскажут обо всех аспектах анализа данных и машинного обучения — от математики и до практического применения в бизнес-процессах. Все, что тебе нужно знать заранее, — это немного математической статистики и основы программирования на Python. Специалисты по data science становятся все более востребованными и получают от 140 тысяч рублей. Спеши вступить в их ряды!

Читатели «Хакера» могут использовать промокод Xakep , чтобы получить 30% скидку при единоразовой оплате. Код действует до 1 февраля 2019 года.

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

Xakep #241. Взлом игр

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

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

Внутриклассовая изменчивость

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

Получается, что даже такую вещь, как стул, сложно описать в терминах форм. Стул — это некое концептуальное понятие: что-то, на чем сидят. Можно представить, как сложно объяснить это понятие инопланетному существу, которое не знает даже, что такое сидеть, и не умеет это делать. Прежде чем научить кого-то находить на картинках стул, было бы неплохо, чтобы оно поняло концепцию «сидеть».

Читайте также:  Столкновение разных точек зрения мнений это

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

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

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

Задачи компьютерного зрения

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

Первый пример — поиск изображений в интернете. Сейчас существует несколько сервисов, которые позволяют искать картинки. Изначально для поиска использовались текстовые запросы. Некоторое время назад в части из таких сервисов появилась возможность поиска по загруженному изображению. От пользователя требуется загрузить картинку, а сервис будет искать похожие на нее изображения в интернете.

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

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

Вот несколько других примеров.

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

Биометрия. Для распознавания людей может использоваться изображение лица, радужная оболочка глаза, отпечатки пальцев. Однако в основном компьютерное зрение занимается распознаванием лиц. С каждым годом эта технология работает все лучше и лучше и находит широкое применение.

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

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

Графические редакторы. Компьютерное зрение позволяет не только распознавать, что изображено на картинке. Оно же дает возможность менять и улучшать изображение. Получается, все, что можно сделать с помощью графического редактора, относится к технологии компьютерного зрения.

3D-анализ. Реконструкция объемных моделей — еще одна задача, решаемая с помощью компьютерного зрения. Например, используя множество изображений, сделанных в данном городе, можно восстановить форму зданий.

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

«Низкоуровневое» зрение

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

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

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

Самая популярная библиотека для решения задач «низкоуровневого» компьютерного зрения — это OpenCV. В ней содержится огромное количество алгоритмов, есть интерфейсы для многих языков программирования, в том числе С++ и Python. Другая известная библиотека — skimage, она активно используется в скриптах на Python. В примерах дальше мы будем применять OpenCV.

Представление изображения в памяти компьютера

Изображение в памяти компьютера кодируется попиксельно, и цвет каждого пикселя в зависимости от используемой модели может быть записан по-разному. Самая простая модель — это RGB, в соответствии с которой тремя числами кодируется яркость пикселей в красном, зеленом и синем каналах. Существуют и другие модели, мы поговорим о них ниже.

Арифметические операции

Итак, картинки — это матрицы чисел. В случае с черно-белыми картинками это матрицы размера высота на ширину картинки. В случае с цветной у матрицы появляется еще одна размерность, чаще всего она равна трем.

В OpenCV используется такое же представление матриц, как в библиотеке NumPy. Это значит, что для них можно использовать стандартные арифметические операции, например сложение.

Однако не все так просто: сложение матриц в NumPy не учитывает переполнение. Для изображений переполнение — это нелогичная операция. Если при сложении двух картинок яркость где-то превысила 255, то, как правило, она должна оставаться равной 255, а не превратиться в 4. Пример ниже показывает, как отличается сложение в NumPy и OpenCV.

Для примера возьмем картинку.

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

Команда cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) будет неоднократно встречаться в дальнейшем. Она используется для преобразования цветовых пространств, в том числе из RGB в серые картинки. После превращения картинки в серую можно прибавить к ней какое-то число.

Такое преобразование эквивалентно увеличению яркости картинки.

Можно не прибавлять, а умножать на некий коэффициент.

Умножение картинки эквивалентно увеличению ее контрастности. Можно попробовать использовать больший коэффициент (например, 1.8 ).

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

Эквилизация гистограммы

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

Гистограмма до эквилизации и после

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

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

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

Пусть для одной картинки известно, где расположен объект, а все остальное пространство занимает фон. Тогда можно помещать второй объект туда, где находится фон. В месте, где первый объект накрывается вторым, будет также использоваться второй объект.

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

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

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

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

Цветовые пространства

Пока что мы говорили только о представлении в RGB, но существуют и другие варианты. Например — HSV.

Компоненты этого пространства — тон (hue), насыщенность (saturation) и значение (value). Это пространство позволяет манипулировать цветом и его насыщенностью по отдельности. Тон обозначает цвет пикселя, он закодирован числом от 0 до 360, как угол на цилиндре. Насыщенность принимает значение 0, если картинка серая.

Если мы работаем с картинкой в HSV, то можем легко сделать ее более насыщенной, умножив соответствующий канал на какой-то коэффициент. Попробуем увеличить насыщенность на 50% (коэффициент 1,5).

Каскады Хаара — детектор лиц

Одна из задач, решаемых наукой о компьютерном зрении, — это детекция лиц. Среди первых методов решения наиболее удачный — это каскады Хаара. Применяя этот метод, из картинки можно вычленять достаточно простые признаки. Для этого необходимо использовать несколько прямоугольников.

Каскады Хаара

Пиксели, попадающие в белый прямоугольник, берутся со знаком «плюс», в черный — со знаком «минус». Все значения суммируются, и получается одно число. Прямоугольники и коэффициенты для них выбираются с помощью алгоритма AdaBoost. У лица имеются некоторые паттерны, и в итоге каскад фильтров такого рода показывает, есть ли внутри него лицо или нет.

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

Сегментация

Задачу сегментации в общем случае решить тоже несложно. Один из способов — отрезать пиксели выше какого-то порога и назначить их объекту, а пиксели ниже порога — фону.

Сегментация изображения

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

Линейная фильтрация изображений

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

Скользящее среднее — свертка

Проще всего объяснить, что такое линейная фильтрация, на примере. Пусть требуется подсчитать среднее в окне 3 × 3 для каждого пикселя. Вычисление среднего можно записать так:

Переписав формулу в следующем виде, можно получить выражение для свертки:

где f — это изображение (двухмерная функция, характеризующая картинку), k, l — координаты пикселя, f — яркость пикселя, h — ядро свертки (матрица 3 × 3, состоящая из единиц).

Если ядро свертки — матрица, то свертка — это скользящее среднее. В OpenCV произвести такую свертку можно следующим образом:

Картинка при этом становится более размытой. Также размытие изображения можно получать при помощи свертки с гауссовской функцией.

Фото до применения скользящего среднего, после и после применения гауссовского размытия

Детекция границ

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

Свертки для получения границ: слева — горизонтальных, справа — вертикальных
Границы изображения, полученные с помощью применения свертки. Слева — горизонтальные, в середине — вертикальные, справа — все границы, полученные объединением результатов двух сверток

Такие ядра являются частью преобразования Превитта, их использование — это самый простой способ найти границы изображения.

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

Корреляция

Другой пример линейного преобразования — это корреляция. Она очень похожа на свертку, но записывается немного в другом виде:

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

На рисунке слева показан результат применения корреляции для поиска лица. Белое пятно — это место, где оно найдено. Корреляцию можно использовать с различными параметрами: нормировать, применять ее различные вариации.

Получается, что корреляция — это очень простой способ поиска объектов на изображении, если имеется их точные копии.

Источники:
  • http://robot.gimn74.ru/?page_id=542
  • http://edurobots.ru/2015/11/kompyuternoe-zrenie-v-fischertechnik-robo-pro/
  • http://integral-russia.ru/2017/10/29/kak-vidyat-bespilotnye-avtomobili-algoritmy-i-metody/
  • http://rb.ru/list/computer-vision-in-practice/
  • http://andrewrogov.ru/2014/01/%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC-%D0%BF%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE-%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE-%D1%87%D0%B5%D1%80%D0%BD%D0%BE%D0%B9-2/
  • http://xakep.ru/2019/01/14/yandex-ds/