Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: XII Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 09 января 2017 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Журавлев В.С., Зальцман Н.М., Слободецкий А.В. ПРЕОБРАЗОВАНИЕ ЦВЕТОВЫХ ПРОСТРАНСТВ В LABVIEW С TCP ЗАПРОСОМ К STM // Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ: сб. ст. по мат. XII междунар. студ. науч.-практ. конф. № 1(12). URL: https://sibac.info/archive/meghdis/1(12).pdf (дата обращения: 27.12.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 1 голос
Дипломы участников
У данной статьи нет
дипломов

ПРЕОБРАЗОВАНИЕ ЦВЕТОВЫХ ПРОСТРАНСТВ В LABVIEW С TCP ЗАПРОСОМ К STM

Журавлев Валентин Сергеевич

студент, кафедра управления инновациями ТУСУР, Томск

Зальцман Никита Матвеевич

студент, кафедра управления инновациями ТУСУР, Томск

Слободецкий Андрей Владимирович

студент, кафедра управления инновациями ТУСУР, Томск

Целью данной статьи является описание выполненного проекта СТЗ.

Необходимо создать приложение LabVIEW, представляющее из себя клиент в TCP/IP соединении и выполняющее функции захвата изображения, разбиение последнего на строки и последующую их отправку на сервер, исполненный на STM32F4Discovery, где должен производиться перевод исходного изображения в негатив по формулам пересчёта; полученное же изображение требуется отобразить опять же в LabVIEW, а также для сравнения результата осуществить преобразование в негатив в приложении LabVIEW параллельно STM.

Приложение neg_image_with_tcp.vi

Полная блок-диаграмма виртуального инструмента neg_image_with_tcp отображена на рисунке 1.1. По выполняемым функциям её можно разделить на несколько частей. Первая часть (рис. 1.2) осуществляет захват изображения с камеры и его сохранение в png файл на жестком диске под названием «orig_image», для чего на мгновение запускается видео сессия, картинка из которой определяется блоком IMAQ. Также в первом регионе структуры прямой последовательности открывается TCP соединение по указанному адресу и порту, а во втором регионе открывается ранее сохраненное изображение orig_image с указанием формата: RGB (U32). Вторая часть (рис. 1.3) блок-диаграммы neg_image_with_tcp представляет собой два цикла «for» (один в другом), осуществляющие проход по всем пикселям изображения слева направо снизу вверх, количество которых берется из блока GetImageSize. Во внутреннем цикле к каждому пикселю применяется операция взятия его значения типа integer, далее это число преобразуется в кластер цветов RGB.

Рисунок 1.1 – Полная блок-диаграмма

 

Рисунок 1.2 – Первая часть блок-диаграммы

 

Рисунок 1.3 – Вторая часть блок-диаграммы

 

Теперь представляется возможным разбиение кластера цветов на вес каждого в формате byte (U8).

После преобразования типов данных из byte в double производится пересчёт из RGB в Grayscale по формуле:

 

а теперь обратно из double в byte. Итог: получен черно-белый вариант исходного изображения. Далее осуществляется инвертирование, основываясь на разности от 128. Действие по лжи отображено на рисунке 1.4.

 

Рисунок 1.4 – Инверсия цвета

 

Полученное значение  записывается в массив (сначала одномерный, потом двумерный), индексируемый теми же счётчиками «i» циклов «for», что и при получении пикселя на обработку; одним словом, получено изображение для проверки правильности алгоритма работы с STM.

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

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

Также по индексации внешнего цикла выведен прогресс бар в процентном соотношении для пользовательской наглядности процесса обработки изображения [1, с. 120].

Третья часть (рис. 1.5) блок-диаграммы знаменует собой TCP сессию, по крайней мере, первую её партию. Данная часть всё еще находится во внешнем цикле «for» из предыдущей, что позволяет переслать на STM N раз три строки весов каждого цвета. В нашем случае N равно 1024, так как расширение получаемого изображения .

В протоколе соединения фиксируем по размеру каждый пакет – 2566 байтов: 3 ячейки служебные, 1280 ячеек на данные, каждая в формате U16 =>

 

Служебные ячейки:

Первая имеет три значения 1, 2 или 3. Если 1, то это строка с весами цветов, если 2, то это команда начать пересчёт в Grayscale, если 3, то это строка с уже рассчитанными «черно-белыми значениями».

Вторая ячейка являет собой номер обрабатываемой строки, изменяется от 0 до 1023.

Третья ячейка отвечает за цвет, если в первой единица: 0 – R, 1 – G, 2 – B; в остальных случаях она является запасной и всегда обнулена.

Возвращаемся к третьей части блок-диаграммы: первоначально здесь создаётся строка для отправки, т.е. к массиву весов определенного цвета добавляются три предстоящие служебные ячейки. Номер цвета здесь выбирается через структуру «case» от счётчика «i» внутреннего цикла «for».

 

Рисунок 1.5 – Третья часть блок-диаграммы

 

Номер строки – от внешнего цикла. Далее каждая строка (массив U16) поочередно попадает в функцию типового приведения, строковый результат которой отправляется по TCP на STM.

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

Приём пакета осуществляется с помощью блока «TCP Read», полученная строка после прохода функции типового приведения, с параметром в виде одномерного U16 массива, подвергается выборке трёх первых элементов и последующему их объединению для сравнения с такой же «частью» массива на отправление [2, с. 211].

 

Рисунок 1.6 – Четвёртая часть блок-диаграммы

 

Четвёртая часть (рис. 1.6) блок-диаграммы наряду с прочим осуществляет отправку команды STM на обработку переданных ей строк, это происходит лишь только после того, как все три массива о цветах были переданы, и на них были получены ответы. Строка с командой всегда одинаковая: 2100…0. Заполнение этого массива нулями производится посредство цикла «for», итерируемого 1280 раз.

В ответ на команду ожидается уже обработанная строка значений веса белого цвета. Ожидание опять же выполнено на цикле «while» до совпадения номеров отправляемой строки RGB и получаемой Grayscale во второй служебной ячейке.

От полученного из TCP Read массива отсекаются служебные ячейки, и остается чистая строка веса белого цвета. Далее его значения переводятся в тип данных byte, и он записывается в уже двумерный массив индексируемый внешним циклом «for».

По выходу из цикла имеются два двумерных массива Grayscale (один из LabVIEW для проверки, другой с STM). Через блоки параметризации IMAQ и IMAQ ArrayToImage образуются собственно изображения и выводятся на фронтальную панель, после чего память под изображения освобождается удалением последних.

TCP соединение закрывается; ошибки выводятся, если имеются.

 

Список литературы:

1. Гридин В.Н., Титов В.С., Труфанов М.И. Адаптивные системы технического зрения: науч. отд. изд., – М: 2009 – 442 с.

2. Мошкин В. И., Петров А. А., Титов В. С., Якушенков Ю. Г. Техническое зрение роботов: учебник. отд. изд., стер. – М.: 1990 – 272 с.

 

Проголосовать за статью
Конференция завершена
Эта статья набрала 1 голос
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий