使用加速鲁棒特征(SURF)的对象识别由三个步骤组成:特征提取、特征描述和特征匹配。此示例执行特征提取,这是SURF算法的第一步。此处使用的算法基于OpenSURF库实现。此示例演示如何使用GPU编码器™ 通过CUDA®代码生成解决这一计算密集型问题。
要求的
此示例生成CUDA MEX,并具有以下第三方要求。
支持CUDA的NVIDIA®GPU和兼容驱动程序。
可选择的
对于非MEX构建,如静态、动态库或可执行文件,此示例具有以下附加要求。
NVIDIA工具包。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件和设置必备产品下载188bet金宝搏.
要验证运行此示例所需的编译器和库是否正确设置,请使用coder.checkGpuInstall
作用
envCfg=coder.gpuEnvConfig(“主持人”); envCfg.BasicCodegen=1;envCfg.Quiet=1;编码器。检查GPUInstall(envCfg);
特征提取是任何目标识别算法中的一个基本步骤,它指的是提取有用信息的过程特征从输入图像中提取。提取的特征必须具有代表性,携带图像的重要和独特属性。
这个SurfDetect.m函数是执行特征提取的主要入口点。此函数接受8位RGB或8位灰度图像作为输入。返回的输出是提取的兴趣点数组。此函数由以下函数调用组成,其中包含适合GPU并行化的计算:
这个Convert32bitFPGray.m函数将8位RGB图像转换为8位灰度图像。如果提供的输入已经是8位灰度格式,请跳过此步骤。完成此步骤后,8位灰度图像将转换为32位浮点表示,以便在GPU上实现快速计算。
这个myintegrationimage.m函数计算在上一步中获得的32位浮点灰度图像的积分图像。积分图像有助于简化查找包含在图像任何矩形区域内的像素和的过程。查找像素和有助于提高下一步执行卷积的速度。
这个FastHessian.m函数使用不同大小的盒式过滤器对图像进行卷积,并存储计算出的响应。对于本例,请使用以下参数:
八度音阶数:5
间隔次数:4
阈值:0.0004
滤波器尺寸:倍频程1-9、15、21、27
八度音阶2-15,27,39,51
八度音阶3-27,51,75,99
八度音阶4-5199147195
倍频程5-99195291387
这个非轴抑制\gpu.m函数执行非最大抑制,以仅从先前获得的响应中过滤出有用的兴趣点。生成使用原子加法
操作时,请使用塞瓦尔编码员
由于直接从MATLAB®调用此构造时不兼容,因此有两种不同的函数调用非轴抑制\gpu.m当启用GPU代码生成且非轴抑制在MATLAB中直接执行算法时调用。
这个方向计算器函数计算并为上一步中的兴趣点指定方向。
最终结果是兴趣点数组,其中兴趣点是由以下字段组成的结构:
x、 y(坐标)、比例、方向、拉普拉斯
使用伊姆雷德
作用
图像文件=“peppers.png”; inputImage=imread(图像文件);imshow(输入图像);
要生成CUDA MEX,请执行以下操作:冲浪探测
函数,创建GPU编码器配置对象,然后运行编码基因
作用
cfg=coder.gpuConfig(“墨西哥”);评估('codegen-config cfg SurfDetect-args{inputImage}');
您可以调用生成的MEX函数冲浪运动
要在GPU上运行,请执行以下操作:
disp(“运行GPU编码器冲浪”); 兴趣点sgpu=表面检测_mex(输入图像);fprintf('找到GPU编码器浏览:%d个兴趣点\n',长度(利息点sgpu));
运行GPU编码器SURF GPU编码器SURF发现:249个兴趣点
输出兴趣点
是提取的兴趣点的数组。这些兴趣点在图形窗口中的输入图像上描绘。
DrawIpoints(图像文件、兴趣点GPU);
Christopher Evans关于OpenSURF库的注释。
冲浪:由赫伯特·贝、蒂恩·图伊特拉尔斯和吕克·凡·古尔设计的加速强大功能。
编码基因
|coder.gpu.kernel
|coder.gpu.kernelfun
|gpucoder.matrixMatrix内核
|coder.gpu.constantMemory
|gpucoder.stencilKernel
|coder.checkGpuInstall