文档

在NVIDIA Jetson Nano上使用Raspberry Pi Camera Module V2实现Sobel边缘检测

这个例子向您展示了如何从连接到NVIDIA®Jetson Nano的树莓派相机模块V2中捕获和处理图像支持NVIDIA GP金宝appU的GPU编码器.NVIDIA GPU的GPU金宝app编码器支持包允许您从摄像头模块V2捕获图像,并将它们直接带入MATLAB®环境进行处理。在本例中,您将学习如何使用此功能开发Sobel边缘检测算法。

先决条件

目标板需求

  • NVIDIA Jetson Nano嵌入式平台。

  • 树莓Pi摄像机模块V2连接到目标器的CSI主机端口。

  • 用于连接目标板和主机PC(如果目标板无法连接本地网络)的以太网交叉线缆。

  • 目标上的V4L2库。

  • 目标上的GStreamer库。

  • 目标上的编译器和库的环境变量。有关编译器和库的支持版本及其设置的信息,请参见金宝app安装和设置NVIDIA主板的先决条件

开发主机需求

创建硬件对象

连接NVIDIA Jetson Nano

NVIDIA GPU的GPU金宝app编码器支持包通过TCP/IP使用SSH连接来执行命令,同时在DRIVE或Jetson平台上构建和运行生成的CUDA代码。因此,需要将目标平台与主机连接到同一网络,或者使用以太网交叉网线直接将单板与主机连接。请参考NVIDIA的文档,了解如何设置和配置您的主板。

要与NVIDIA Jetson Nano通信,必须使用开车杰森函数。您必须知道目标板的主机名或IP地址、用户名和密码,才能创建实时硬件连接对象。例如,使用以下命令为Jetson硬件创建活动对象:

hwobj =杰森(“jetson-nano-name”ubuntu的ubuntu的);

运行getCameraList的函数hwobj目标找到可用的摄像机。如果该函数输出空表,则尝试重新连接摄像机并再次执行该函数。

验证GPU环境

使用coder.checkGpuInstall函数,并验证运行此示例所需的编译器和库是否正确设置。

envCfg = coder.gpuEnvConfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

创建一个相机对象

的名称创建一个相机对象getCameraList函数。

camObj =相机(hwobj,“vi-output imx219 6 - 0010”480年[640]);

camObj是相机对象的句柄。要在MATLAB中显示从Camera Module V2中捕获的图像,请使用以下命令。

i = 1:100 img = snapshot(camObj);显示亮度图像(img);drawnow;结束

这个相机对象捕捉RGB和3通道灰度图像。

创建一个显示对象

使用imageDisplay函数创建显示对象。这是一个使用imshow函数在MATLAB中显示图像。

dispObj = imageDisplay (hwobj);img =快照(camObj);图像(dispObj, img);

Sobel边缘检测算法

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),克恩”,“相同”);

计算梯度大小

接下来,我们从水平和垂直梯度(h和v)找到梯度大小。

e =√h。* h + v * v);

边缘图像的阈值设置

我们对图像进行阈值,以找到图像中我们认为是边缘的区域。

edgeImg = uint8((e > 100) * 240);显示亮度图像(edgeImg);

在实时数据上运行Sobel边缘检测算法

我们可以创建一个MATLAB函数,sobelEdgeDetectionAlg.m的MATLAB代码,我们在本示例的前几节中开发的。在编辑器中查看MATLAB函数。

编辑(“sobelEdgeDetectionAlg.m”);

这个函数sobelEdgeDetectionAlg ()输入图像和阈值进行边缘检测,返回边缘检测算法的结果。我们将在循环中捕获的图像上调用这个函数。阈值变量可以变换以得到合适的边缘图像。这样,我们可以使用支持包的摄像机访问能力来调整算法适合特定的摄像机。金宝app

i = 1:200 img = snapshot(camObj);打= 100;edgeImage = sobelEdgeDetectionAlg(img, thresh);图像(dispObj edgeImage);结束

要将上述示例部署为目标上的独立应用程序,请按照示例进行操作在NVIDIA Jetson Nano上使用I/O部署和运行Sobel边缘检测

关闭所有

总结

这个例子介绍了一个应用程序,它使用Sobel边缘检测算法在MATLAB中处理连接到NVIDIA Jetson Nano的摄像机的图像。