在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电路板。
开发主机要求
CUDA启用NVIDIA GPU。
NVIDIA CUDA工具包和驱动程序。
编译器和库的环境变量。有关编译器和库的受支持版本的信息,请参见第三方硬件.有关设置环境变量,请参见设置必备产品2022世界杯八强谁会赢?.
在主机上验证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硬件上构建和运行可执行文件
- 使用GPU编码器应用程序在NVIDIA硬件上构建和运行可执行文件
- 停止或重新启动在NVIDIA硬件上运行的可执行文件(NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)
- 在NVIDIA硬件上运行Linux命令(NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB Coder支持包)