Фильтрация верхней шляпы для удаления неравномерной фоновой подсветки на NVIDIA Jetson TX2 Developer Kit

В этом примере показано, как развернуть алгоритмы Image Processing Toolbox™ на TX2 плате NVIDIA ® Jetson с помощью пакета поддержки GPU Coder™ для графических процессоров NVIDIA. The imtophat (Image Processing Toolbox) функция, которая выполняет морфологическую фильтрацию верхней шляпы на полутоновом изображении, используется в качестве примера, чтобы продемонстрировать эту концепцию. Фильтрация Top-hat вычисляет морфологическое открытие изображения (используя imopen (Image Processing Toolbox)), а затем вычитает результат из исходного изображения. Сгенерированный код CUDA ® использует общую память для ускорения операций на графическом процессоре.

Необходимые условия

Требования к системной плате *

  • NVIDIA Jetson TX2 встраиваемая платформа.

  • Перекрестный кабель Ethernet для подключения целевой платы и хост-ПК (если целевая плата не может быть подключена к локальной сети).

  • На плате установлен набор инструментов NVIDIA CUDA.

  • Библиотека OpenCV на цели для чтения и отображения изображений и видео.

  • Переменные окружения целевого компьютера для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек и их настройке см. в разделе Установка и Setup необходимых условий для плат NVIDIA (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) для плат NVIDIA

Требования к узлу разработки

Проверьте установку пакета поддержки NVIDIA на хосте

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

checkHardwareSupportPackageInstall();

Подключение к оборудованию NVIDIA

Пакет поддержки GPU Coder для графических процессоров NVIDIA использует SSH-соединение через TCP/IP для выполнения команд во время создания и выполнения сгенерированного кода CUDA на платформе Jetson. Поэтому необходимо подключить целевую платформу к той же сети, что и хосту-компьютеру, или использовать перекрестный кабель Ethernet, чтобы подключить плату непосредственно к хосту-компьютеру. См. документацию NVIDIA по настройке и конфигурированию системной платы.

Для связи с оборудованием NVIDIA необходимо создать объект подключения к активному оборудованию при помощи jetson (MATLAB Coder Support Package for NVIDIA Jetson и NVIDIA DRIVE Platforms). Для создания объекта подключения к активному оборудованию необходимо знать имя хоста или IP-адрес, имя пользователя и пароль целевой платы.

hwobj= jetson('host-name','username','password');

Когда существует несколько объектов live connection для разных целей, генератор кода выполняет удаленную сборку для цели, для которой был создан недавний объект live. Чтобы выбрать плату оборудования для выполнения удаленной сборки, используйте setupCodegenContext() способ соответствующего объекта оборудование. Если был создан только один объект live connection, вызывать этот метод не обязательно.

hwobj.setupCodegenContext;

Проверьте окружение GPU

Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall функция.

envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);

The imtophat Функция точки входа

The imtophatDemo_gpu.m вызывает imtophat внутренне. The imtophat функция выполняет морфологическое открытие изображения с помощью imopen (Image Processing Toolbox) функция. Результат изображения вычитается из оригинального изображения. The imopen операция в основном imerode (Image Processing Toolbox) операция с последующим imdilate (Image Processing Toolbox).

Этот пример показан на входном полутоновом изображении.

original = imread('rice.png');
imshow(original),title('Input to Top-Hat Filtering');

Создайте дискообразный структурный элемент с радиусом 12. Район, Nhood этого структурного элемента передается как входной параметр для функции imtophat.

se = strel('disk',12);
Nhood = se.Neighborhood;
type imtophatDemo_gpu
function [out]  = imtophatDemo_gpu(img,Nhood,ocvFlag) %#codegen

%   Copyright 2019-2021 The MathWorks, Inc.   

coder.gpu.kernelfun;

% This example uses OpenCV for reading an image 
% and displaying output image. Update buildinfo to link with 
% OpenCV library available on target.
if ocvFlag 
    % OpenCV 4 flags
    opencv_compile_flags = '`pkg-config --cflags --libs opencv4`';
    opencv_link_flags = '`pkg-config --libs opencv4`';
else 
    % OpenCV 3 flags
    opencv_compile_flags = '`pkg-config --cflags --libs opencv`';
    opencv_link_flags = '`pkg-config --libs opencv`';
end

coder.updateBuildInfo('addLinkFlags',opencv_link_flags);
coder.updateBuildInfo('addCompileFlags',opencv_compile_flags);

out = imtophat(img,Nhood);

end

Получите версию OpenCV на целевом компьютере

Используйте pkg-config helper tool, чтобы запросить, установлен ли OpenCV 4.x на целевой плате. Этот пример использует информацию для обновления информации о сборке для связи с соответствующей библиотекой OpenCV, доступной в целевой системе.

try
    OpenCVver = strtrim(system(hwobj,'pkg-config --modversion opencv4'));
    isOpenCV4 = 1;
catch
    OpenCVver = strtrim(system(hwobj,'pkg-config --modversion opencv'));
    isOpenCV4 = 0;
end

Сгенерируйте и разверните код CUDA на целевом устройстве

Этот пример использует imtophatDemo_gpu.m как функцию точки входа для генерации кода. Чтобы сгенерировать исполняемый файл CUDA, создайте объект строения кода GPU.

cfg = coder.gpuConfig('exe');

Используйте coder.hardware функция для создания объекта строения для платформы Jetson и назначения его Hardware свойство объекта строения кода GPU cfg.

cfg.Hardware = coder.hardware('NVIDIA Jetson');

Настраиваемая main_tophat.cu файл является оболочкой, которая вызывает imtophatDemo_gpu функция точки входа в сгенерированном коде. Шаги постобработки добавляются в основной файл с помощью интерфейсов OpenCV. Флаги сборки для библиотек OpenCV включены в imtophatDemo_gpu.m функция точки входа.

cfg.CustomSource = fullfile('main_tophat.cu');

Чтобы сгенерировать код CUDA, используйте codegen и передайте объект строения кода GPU вместе с входными параметрами. На этом этапе на хосте генерируется код CUDA, сгенерированные файлы копируются и строятся на целевом устройстве в директории рабочей области. Директория рабочей области доступна как свойство, workspaceDir в объекте оборудования, hwobj.

codegen -args {original,coder.Constant(Nhood),coder.Constant(isOpenCV4)} -config cfg imtophatDemo_gpu -report

Запуск приложения на целевом компьютере

Это приложение принимает полутоновое изображение как вход. Скопируйте файл rice.png с хоста на целевое устройство с помощью putFile команда.

imgLoc = which('rice.png');
hwobj.putFile(imgLoc,hwobj.workspaceDir);

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

hwobj.runApplication('imtophatDemo_gpu','rice.png');

Фильтрованное изображение Top-Hat на TX2 Jetson

Убить приложение

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

hwobj.killApplication('imtophatDemo_gpu');

См. также

Объекты

  • (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)

Похожие темы