主要内容

利用树莓派相机模块V2对NVIDIA Jetson Nano进行Sobel边缘检测

本示例向您展示如何从连接到NVIDIA®Jetson Nano的树莓派相机模块V2捕获和处理图像。NVIDIA Jetson和NVIDI金宝appA DRIVE平台的MATLAB®Coder™支持包允许您从相机模块V2捕获图像,并将其带入MATLAB环境进行处理。在本例中,您将学习如何使用此功能开发Sobel边缘检测算法。

先决条件

目标板要求

  • NVIDIA Jetson Nano嵌入式平台。

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

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

  • NVIDIA CUDA工具包安装在板上。

  • V4L2和SDL (v1.2)库。

  • 板上的GStreamer库。

  • 目标上用于编译器和库的环境变量。有关更多信息,请参见NVIDIA板的安装和设置先决条件

开发主机要求

创建一个文件夹并复制相关文件

下面这行代码在主机上的当前工作文件夹中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹中生成文件,请先更改当前工作文件夹再执行此命令。

nvidiademo_setup (“sobel_edge_detection”);

连接到NVIDIA Jetson Nano

支持包使金宝app用TCP/IP上的SSH连接来执行命令,同时在Jetson Nano平台上构建和运行生成的CUDA代码。将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将单板直接连接到主机。有关如何设置和配置您的电路板的信息,请参阅NVIDIA文档。

属性来创建活动硬件连接对象,以与NVIDIA硬件通信杰森函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。例如,当第一次连接到目标板时,使用命令为Jetson硬件创建一个活动对象:

Hwobj = jetson(“jetson-nano-name”ubuntu的ubuntu的);

在硬件活动对象创建期间,支持包执行硬件和软件检查、IO服务器安装并收集目标的外围设备信息。金宝app该信息显示在“命令窗口”中。

运行getCameraList的功能hwobj对象来查找可用的摄像机。如果此函数输出一个空表,则尝试重新连接摄像机并再次执行该函数。

camlist = getCameraList(hwobj);

检查目标板GPU环境

要验证运行此示例所需的编译器和库是否已正确设置,请使用coder.checkGpuInstall(GPU编码器)函数。

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

创建相机对象

类中的名称创建相机对象getCameraList函数。例如,如果相机被命名vi输出,imx219 6-0010使用:

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获取图像和阈值输入进行边缘检测,并返回边缘检测算法的结果。对从循环中捕获的图像调用此函数。您可以改变阈值变量得到一个合适的边缘图像。通过这种方式,您可以使用支持包的摄像机访问功能来调整适合指定摄像机的算法。金宝app

i = 1:200 img =快照(camObj);脱粒= 100;edgeImage = sobelEdgeDetectionAlg(img, thresh);图像(dispObj edgeImage);结束

若要将此示例部署为目标板上的独立应用程序,请参见在NVIDIA Jetson Nano上部署和运行带有I/O的Sobel边缘检测

清理

要删除示例文件并返回到原始文件夹,请调用清理函数。

清理