使用树莓派相机模块V2的NVIDIA Jetson Nano Sobel边缘检测
此示例向您展示如何从连接到NVIDIA®Jetson Nano的树莓派相机模块V2中捕获和处理图像NVIDIA GPU的万博1manbetxGPU Coder™支持包
.NVIDIA GPU的GPU万博1manbetx编码器支持包允许您从相机模块V2捕获图像,并将它们直接带入MATLAB®环境进行处理。在本例中,您将学习如何使用此功能开发Sobel边缘检测算法。
先决条件
目标板要求
NVIDIA Jetson Nano嵌入式平台。
树莓派摄像机模块V2连接目标器的CSI主机端口。
用于连接目标板和主机PC的以太网交叉网线(如果目标板无法连接到本地网络)。
目标上的V4L2库。
目标上的GStreamer库。
目标上用于编译器和库的环境变量。有关编译器和库的支持版本及其设置的信息,请参见万博1manbetx安装和设置NVIDIA板的先决条件.
开发主机要求
用于代码生成的GPU编码器。如果您是GPU Coder的新手,请访问GPU Coder产品页面以获得概述和教程。
NVIDIA GPU万博1manbetx的GPU编码器支持包。如果您是此支持包的新手,我们建议您填写万博1manbetx开始使用NVIDIA GPU的GPU编码器支持包万博1manbetx的例子。
主机上的NVIDIA CUDA®工具包。
主机上用于编译器和库的环境变量。有关编译器和库的受支持版本的信息,请参见万博1manbetx第三方产品s manbetx 845.有关设置环境变量,请参见环境变量.
创建硬件对象
连接到NVIDIA Jetson Nano
NVIDIA GPU的GPU万博1manbetx编码器支持包使用TCP/IP上的SSH连接来执行命令,同时在DRIVE或Jetson平台上构建和运行生成的CUDA代码。因此,必须将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将单板直接连接到主机。有关如何设置和配置您的电路板,请参阅NVIDIA文档。
属性创建一个活动硬件连接对象,以与NVIDIA Jetson Nano通信开车或杰森函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。例如,使用下面的命令为Jetson硬件创建活动对象,
Hwobj = jetson(“jetson-nano-name”,ubuntu的,ubuntu的);
运行getCameraList
的功能hwobj
对象来查找可用的摄像机。如果此函数输出一个空表,则尝试重新连接摄像机并再次执行该函数。
检查GPU环境
使用coder.checkGpuInstall函数并验证运行此示例所需的编译器和库是否正确设置。
envCfg = code . gpuenvconfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
创建相机对象
类中的名称创建相机对象getCameraList
函数。
camObj = camera(hwobj,vi-output, imx219 6-0010"480年[640]);
camObj
相机对象的句柄。要在MATLAB中显示从相机模块V2捕获的图像,使用以下命令。
为i = 1:100 img =快照(camObj);显示亮度图像(img);drawnow;结束
这个相机对象捕获RGB和3通道灰度图像。
创建显示对象
使用imageDisplay
函数创建一个显示对象。这是一个使用imshow
函数在MATLAB中显示图像。
dispObj = imageDisplay(hwobj);img =快照(camObj);图像(dispObj, img);
Sobel边缘检测算法
Sobel边缘检测算法是一种流行但简单的边缘检测算法。在该算法中,对灰度图像进行二维空间梯度运算。该操作强调了与边相对应的高空间频率区域。
计算梯度
我们将用各自的Sobel核找到输入图像的水平梯度(h)和垂直梯度(v)。这两个索贝尔核彼此正交。我们将确保我们的算法在测试图像上工作,然后再转向实时数据。
Kern = [1 2 1;0 0 0;-2 -1];Img = imread(“peppers.png”);显示亮度图像(img);H = conv2(img(:,:,2),kern,“相同”);V = conv2(img(:,:,2),kern',“相同”);
计算梯度幅度
接下来,我们从水平和垂直梯度(h和v)中找到梯度幅度。
E =根号下(h。*h + v *v);
边缘图像阈值
我们对图像进行阈值,以找到图像中我们认为是边缘的区域。
edgeImg = uint8((e > 100) * 240);显示亮度图像(edgeImg);
对实时数据运行Sobel边缘检测算法
我们可以创建一个MATLAB函数,sobelEdgeDetectionAlg.m
的MATLAB代码,我们在这个例子的前面部分开发。在编辑器中查看MATLAB函数。
编辑(“sobelEdgeDetectionAlg.m”);
这个函数sobelEdgeDetectionAlg ()
获取图像和阈值输入进行边缘检测,并返回边缘检测算法的结果。我们将对在循环中捕获的图像调用此函数。阈值变量打
可以改变得到适当的边缘图像。这样我们就可以使用支持包的摄像头访问功能来调整适合指定摄像头的算法。万博1manbetx
为i = 1:200 img =快照(camObj);脱粒= 100;edgeImage = sobelEdgeDetectionAlg(img, thresh);图像(dispObj edgeImage);结束
要将上面的示例部署为目标上的独立应用程序,请遵循下面的示例在NVIDIA Jetson Nano上部署和运行带有I/O的Sobel边缘检测.
关闭所有
总结
本例介绍了一个应用程序,该应用程序使用Sobel边缘检测算法在MATLAB中处理来自连接到NVIDIA Jetson Nano的相机的图像。