Harris角点检测
这个例子展示了如何使用边缘检测角检测的第一步。该算法适合fpga。
角点检测是用于计算机视觉系统特性在一个图像。通常第一个步骤在运动检测等应用程序,跟踪、图像配准和对象识别。
一个角落是直观地定义为两条边的交点。下面的例子使用了Harris &斯蒂芬斯算法[1]计算的简化使用哈里斯矩阵的特征值的近似值。检测算法的fpga为另一个角落,看到快速角点检测的例子。
这个示例模型提供了一个hardware-compatible算法。您可以在董事会实现这个算法使用Xilinx™Zynq™参考设计。看到角点检测和图像覆盖与Zynq-Based硬件(视觉HDL工具箱支持包Xilinx Z万博1manbetxynq-Based硬件)。
介绍
的CornerDetectionHDL.slx系统如下所示。高密度脂蛋白角落算法子系统包含一个角落探测器阻止的方法参数设置为哈里斯
。
第一步:找到梯度
哈里斯算法的第一步是找到图像中的边缘。角落探测器块使用两个梯度图像滤波器系数和产生渐变和。广场和交叉相乘形成,和。
第二步:循环过滤
第二步执行高斯滤波算法的平均水平,和在一个圆形窗口。圆形窗口的大小决定了检测的规模。块使用5 x5窗口。三个组件,块使用三个过滤器使用相同的滤波器系数。
最后一步:哈里斯矩阵形式
算法的最后一步是哈里斯矩阵特征值的估计。哈里斯矩阵是一个对称矩阵类似于协方差矩阵。的主对角线是由两个梯度的平方的平均值和。对角线元素的平均梯度向量。哈里斯矩阵:
计算来自哈里斯的响应矩阵
哈里斯的简化算法的关键是估计哈里斯矩阵的行列式的特征值减去了跟踪的平方。
在哪里通常是一个常数0.04。
角落度量响应,表示使用梯度是:
当响应大于一个预定义的阈值,检测到一个角落里:
定点设置
整体功能从输入图像输出角落度量响应是一个四阶多项式。这导致一些挑战确定定点比例计算的每一步。因为我们针对fpga内置乘数,最好的策略是让一些增长直到到达乘数的大小,然后开始量化结果在选择的基础上保持的范围内提供的乘数。
输入流是8位灰度的像素数据。计算梯度不增加太多bit-growth自过滤器内核只+ 1和- 1的系数。结果是一个不能9-bit签署定点类型。
平方和交叉相乘梯度产生签署的是18位结果,仍在完整的精度。许多常见的FPGA乘数是18位或20位输入字,所以你必须量化在下一步。
下一步是一个圆形窗口应用到三个组件使用三个图像与高斯滤波器系数。系数是量子化的适合FPGA乘数是18位的无符号数。找到最好的分数精度系数,使用fi()函数创建一个定点数只有指定的字。在这种情况下21位最好的分数比例之间由于系数矩阵的最大价值是1/8和1/16。
多项式系数= fi (fspecial (“高斯”,5个,5个,1.5),0,18)
多项式系数= 0.0144 0.0281 0.0351 0.0281 0.0144 0.0281 0.0547 0.0683 0.0547 0.0281 0.0351 0.0683 0.0853 0.0683 0.0351 0.0281 0.0547 0.0683 0.0547 0.0281 0.0144 0.0281 0.0351 0.0281 0.0144 DataTypeMode:定点:二进制扩展Signedness:无符号字:18 FractionLength: 21
仿真的结果
你可以看到,从仿真结果图片非常相似但不完全相同的。小不同的仿真结果,因为行为模型使用C整数运算规则和量化不同于HDL-ready角落检测块。
使用仿真软件万博1manbetx,您可以了解这些差异,并确定应用程序的错误是允许的。如果他们不接受,你可以增加的bit-widths运营商,尽管这增加FPGA中使用的区域。
HDL代码生成
检查并生成HDL代码中引用这个例子中,您必须有一个高密度脂蛋白编码器™许可证。
生成HDL代码,使用下面的命令。
makehdl (“CornerDetectionHDL / HDL角落算法”)
生成测试台上,使用下面的命令。注意,试验台一代需要很长时间由于大数据的大小。你可能想要减少仿真时间生成试验台。
makehdltb (“CornerDetectionHDL / HDL角落算法”)
这个模型的一部分,您可以在一个FPGA实现之间的部分像素和像素帧块。子系统称为高密度脂蛋白角落算法,其中包括所有元素的检测算法见上图。模型的其余部分,包括算法和源和汇行为角落,形成模型试验台。万博1manbetx
要进一步
Harris & Stephens算法是基于近似哈里斯的特征值矩阵如上所示。哈里斯算法使用作为一个指标,避免任何部门或平方根操作。做角点检测的另一种方法是计算实际的特征值。
分析解决方案2 x2矩阵的特征值是众所周知的,也可以用于检测。当特征值都是积极和巨大的规模,一个角落被发现。
用在我们的值我们得到:
FPGA实现重要的是注意到的重复值。我们可以计算这个值,然后结合广场。这意味着特征值算法只需要两个乘数,但以牺牲更多的蛇和减法器和一个平方根函数,这需要几个乘数。
你必须比较两个特征值一个恒定的值,以确保他们是大的。由于特征值与图像强度加大,您还需要确保他们周围都是相同的大小。你可以减去一个从另一个,并确保结果是小于一些预定义的阈值。注意到在这个减法,第一项消掉了,剩下:
你可以重新排列,非常类似于哈里斯度量上图:
扩大矩阵为:
之间的相似性特征值和哈里斯的区别指标显示哈里斯近似是如何工作的。如果你重新排列下平方根和交换迹象结果必须大于或等于一个预定义的阈值,基本上你到达哈里斯度量一些扩展。
引用
[1]c·哈里斯和m·史蒂芬斯(1988)。“一个角落和边缘检测器相结合”。第四届阿尔维愿景会议学报》上。147 - 151页。