Распознавание цвета в 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.
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 — сохраняет текущее изображение с камеры.
Save — сохраняет настройки камеры.
Refresh — сбрасывает настройки, если мы их не сохранили.
Snap — делает один скрин изображения.
Grab — начинает трансляцию изображения.
Histogram — отображение в виде графика количества пикселей RGB, где черный цвет — это 0.0.0, а белый — 250.250.250.
Save Image — сохраняет текущее изображение с камеры.
Под изображением снизу видим вкладки.
Settings — в ней указаны параметры камеры. В моем случае это ее название cam0, название модели, серия, номер и статус.
Acquisition attributes — настройка изображения. Это Video mode, где указывается разрешение изображения. Чем оно больше, тем больше времени на обработку уйдет у нашего устройства.
Camera attributes. Здесь настраиваются параметры камеры, такие как яркость, контраст, экспозиция, фокусное расстояние.
Settings — в ней указаны параметры камеры. В моем случае это ее название cam0, название модели, серия, номер и статус.
Acquisition attributes — настройка изображения. Это Video mode, где указывается разрешение изображения. Чем оно больше, тем больше времени на обработку уйдет у нашего устройства.
Camera attributes. Здесь настраиваются параметры камеры, такие как яркость, контраст, экспозиция, фокусное расстояние.
Фокусное расстояние
Кастомное фокусное расстояние позволяет настроить камеру так, чтобы получить стабильное изображение в зависимости от расстояния до объекта. В случае с автофокусом, камере необходимо будет тратить время на автонастройку, что в ряде случаев является не лучшим решением для оптимизации работоспособности робота.
1. Установим фокус в режим Авто.
2. Отожмем кнопку Grab.
3. Сохраним настройки.
4. Закроем NI Max.
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 константу и называем эту сессию.
Чтобы получить изображение с камеры в 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.
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. Нажмем правой кнопкой мыши по блок-диаграмме.
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, и он будет отображать то, что нашел у нас.
Исправление
Подключим 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. Запустим. Результатом данного блока будет массив объектов, найденных на изображении.
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?
Дальше |
Проверить |
Узнать результат |
С помощью какого блока задается название изображению?
Дальше |
Проверить |
Узнать результат |
С помощью какого блока можно получить отчет по бинарному изображению?
Дальше |
Проверить |
Узнать результат |
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз |
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз |
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз |