Обнаружение Ребра Sobel с помощью Веб-камеры на NVIDIA Джетсон

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

Предпосылки

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

  • NVIDIA Jetson TX1/TX2 встроил платформу.

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

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

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

  • Веб-камера USB, соединенная с серверным портом USB цели.

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

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

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

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

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

Проверяйте webcamlist свойство hwobj возразите, чтобы найти веб-имя камеры. Если это свойство пусто, то попытайтесь повторно подключить веб-камеру USB и запустите следующую команду. Эта команда пытается отсканировать доступные веб-камеры на цели, когда существует сложение или удаление.

hwobj.updatePeripheralInfo;

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

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

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

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

Создайте объект веб-камеры использование имени или индекса webcamlist. Если никакое имя веб-камеры или индекс не заданы, то он использует веб-камеру по умолчанию.

cam = webcam(hwobj);

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

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

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

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

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

dispObj = imageDisplay(hwobj);
Display an image using the above created display object.
img = snapshot(cam);
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(cam);
    thersh = 100;
    edgeImage = sobelEdgeDetectionAlg(img, thersh);
    image(dispObj,edgeImage);
end

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

Закройте открытые окна

close all

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

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