主要内容

快速拐角检测

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

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

FAST算法通过测试角的潜在中心周围的圆形区域来确定是否存在角。如果一个连续的像素部分比中心加阈值更亮,或者比中心减阈值更暗,则该测试检测一个角。有关fpga的其他角落检测算法,请参阅哈里斯角检测的例子。

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

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

MATLAB快速拐角检测

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

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

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

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

v =视频阅读器(“rhinos.avi”);I = rgb2gray(readFrame(v));创建输出RGB帧Y = repmat(I,[1 1 3]);角= detectFASTFeatures(I,“minContrast”, 15/255,“minQuality”, 1/255);locs =角。位置;2 = 1:尺寸(loc, 1) Y(地板(loc(2, 2)),地板(loc) (2, 1), 2) = 255;%绿点结束imshow (Y)

FAST算法的局限性

其他角检测方法的工作原理与FAST方法非常不同,一个令人惊讶的结果是FAST不能检测计算机生成的图像上的角,这些图像完美地对准了图像x而且y轴。由于检测到的角必须在中心周围有一圈较深或较浅的像素值,其中包括角的两个边缘,因此清晰的图像效果不佳。例如,在Harris中使用的输入图像上尝试FAST算法哈里斯角检测的例子。

I = imread(“cornerboxes.png”);Ig = rgb2gray(I);角= detectFASTFeatures(Ig,“minContrast”, 15/255,“minQuality”, 1/255)
corners = 0x1 corners带有属性的点数组:位置:[0x2 single]度量:[0x1 single]计数:0

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

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

验证行为模型

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

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

MATLAB函数块中的代码必须生成C代码或在外部声明。外部声明允许指定的函数在MATLAB中运行,而其余的MATLAB函数块在Simulink中运行。金宝app的detectFASTFeatures函数不支持代码生成,因此MATLAB金宝app函数块必须使用外部辅助函数。

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

函数Y = FASTHelper(I,minContrast);拐角= detectFASTFeatures(I(:,:,1),“minContrast”、双(minContrast) / 255,“minQuality”, 1/255);locs =角。位置;2 = 1:尺寸(loc, 1) Y(地板(loc(2, 2)),地板(loc) (2, 1), 2) = 255;%绿点结束结束

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

函数Y = fcn(I,minContrast) code .extrinsic(“FASTHelper”);Y = i;Y = FASTHelper(I,minContrast);结束

HDL的实现

在此模型中的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代码生成。金宝app

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

检测角点

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

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

非最大抑制

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

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

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

对齐和叠加

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

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

要进一步

非最大抑制算法可以通过遵循梯度和使用多通道策略来改进,但这种计算也会占用更多的硬件资源。

结论

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

参考文献

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

[2]罗斯滕,E.和T.德拉蒙德。计算机视觉- ECCV 2006计算机科学课堂讲稿,2006,430 -43。doi: 10.1007 / 11744023 _34。