Распознавание цвета в LabVIEW с использованием стандартных блоков. Распознавание цвета на изображении

Мобильная робототехника

В этом уроке мы научимся различать цвета на изображении. Настроим камеру с помощью утилиты NI MAX, бинаризируем необходимый диапазон палитры RGB для нахождения цвета, отфильтруем и удалим лишние элементы, найдем нужный цвет и получим данные о нем. Поехали!
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Фокусное расстояние
Параметр, который отвечает за четкость и качество изображения в зависимости от расстояния
NI MAX
National Instruments Measurement and Automation eXplorer (утилита для настройки MyRIO)
Image дисплей
Блок в LabVIEW, с помощью которого можно получить изображение в реальном ремени и в дальнейшем его обработать
Видеолекция
Конспект

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

1. Открываем утилиту NI MAX.

2. Слева в открывшемся окне видим два каталога: My systems и Remode system. Под каждым из них есть подкаталоги: Devices and interfaces и Software, где отображена подключенная периферия к устройству, и установлено программное обеспечение.

3. Открываем Devices and interfaces на устройстве myRIO.

4. Найдем подключенную камеру и нажмем на нее.

5. Запустим камеру для наглядности работы. Для этого сверху от серого квадрата нажмем на кнопку Grab.

6. Чтобы получить полное изображение с камеры, нажмем правой кнопкой мыши по изображению, Viewer tools и Zoom to Fit.
Интерфейс
Сверху над изображением есть ряд кнопок.

Save — сохраняет настройки камеры.

Refresh
 — сбрасывает настройки, если мы их не сохранили.

Snap — делает один скрин изображения.

Grab — начинает трансляцию изображения.

Histogram — отображение в виде графика количества пикселей RGB, где черный цвет — это 0.0.0, а белый — 250.250.250.

Save Image — сохраняет текущее изображение с камеры.
Под изображением снизу видим вкладки.

Settings
 — в ней указаны параметры камеры. В моем случае это ее название cam0, название модели, серия, номер и статус.

Acquisition attributes — настройка изображения. Это Video mode, где указывается разрешение изображения. Чем оно больше, тем больше времени на обработку уйдет у нашего устройства.

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

1. Установим фокус в режим Авто.

2. Отожмем кнопку Grab.

3.
Сохраним настройки.

4.
Закроем NI Max.
Программирование в LabVIEW
Так как камера у нас подключена к myRIO, LabVIEW увидит это устройство только на нем. Поэтому создадим новую VI на устройстве myRIO. Разделим экран для удобства работы.
Чтобы получить изображение с камеры в LabVIEW, необходимо создать сессию работы с камерой.

1. В палитре Vision and Motion, на вкладке NI-IMAQ.dx выберем элемент Open — Open camera.

2. Воспользуемся элементом Configure grab, чтобы настроить нашу камеру.

3. Воспользуемся элементом Grab, чтобы начать видео-трансляцию.

4. Подключим соответствующие входы и выходы.

5. Сессию Out подключим в сессию In.

6. Создадим кластер ошибки.

7. Создадим константу на сессию In для Camera open.

8. Чтобы дать сессии имя, нажмем правую кнопку мыши на блок-диаграмме, перейдем в Vision and motion, Vision utilities, Image management и IMAQ create.

9. New image подключаем к Grab, слева от IMAQ create подключаем к Image Name константу и называем эту сессию.
10. Чтобы постоянно получать изображение с камеры, воспользуемся циклом While и поместим в этот цикл блок Grab.

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

12. Для отображения полученного изображения создадим на передней панели Image display.

13. Подключим Image display к выходу Image out.

14. Запустим программу комбинацией клавиш Ctrl + R, перед этим сохранив нашу VI.
Мы получили изображение с камеры в LabVIEW при разрешении 320×240. Помимо данных о разрешении мы можем увидеть программный зум, битность изображения и диапазон значений в палитре RGB.
Получение цвета
Теперь на полученном изображении необходимо получить интересующий нас цвет.

1. Нажмем правой кнопкой мыши по блок-диаграмме.

2. В палитре Vision and motion перейдем во вкладку Image processing.

3. Откроем Color processing и выберем Color threshold. Поместим его после Grab.

4. На вход Image source подключим наше исходное изображение.

5. Соединим кластер ошибки и создадим три контроля на три коричневых входа. Это Red or huge range, Green or saturation range, Blue or luminance range.

6. Продублируем с передней панели Image display, и так как у нас теперь два Image дисплея, назовем их соответственно.
Ошибки
1. Снизу изображение появилось, но данное изображение не изменяется, потому что Image дисплей на блок-диаграмме не подключен в цикл как Color threshold.

Исправление
Подключим Image дисплей. Запустим снова.

2. Изображение начало мигать. Это происходит из-за того, что у нас есть одна сессия изображения — исходная, которая генерируется с помощью Grab. Затем эта же сессия изображения модифицируется с помощью Color threshold, в результате сессии накладываются друг на друга.

Исправление
Чтобы избежать мигания, необходимо создать еще одну сессию на Color threshold. Создадим копию нашего IMAQ Create и назовем ее Binary. Подключим New image ко входу Image DST и запустим снова.

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

Исправление
Во вкладке Palette выбираем входные данные как Binary, и он будет отображать то, что нашел у нас.
На изображении мы должны найти интересующий нас цвет. Проще всего это сделать следующим образом: навести курсор на нужный цвет и примерно понять, в каком диапазоне этот цвет находится.
Фильтрация изображения
Остановим программу и добавим новые элементы после Color threshold.
  • Fill hole, который находится в Vision&Motion, в Image processing, Morphology. Fill Hole заполняет точки на изображении, если у него есть контур.
  • Remove partial, который удаляет элементы.
  • Константа — Number of erosion или контроль. Выберем контроль для более наглядного применения.
1. Удалим все объекты, которые подходят под данный диапазон и касаются стенок дисплея. Для этого воспользуемся блоком под названием Reject boarder. Подключим и запустим.

2. Чтобы увидеть более детально, как это происходило, возьмем пробу с вот этих наших проводочков. Для этого нажмем на провод левой кнопкой мыши, к примеру, на Source, настроим данное окно. Zoom to fit. Затем Threshold с палитрой Binary.

3. Теперь мы должны получить данные о вот этом большом красном квадрате. Чтобы получить данные этого бинарного объекта, в палитре Vision&Motion, Image processing and analysis воспользуемся блоком IMAQ Particle analysis report. К нему подключаем наше бинарное изображение и создаем индикатор с выходом Particle reports pixels. Запустим. Результатом данного блока будет массив объектов, найденных на изображении.
Итак, в этом уроке мы настроили камеру с помощью утилиты NI MAX, указали необходимый диапазон палитры RGB для нахождения цвета, отфильтровали изображение и удалили лишние элементы на нем. Давайте приступим к проверке полученных знаний.
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Через какую утилиту настраивается камера без запуска LabVIEW?
Дальше
Проверить
Узнать результат
С помощью какого блока задается название изображению?
Дальше
Проверить
Узнать результат
С помощью какого блока можно получить отчет по бинарному изображению?
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз