主要内容

快速角点检测

这个例子展示了如何执行角落检测使用features-from-accelerated-segment测试(FAST)算法。快速算法决定了如果一个角落存在通过测试一个圆形区域潜在的中心。测试检测到一个角落里如果一个相邻的像素比中心加一个阈值或深色比中心-一个阈值。该算法适合fpga。检测算法的fpga为另一个角落,看到Harris角点检测的例子。

在软件实现该算法允许一个快速测试排除潜在的角落只沿着轴测试四个像素。软件算法只执行完整的测试,如果快速测试通过。硬件并行实现可以很容易地执行所有的测试一个快速测试不是特别有利,不包括在这个例子。

可以使用快速算法在许多大小或规模。这个例子使用sixteen-pixel圆检测到角落。在这些16像素,如果有九个相邻像素满足光明或黑暗限制然后检测到一个角落里。

MATLAB快速检测角点

计算机视觉系统工具箱™包括软件快速角点检测算法detectFASTFeatures函数。本例中使用这个函数作为行为模型来比较在仿真软件对硬件的快速算法设计®。金宝app函数参数设置的最低对比度和最低质量。

最低的对比参数的阈值被添加或减去从中心像素值之前比较像素的戒指。

最低质量参数控制检测到角落“强劲”足以被标记为实际的角落。强度指标在最初的快速论文是基于加法不同像素的圆形区域中央像素[2]。后来版本的这个算法使用不同的强度指标基于最小的像素值的变化将使检测不再一个角落。detectFastFeatures使用最小变化指标。

这段代码读取视频的第一帧,将其转换为灰度,并调用detectFASTFeatures。结果是一个向量的角落位置。显示角落位置,使用向量在角落里画明亮的绿点像素的输出帧。

v = VideoReader (“rhinos.avi”);我= rgb2gray (readFrame (v));%创建RGB输出帧Y = repmat(我[1 1 3]);角落= detectFASTFeatures(我“minContrast”,15/255,“minQuality”,1/255);loc = corners.Location;2 = 1:尺寸(loc, 1) Y(地板(loc(2, 2)),地板(loc) (2, 1), 2) = 255;%绿点结束imshow (Y)

快速算法的限制

其他角检测方法工作非常不同于快速方法和一个令人惊讶的结果是快不检测角落计算机生成的图像是完全一致的xy轴。自从发现角落里必须有一个变深或变浅环围绕中心像素值,包括边缘的角落里,不工作的清晰图像。例如,试着输入图像上的快速算法用于哈里斯Harris角点检测的例子。

我= imread (“cornerboxes.png”);Ig = rgb2gray(我);角落= detectFASTFeatures(搞笑,“minContrast”,15/255,“minQuality”,1/255)
角落= 0 x1 cornerPoints数组属性:位置:[0 x2单]度量:[0 x1单]数:0

可以看到,函数检测零角落。因为对比的快速算法需要一枚戒指像素超过一半的中心。在计算机生成的图像,边缘一个盒子在一个角落里都是环的像素,所以测试失败的一个角落里。这个问题一个变通方法是添加模糊(通过应用高斯滤波器)的图像,这样角落不太精确,但可以检测到。模糊后,现在的快速算法检测到超过100。

h = fspecial (“高斯”5);Ig = imfilter(搞笑,h);角落= detectFASTFeatures(搞笑,“minContrast”,15/255,“minQuality”,1/255)loc = corners.Location;2 = 1:尺寸(loc, 1)我(地板(loc(2, 2)),地板(loc) (2, 1), 2) = 255;%绿点结束imshow(我)
角落= 136 x1 cornerPoints数组属性:位置:[136 x2单]指标:x1单[136]数:136

行为模型的验证

使用的仿金宝app真软件模型detectFASTFeatures作为行为模型来验证硬件算法的结果。您可以使用MATLAB函数运行在仿真软件MATLAB代码块。金宝app

modelname =“FASTCornerHDL”;open_system (modelname);set_param (modelname“SampleTimeColors”,“上”);set_param (modelname“SimulationCommand”,“更新”);set_param (modelname“开放”,“上”);集(allchild (0)“可见”,“关闭”);

MATLAB函数块中的代码生成C代码或必须宣布外在。外在声明允许指定的函数运行在MATLAB的仿真软件MATLAB运行功能块。金宝app的detectFASTFeatures功能不支持代码生成,所以MATLAB金宝app函数块必须使用一个外在的helper函数。

