主要内容

快速角点检测

这个例子展示了如何使用加速片段测试(FAST)算法执行角点检测。该算法适用于fpga。

角点检测在计算机视觉系统中用于发现图像中的特征。它通常是运动检测、跟踪、图像配准和目标识别等应用程序的第一步。

FAST算法通过测试角的潜在中心周围的圆形区域来确定是否存在一个角。如果像素的连续部分比中心加阈值亮或比中心减阈值暗,则测试检测出一个角。关于fpga的另一个角落检测算法,请参见Harris角点检测的例子。

在软件实现中,FAST算法允许快速测试,只通过测试沿轴的四个像素来排除潜在的角落。软件算法只在快速测试通过的情况下执行完整测试。硬件实现可以轻松地并行执行所有测试,因此快速测试并不是特别有利,因此本例中没有包括它。

FAST算法可以在许多规模或规模下使用。这个例子使用一个16像素的圆来检测角。在这16个像素中,如果任何9个相邻像素满足较亮或较暗的限制,则检测到一个角。

MATLAB快速拐角检测

计算机视觉系统工具箱™包含一个软件快速角检测算法detectFASTFeatures函数。本例将此函数作为行为模型,与Simulink®硬件的FAST算法设计进行比较。该函数具有设置最小对比度和最小质量的参数。

最小对比度参数是在与像素环进行比较之前从中心像素值增加或减去的阈值。

最小质量参数控制检测角是“强”到足以标记为实际角。原始FAST论文中的强度度量是基于圆形区域像素与中心像素[2]的差值相加。该算法的后期版本使用不同的强度度量,基于像素值的最小变化,这将使检测不再是一个角落。detectFastFeatures使用变化最小的度量。

这段代码读取视频的第一帧,将其转换为灰度,并调用detectFASTFeatures.结果是一个角的位置向量。要显示角的位置,使用矢量在输出帧的角像素上绘制亮绿色的圆点。

v = VideoReader (“rhinos.avi”);我= rgb2gray (readFrame (v));%创建输出RGB帧Y = repmat(I,[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)

FAST算法的局限性

其他角检测方法的工作方式与FAST方法非常不同,一个令人惊讶的结果是FAST不能检测计算机生成的图像上完美对齐的角x而且y轴。由于检测到的角必须在中心周围有一个较暗或较浅的像素值环,其中包括角的两个边缘,所以清晰的图像不能很好地工作。例如,在Harris中使用的输入图像上尝试FAST算法Harris角点检测的例子。

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

您可以看到,该函数检测到零角。这是因为FAST算法需要一个围绕圆心超过一半的对比度像素环。在计算机生成的图像中,一个角的盒子的两个边都在所用的像素环内,因此对一个角的测试失败。解决这个问题的方法是在图像上添加模糊(通过应用高斯滤波器),这样拐角就不那么精确了,但可以被检测到。经过模糊处理后,FAST算法现在检测到超过100个角落。

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

验证行为模型

Simulink模型使用detectFASTFeatures作为一个行为模型来验证硬件算法的结果。可以使用MATLAB函数块在Simulink中运行MATLAB代码。

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

MATLAB函数块中的代码要么必须生成C代码,要么必须声明为外部的。外部声明允许指定的函数在MATLAB中运行,而MATLAB函数块的其余部分在Simulink中运行。的detectFASTFeatures函数不支持代码生成,因此MATLAB函数块必须使用外部帮助函数。

对于逐帧视觉比较以及改变对比度参数的能力,helper函数将输入图像和最小对比度作为输入。它返回一个输出图像,用绿色圆点标记检测到的角。

函数Y = fastthelper (I,minContrast) Y = I;角落= 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(I,minContrast) code . external (“FASTHelper”);Y =我;Y = FASTHelper(我minContrast);结束

实现高密度脂蛋白

在这个模型中,在Vision HDL Toolbox Corner Detector块中实现的FAST算法从一个16像素的环中测试9个相邻像素,并将它们的值与中心像素值进行比较。一个内核的7 x7每个测试像素周围的像素包括16像素环。该图表显示了用于测试的中心像素和围绕它的16像素环。环像素,从顶部到中部顺时针方向,是

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

这些像素索引用于选择和比较。顺序必须是连续的,但环可以从任何点开始。

在使用这些像素环计算角度量后,算法确定每个区域的最大角度量,并抑制其他检测到的角。然后,模型将非抑制角标记覆盖到原始输入图像上。

硬件算法在FASTHDLAlgorithm子系统中。该子系统支持HDL代码生成。

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

检测角点

要确定角的存在,请查找环上所有可能的9像素连续段,这些段的值大于或小于阈值。

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

非最大抑制

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

由于像素流的处理是从左到右,从上到下,结果包含一些方向的影响,例如,检测到的角并不总是与对象完美对齐。NonMaxSuppress子系统包含一个常量块,允许禁用抑制并可视化完整的结果。

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

对齐和覆盖

在NonMaxSuppress子系统的输出,像素流包括每个5x5区域中最强角的标记。接下来,该模型使用像素流校准器块将检测到的角与原始像素流进行校准。在原始流和标记及时对齐后,模型在角落上覆盖一个绿点。Overlay子系统包含一个alpha混合器,它带有颜色和alpha值的常量。

输出查看器显示所检测到的角的重叠绿点。的输出detectFastFeatures函数,HDL视频查看器显示HDL算法的输出。

要进一步

非最大抑制算法可以通过跟随梯度和使用多通道策略来改进,但这样的计算也将使用更多的硬件资源。

结论

这个例子展示了如何开始使用detectFASTFeatures然后转到Simulink进行FPGA部分的设计。角点检测模块的硬件算法包括对核中中心像素周围环的测试和角点强度的度量。该模型使用非最大抑制函数去除除最强检测角外的所有角。然后,该设计将角的位置覆盖到原始视频输入上,用绿色突出显示角。

参考文献

[1]罗斯滕,E,和t。德拉蒙德。“用于高性能跟踪的融合点和线”IEEE计算机视觉国际会议论文集,卷2(2005年10月):1508-1511页。

[2]罗斯滕,E,和t。德拉蒙德。“高速角点检测的机器学习”计算机视觉- ECCV 2006计算机科学讲座笔记,2006,430-43。doi: 10.1007 / 11744023 _34。

Baidu
map