Обнаружение Ребра Sobel на NVIDIA Нано Джетсона использование Модуля Камеры Raspberry Pi V2

Этот пример показывает вам, как получить и обработать изображения от Модуля Камеры Raspberry Pi V2, соединенный с NVIDIA® Jetson Nano с помощью GPU Coder™ Support Package for NVIDIA GPUs. Пакет Поддержки GPU Coder для NVIDIA графические процессоры позволяет вам получать изображения от Модуля Камеры V2 и приносить им прямо в среду MATLAB® для обработки. В этом примере вы изучите, как разработать алгоритм обнаружения ребра Sobel при помощи этой возможности.

Предпосылки

Требования требуемой платы

  • NVIDIA Нано Джетсона встроил платформу.

  • Модуль Камеры Raspberry Pi V2, соединенный с серверным портом CSI цели.

  • Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).

  • Библиотека V4L2 по цели.

  • Библиотеки GStreamer по цели.

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

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

Создайте аппаратный объект

Соединитесь с нано Джетсона NVIDIA

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

Чтобы связаться с Нано Джетсона NVIDIA, необходимо создать живой аппаратный объект связи при помощи функции jetson или диска. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например, используйте следующую команду, чтобы создать живой объект для оборудования Джетсона,

hwobj = jetson('jetson-nano-name','ubuntu','ubuntu');

Запустите getCameraList функция hwobj возразите, чтобы найти доступные камеры. Если этот функциональные выходные параметры пустая таблица, то попытайтесь повторно подключить камеру и выполните функцию снова.

Проверьте среду графического процессора

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

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

Создайте объект камеры

Создайте объект камеры использование имени от getCameraList функция.

camObj = camera(hwobj,"vi-output, imx219 6-0010",[640 480]);

camObj указатель на объект камеры. Чтобы отобразить изображения, полученные от Модуля Камеры V2 в MATLAB, используйте следующие команды.

for i = 1:100
    img = snapshot(camObj);
    imagesc(img);
    drawnow;
end

Этот объект камеры получает RGB и полутоновые изображения с 3 каналами.

Создайте экранный объект

Используйте imageDisplay функция, чтобы создать экранный объект. Это - системный объект, который использует imshow функционируйте, чтобы отобразить изображения в MATLAB.

dispObj = imageDisplay(hwobj);
img = snapshot(camObj);
image(dispObj,img);

Алгоритм обнаружения ребра Sobel

Алгоритм обнаружения ребра Sobel является популярным все же простым алгоритмом обнаружения ребра. В этом алгоритме выполняется 2D пространственная операция градиента на полутоновом изображении. Эта операция подчеркивает высокие пространственные области частоты, который соответствует ребрам.

Вычислите градиенты

Мы найдем горизонтальный градиент (h) и вертикальный градиент (v) из входного изображения с соответствующими ядрами Sobel. Эти два ядра Sobel являются ортогональными друг другу. Мы убедимся, что наш алгоритм работает над тестовым изображением перед хождением дальше, чтобы жить данные.

kern = [1 2 1; 0 0 0; -1 -2 -1];
img = imread('peppers.png');
imagesc(img);
h = conv2(img(:,:,2),kern,'same');
v = conv2(img(:,:,2),kern','same');

Вычислите величину градиента

Затем мы находим величину градиента от горизонтальных и вертикальных градиентов (h и v).

e = sqrt(h.*h + v.*v);

Порог изображение ребра

Мы порог изображение, чтобы найти области изображения, что мы считаем ребрами.

edgeImg = uint8((e > 100) * 240);
imagesc(edgeImg);

Запустите алгоритм обнаружения ребра Sobel для живых данных

Мы можем создать функцию MATLAB, sobelEdgeDetectionAlg.m, из кода MATLAB мы разработали в предыдущих разделах этого примера. Просмотрите функцию MATLAB в редакторе.

edit('sobelEdgeDetectionAlg.m');

Функциональный sobelEdgeDetectionAlg() берет изображение и пороговый вход для обнаружения ребра и возвращает результаты алгоритма обнаружения ребра. Мы вызовем эту функцию на изображениях, полученных в цикле. Пороговая переменная thresh может варьироваться, чтобы получить соответствующее изображение ребра. Таким образом, мы можем использовать возможность доступа к камере пакета поддержки настроить алгоритм, подходящий для заданной камеры.

for i = 1:200
    img = snapshot(camObj);
    thresh = 100;
    edgeImage = sobelEdgeDetectionAlg(img, thresh);
    image(dispObj,edgeImage);
end

Чтобы развернуть вышеупомянутый пример как автономное приложение на цели, последуйте примеру, Развертываются и Запуск Обнаружение Ребра Sobel с вводом-выводом на NVIDIA Нано Джетсона (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).

close all

Сводные данные

Этот пример ввел приложение, где изображения, прибывающие из камеры, соединенной с Нано Джетсона NVIDIA, обрабатываются в MATLAB с помощью алгоритма обнаружения ребра Sobel.

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