主要内容

在NVIDIA Jetson TX2开发工具包上去除不均匀背景照明的顶帽滤波

此示例展示如何使用NVIDIA GPU的GPU Coder™支持包将图像处理工具箱™算法部署到NVIDIA®Jetson TX2板。的imtophat(图像处理工具箱)以对灰度图像执行形态顶帽滤波的函数为例来演示这一概念。顶帽滤波计算图像的形态开口(使用imopen(图像处理工具箱)),然后从原始图像中减去结果。生成的CUDA®代码使用共享内存来加速GPU上的操作。

先决条件

目标板要求

  • NVIDIA Jetson TX2嵌入式平台。

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

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

  • 目标上的OpenCV库用于读取和显示图像和视频。

  • 目标上用于编译器和库的环境变量。有关编译器和库的支持版本及其设置的信息,请参见NVIDIA板的安装和设置先决条件(NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)用于NVIDIA电路板。

开发主机要求

在主机上验证NVIDIA支持包的安装

使用checkHardwareSupportPackageInstall函数验证主机系统与运行此示例兼容。

checkHardwareSupportPackageInstall ();

连接到NVIDIA硬件

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

要与NVIDIA硬件通信,必须使用杰森(NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。

hwobj =杰森(“主机”“用户名”“密码”);

当不同目标有多个活动连接对象时,代码生成器将在为其创建最近活动对象的目标上执行远程构建。若要选择执行远程构建的硬件板,请使用setupCodegenContext ()各自活动硬件对象的方法。如果只创建了一个活动连接对象,则没有必要调用此方法。

hwobj.setupCodegenContext;

检查GPU环境

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

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

imtophat入口点函数

imtophatDemo_gpu.m调用imtophat在内部。的imtophat函数对图像执行形态打开imopen(图像处理工具箱)函数。图像的结果从原始图像中减去。的imopen操作基本上是imerode(图像处理工具箱)操作之后imdilate(图像处理工具箱)

这个例子显示在输入的灰度图像上。

原文= imread(“rice.png”);imshow(原始)、标题(“顶帽过滤输入”);

创建一个半径为12的圆盘形结构元素。邻居,Nhood作为imtophat函数的输入参数传递。

Se = strel(“磁盘”12);Nhood = se.Neighborhood;类型imtophatDemo_gpu
function [out] = imtophatDemo_gpu(img,Nhood,ocvFlag) %#codegen % Copyright 2019-2021 The MathWorks, Inc. code .gpu.kernelfun;这个例子使用OpenCV读取图像并显示输出图像。更新buildinfo链接到目标上可用的% OpenCV库。如果ocvFlag % OpenCV 4 flags opencv_compile_flags = ' ' ppg -config——cflags——libs opencv4 ";Opencv_link_flags = ' ' pkg-config——libs opencv4 ";OpenCV 3 flags opencv_compile_flags = ' ' ppg -config——cflags——libs OpenCV ";Opencv_link_flags = ' ' pkg-config——libs opencv ";结束coder.updateBuildInfo (addLinkFlags, opencv_link_flags);coder.updateBuildInfo (addCompileFlags, opencv_compile_flags);out = imtophat(img,Nhood); end

获取目标上的OpenCV版本

使用pkg-config帮助工具查询是否OpenCV 4。目标板上已安装X。本例使用该信息更新构建信息,以链接到目标上可用的适当OpenCV库。

试一试OpenCVver = strtrim(system(hwobj,——modversion opencv4));isOpenCV4 = 1;OpenCVver = strtrim(system(hwobj,modversion opencv));isOpenCV4 = 0;结束

在目标上生成和部署CUDA代码

这个例子使用了imtophatDemo_gpu.m作为代码生成的入口点函数。要生成CUDA可执行文件,请创建一个GPU代码配置对象。

cfg = code . gpuconfig (exe”);

使用coder.hardware函数为Jetson平台创建配置对象并将其分配给硬件GPU代码配置对象的属性cfg

cfg。硬件= code . Hardware (英伟达杰森的);

自定义main_tophat.cu文件是调用imtophatDemo_gpu生成代码中的入口点函数。使用OpenCV接口将后处理步骤添加到主文件中。包含OpenCV库的Build FlagsimtophatDemo_gpu.m入口点函数。

cfg。CustomSource = fullfile(“main_tophat.cu”);

要生成CUDA代码,请使用codegen函数并传递GPU代码配置对象和输入参数。在这一步中,CUDA代码在主机上生成,生成的文件被复制并构建在目标的工作区目录中。工作区目录作为属性可用,workspaceDir在硬件对象中,hwobj

codegenarg游戏{原始,coder.Constant (Nhood) coder.Constant (isOpenCV4)}配置cfgimtophatDemo_gpu报告

在目标上运行应用程序

这个应用程序以灰度图像作为输入。将rice.png文件从主机复制到目标设备putFile命令。

imgLoc = which(“rice.png”);hwobj.putFile (imgLoc hwobj.workspaceDir);

使用runApplication在目标硬件上启动应用程序的硬件对象的方法。

hwobj.runApplication (“imtophatDemo_gpu”“rice.png”);

Jetson TX2上的顶帽过滤图像

终止应用程序

使用killApplication硬件对象的方法来终止目标上正在运行的应用程序。

hwobj.killApplication (“imtophatDemo_gpu”);

另请参阅

对象

  • (NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)|(NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)

相关的话题

Baidu
map