主要内容

使用冲浪的特征提取

使用加速鲁棒功能(SURF)的对象识别由三个步骤组成:功能提取,功能描述和功能匹配。此示例执行特征提取,这是冲浪算法的第一步。此处使用的算法基于OpenSurf库实现。此示例显示了如何使用GPU CODER™通过CUDA®代码生成来解决此密集问题。

第三方先决条件

必需的

此示例生成CUDA MEX,并具有以下第三方要求。

  • 启用CUDA的NVIDIA®GPU和兼容驱动程序。

可选的

对于非MEX构建,例如静态,动态库或可执行文件,此示例具有以下其他要求。

验证GPU环境

要验证正确设置此示例所需的编译器和库是否正确设置Coder.CheckgPuinstall功能。

envcfg = coder.gpuenvconfig('主持人');envcfg.basiccodegen = 1;envcfg.quiet = 1;coder.checkgpuinstall(envcfg);

特征提取

特征提取是任何对象识别算法中的基本步骤。它是指提取有用信息的过程特征从输入图像。提取的特征必须具有代表性,具有图像的重要和独特的属性。

SurfDetect.M功能是执行特征提取的主要入口点。此功能接受8位RGB或8位灰度图像作为输入。返回的输出是提取的兴趣点的数组。此函数由以下函数调用组成,其中包含适合GPU并行化的计算:

  • convert32bitfpgray.m功能将8位RGB图像转换为8位灰度图像。如果所提供的输入已经以8位灰度格式为单位,请跳过此步骤。在此步骤之后,将8位灰度图像转换为32位浮点表示,以在GPU上启用快速计算。

  • myintegralimage.m函数计算上一步中获得的32位浮点灰度图像的积分图像。积分图像可用于简化查找图像的任何矩形区域内包含的像素之和。找到像素的总和有助于提高下一步中执行的卷积速度。

  • Fasthessian.m功能用不同尺寸的框过滤器进行卷积,并存储计算的响应。对于此示例,使用以下参数:

八度数:5
间隔数:4
阈值:0.0004
滤波器尺寸:八度1-9、15、21、27
八度2-15、27、39、51
八度3-27、51、75、99
八度4-51、99、147、195
八度5-99、195、291、387
  • nonmaxsuppression_gpu.m功能执行非最大抑制作用,以仅滤除前面获得的响应中的有用兴趣点。生成使用的内核原子操作,使用CODER.CEVAL构造。因为直接从MATLAB®调用时,此构建体不兼容,所以有两个不同的函数调用。这nonmaxsuppression_gpu.m当启用GPU代码生成时,调用函数nonmaxsuppression.m当您直接在MATLAB中执行该算法时,请调用。

最终结果是一系列的兴趣点,其中利益点是由这些字段组成的结构:

x,y(坐标),比例,方向,laplacian

读取输入图像

通过使用imread功能。

ImageFile ='peppers.png';inputImage = imread(imageFile);imshow(inputimage);

生成CUDA MEX的功能

为了生成Cuda Mex冲浪搜索函数,创建GPU编码器配置对象,然后运行代码根功能。

cfg = coder.gpuconfig('Mex');evalc('codegen -config cfg surfdetect -args {inputImage}');

在GPU上运行MEX功能

您可以调用生成的MEX功能surfdetect_mex在GPU上运行:

disp(“运行GPU编码器冲浪”);兴趣点= surfdetect_mex(inputImage);fprintf('GPU编码员冲浪发现:%d兴趣点\ n',长度(兴趣点));
发现GPU编码器冲浪GPU编码器冲浪发现:249兴趣点

描述提取的利息点

输出兴趣点SGPU是一系列提取的兴趣点。这些兴趣点在图形窗口中的输入图像上描绘。

drawipoints(imageFile,iNesivePointsgpu);

参考

  1. 克里斯托弗·埃文斯(Christopher Evans)在《打开图书馆》上的注释。

  2. 冲浪:赫伯特湾,Tinne Tuytelaars和Luc van Gool加快了强大的功能。

也可以看看

功能

对象

相关话题