帧的视觉对比,对比不同参数的能力,辅助函数接受一个输入图像和最低对比度作为输入。它返回一个输出图像与绿点标志着发现角落。

函数minContrast Y = FASTHelper(我),Y =我;角落= detectFASTFeatures(我(:,:1),“minContrast”、双(minContrast) / 255,“minQuality”,1/255);loc = corners.Location;2 = 1:尺寸(loc, 1) Y(地板(loc(2, 2)),地板(loc) (2, 1), 2) = 255;%绿点结束结束

MATLAB功能块必须有一个大小定义为输出数组。一个快速定义输出大小的方法是将输入复制到输出在调用helper函数之前。这是MATLAB函数内的代码块:

函数Y = fcn(我minContrast) coder.extrinsic (“FASTHelper”);Y =我;Y = FASTHelper(我minContrast);结束

实现高密度脂蛋白

远景HDL实现的快速算法工具箱角落探测器块在这个模型中测试9环16像素的相邻像素,并比较它们的值到中心像素值。一个内核的7 x7像素周围的每个测试像素包括16-pixel戒指。图16显示了该环中心像素和像素周围,用于测试。从上环像素,顺时针,

指数=[22日29日37 45 46 47 41 35 28日21日13 5 4 3 9 15);

这些像素指数用于选择和比较。订单必须是连续的,但戒指可以在任何时候。

指标计算后角落使用这些戒指的像素,该算法决定了最大角指标在每个地区和抑制其他角落。然后该模型覆盖non-suppressed角落标记到原始输入图像。

FASTHDLAlgorithm子系统的硬件算法。这个子系统支持HDL代码生成。金宝app

open_system ([modelname' / FASTHDLAlgorithm '),“力”);

检测角点

确定存在的一个角落,寻找所有可能中相邻段的戒指值大于或小于阈值。

在硬件中,您可以执行所有这些比较并行执行。每个比较器块扩展到16个比较器。16块的输出二进制决定代表每一部分的戒指。

非最大抑制

快速算法识别许多潜在的角落。减少后续处理,除了各个角落的角落最大角落度量可以删除一个特定地区或抑制。有许多算法对于非最大抑制适用于软件实现,但是很少有适合的硬件。使用软件,基于一个梯度的方法,可以在硬件资源密集型。在这个模型中一个简单但非常有效的技术指标比较角落5 x5内核和产生一个布尔结果。布尔的输出是真的如果角落规内核大于零的中心(即它是一个角落),也是最大的指标在所有其他角落5 x5地区。大于零的条件匹配设置minQuality1detectFASTFeatures函数。

由于处理的像素流从左到右和从上到下,结果包含一些定向效应,如发现角落并不总是完美结合的对象。NonMaxSuppress子系统包括一个常数块,允许您禁用抑制和想象完成的结果。

open_system ([modelname“/ FASTHDLAlgorithm / NonMaxSuppress”),“力”);

对齐和覆盖

在NonMaxSuppress子系统的输出像素流包括标记在每5 x5地区最强的角落。接下来,与原像素模型重新发现角落流使用像素流对准器块。原始流和标记对齐后,模型覆盖角落上的绿点。覆盖子系统包含一个alpha混合颜色和α值的常量。

观众的输出显示检测到角落的覆盖绿点。行为视频查看器显示的输出detectFastFeatures功能,高密度脂蛋白HDL的视频查看器显示了输出算法。

要进一步

非最大抑制算法可以改善使用多程按照梯度和策略,但这计算也将使用更多的硬件资源。

结论

这个例子展示了如何开始使用detectFASTFeatures在MATLAB,然后再为FPGA仿真软件部分的设计。金宝app角落里的硬件算法检测器块包含一个测试中心像素周围的环的内核,强度指标和角落。模型使用一个非最大抑制函数来删除所有但发现最强的角落。设计然后覆盖的角落位置到原始视频输入,突出绿色的角落。

引用

[1]Rosten E。,和T. Drummond. "Fusing Points and Lines for High Performance Tracking" Proceedings of the IEEE International Conference on Computer Vision, Vol. 2 (October 2005): pp. 1508-1511.

[2]Rosten E。,和T. Drummond. "Machine Learning for High-Speed Corner Detection" Computer Vision - ECCV 2006 Lecture Notes in Computer Science, 2006, 430-43. doi:10.1007/11744023_34.