这个例子展示了如何捕捉和处理损坏的树莓Pi相机模块V2连接到Nvidia®Jethon Nano的图像。支持NVIDIA GP万博1manbetxU的GPU编码器
. NVIDIA GPU的GPU万博1manbetx编码器支持包允许您从摄像头模块V2捕获图像,并将其直接带到MATLAB®环境中进行处理。在本例中,您将学习如何使用此功能开发Sobel边缘检测算法。
目标板要求
NVIDIA Jetson纳米嵌入式平台。
树莓Pi摄像机模块V2连接到目标器的CSI主机端口。
用于连接目标板和主机PC(如果目标板无法连接本地网络)的以太网交叉线缆。
目标上的V4L2库。
目标上的GStreamer库。
编译器和库目标上的环境变量。有关支持的编译器和库版本及其设置的信息,请参阅万博1manbetx安装和设置NVIDIA主板的先决条件.
开发主机需求
用于代码生成的GPU编码器。如果您是GPU编码器的新手,请访问GPU编码器产品页浏览概述和教程。
NVIDIA GPU万博1manbetx的GPU编码器支持包。如果您是这个支持包的新手,我们建议您完成万博1manbetx入门GPU编码器支持包为NVIDIA GPU万博1manbetx的例子。
主机上的NVIDIA CUDA®工具包。
主机上编译器和库的环境变量。有关编译器和库支持的版本的信息,请参见万博1manbetx第三方产品s manbetx 845.有关设置环境变量,请参见环境变量.
连接NVIDIA Jetson Nano
NVIDIA GPU的GPU万博1manbetx编码器支持包使用TCP/IP上的SSH连接来执行命令,同时在驱动器或Jetson平台上构建和运行生成的CUDA代码。因此,您必须将目标平台连接到与主机相同的网络,或使用以太网交叉电缆将板直接连接到主机。请参阅英伟达文档关于如何设置和配置您的板。
要与英伟达JexNano通信,必须使用驾驶或杰森功能。要创建实时硬件连接对象,您必须知道目标板的主机名或IP地址、用户名和密码。例如,使用以下命令为Jetson硬件创建实时对象,
hwobj =杰森(“jetson nano名称”,“ubuntu”,“ubuntu”);
运行摄影家
委员会的职能hwobj
目标找到可用的摄像机。如果该函数输出空表,则尝试重新连接摄像机并再次执行该函数。
使用coder.checkGpuInstall函数并验证运行此示例所需的编译器和库是否已正确设置。
envCfg = coder.gpuEnvConfig (“杰森”); envCfg.BasicCodegen=1;envCfg.Quiet=1;envCfg.HardwareObject=hwobj;编码器。检查GPUInstall(envCfg);
的名称创建一个相机对象摄影家
作用
camObj=摄像机(hwobj,“vi-output imx219 6 - 0010”,[640 480]);
卡莫布
是摄影机对象的控制柄。要在MATLAB中显示从摄像头模块V2捕获的图像,请使用以下命令。
对于i=1:100 img=snapshot(camObj);imagesc(img);drawnow;终止
此摄影机对象捕获RGB和3通道灰度图像。
使用imageDisplay
函数创建显示对象。这是一个使用imshow
函数在MATLAB中显示图像。
dispObj=图像显示(hwobj);img=快照(camObj);图像(dispObj、img);
Sobel边缘检测算法是一种流行而简单的边缘检测算法。该算法对灰度图像进行二维空间梯度运算。这种操作强调与边缘相对应的高空间频率区域。
计算梯度
我们将用各自的Sobel核求得输入图像的水平梯度(h)和垂直梯度(v)。这两个Sobel核互相正交。我们将确保我们的算法在测试图像上工作,然后再继续现场数据。
Kern = [1 2 1;0 0 0;1 2 1];img = imread (“peppers.png”);显示亮度图像(img);h = conv2 (img(:,: 2),克恩,“相同”); v=conv2(img(:,:,2),kern',“相同”);
计算梯度大小
接下来,我们从水平和垂直梯度(h和v)中找到梯度大小。
e =√h。* h + v * v);
边缘图像的阈值设置
我们阈值的图像,以找到图像的区域,我们认为是边缘。
edgeImg = uint8((e > 100) * 240);显示亮度图像(edgeImg);
我们可以创建一个MATLAB函数,sobelEdgeDetectionAlg.m
,使用我们在本示例前面部分中开发的MATLAB代码。在编辑器中查看MATLAB函数。
编辑(“sobelEdgeDetectionAlg.m”);
这个函数sobelEdgeDetectionAlg()
获取用于边缘检测的图像和阈值输入,并返回边缘检测算法的结果。我们将对循环中捕获的图像调用此函数。阈值变量打
可以改变以获得适当的边缘图像。这样,我们可以使用支持包的摄像头访问功能来调整适合指定摄像头的算法。万博1manbetx
对于i=1:200 img=snapshot(camObj);thresh=100;edgeImage=sobelEdgeDetectionAlg(img,thresh);image(dispObj,edgeImage);终止
要将上述示例部署为目标上的独立应用程序,请按照示例进行操作在NVIDIA Jetson Nano上部署并运行带I/O的Sobel边缘检测.
关所有
这个例子介绍了一个应用程序,它使用Sobel边缘检测算法在MATLAB中处理连接到NVIDIA Jetson Nano的摄像机的图像。