Sobel边缘检测在NVIDIA杰森Nano使用覆盆子π相机模块V2
这个例子向您展示了如何捕捉和处理图像从一个覆盆子π相机模块V2连接到NVIDIA®杰森Nano。MATLAB®编码器™支持包NVIDI万博1manbetxA杰森和NVIDIA驱动平台允许您捕获图像的相机模块V2,带他们到MATLAB环境中进行处理。在本例中您将了解如何开发一个Sobel边缘检测算法通过使用这种能力。
先决条件
目标板需求
英伟达杰森Nano嵌入式平台。
覆盆子π相机模块V2的CSI主机端口连接到目标。
以太网交叉电缆来连接目标板和主机PC(如果你本地网络不能连接目标板)。
NVIDIA CUDA工具包安装在董事会。
V4L2和SDL (v1.2)库。
GStreamer库在黑板上。
环境变量的目标编译器和库。有关更多信息,请参见安装和设置先决条件NVIDIA董事会。
开发主机需求
对CUDA GPU编码器代码生成。教程,看看开始使用GPU编码器(GPU编码器)。
NVIDIA CUDA工具包在主机。
环境变量的编译器和库。有关更多信息,请参见第三方硬件(GPU编码器)和设置必备产品s manbetx 845(GPU编码器)。
创建一个文件夹,复制有关文件
下面的代码创建了一个文件夹在您当前的工作目录主机和所有相关文件复制到这个文件夹。如果你不能生成文件在这个文件夹中,在运行此命令之前,改变当前工作目录。
nvidiademo_setup (“sobel_edge_detection”);
连接到NVIDIA杰森Nano
支持包使万博1manbetx用SSH连接的TCP / IP来构建和运行时执行命令生成的CUDA在杰森纳米平台代码。将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。信息如何设置和配置你的董事会,看到英伟达文档。
与NVIDIA硬件进行通信,通过创建一个生活硬件连接对象杰森
函数。你必须知道主机名或IP地址,用户名和密码的目标板创建一个生活硬件连接对象。例如,当连接到目标板第一次创建一个活动对象为杰森硬件使用命令:
hwobj =杰森(“jetson-nano-name”,ubuntu的,ubuntu的);
在硬件生活对象创建,支持包执行硬件和软件检查,IO服务器安装,收集周边信息的目标。万博1manbetx这些信息显示在命令窗口。
运行getCameraList
的函数hwobj
对象找到可用的相机。如果这个函数输出一个空表,然后再次尝试将相机和执行功能。
camlist = getCameraList (hwobj);
验证GPU环境目标板上
验证所需的编译器和库运行这个示例设置正确,使用coder.checkGpuInstall
(GPU编码器)函数。
envCfg = coder.gpuEnvConfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
创建一个相机对象
创建一个相机对象使用的名字getCameraList
函数。例如,如果相机命名vi-output imx219 6 - 0010
使用:
camObj =相机(hwobj,“vi-output imx219 6 - 0010”480年[640]);
camObj
是一个相机对象的句柄。显示来自摄像机的图像捕获模块V2在MATLAB中,使用这些命令:
为我= 1:10 0 img =快照(camObj);显示亮度图像(img);drawnow;结束
这个相机对象捕捉RGB三路和灰度图像。
创建一个显示对象
创建一个显示对象,使用imageDisplay
函数。使用这个对象是一个系统对象imshow
在MATLAB函数来显示图像。
dispObj = imageDisplay (hwobj);img =快照(camObj);图像(dispObj, img);
Sobel边缘检测算法
Sobel边缘检测算法是一个二维空间梯度的操作在一个灰度图像。这个操作强调高空间频率区域pf图像对应于边缘。
计算梯度
发现水平梯度(h)和垂直梯度(v)的输入图像各自Sobel内核。这两个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
获取图像边缘检测和阈值输入和返回结果的边缘检测算法。调用这个函数的图像捕获在一个循环。你可以改变阈值变量打
得到一个合适的图像边缘。这样你可以使用相机支持包的访问能力优化算法适用于指定的相机。万博1manbetx
为我= 1:200 img =快照(camObj);打= 100;edgeImage = sobelEdgeDetectionAlg (img,打);图像(dispObj edgeImage);结束
这个例子作为一个独立的应用程序部署在目标板上,看到的部署和运行Sobel边缘检测与I / O NVIDIA杰森Nano。
清理
删除示例文件并返回到原来的文件夹中,调用清理
函数。
清理