利用树莓派相机模块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板的安装和设置先决条件.
开发主机要求
用于CUDA代码生成的GPU编码器。有关教程,请参见开始使用GPU编码器(GPU编码器).
主机上的NVIDIA CUDA工具包。
编译器和库的环境变量。有关更多信息,请参见第三方硬件(GPU编码器)而且设置必备产品下载188bet金宝搏(GPU编码器).
创建一个文件夹并复制相关文件
下面这行代码在主机上的当前工作文件夹中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹中生成文件,请先更改当前工作文件夹再执行此命令。
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边缘检测.
清理
要删除示例文件并返回到原始文件夹,请调用清理
函数。
清理