软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! 11.1 概述本章向大家介绍了如何利用HLS来实现快速角点检测算法,快速角点检测可以用于特征提取,因此具有很大的实用性,最后利用我们的开发板对其进行了验证,通过本章,大家应该掌握利用HLS来进行基本的算法开发,这也将大大的节省我们的开发时间。 11.2 角点定义 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。也称为特征点检测。 在我们解决问题时,往往希望找到特征点,“特征”顾名思义,指能描述物体本质的东西,还有一种解释就是这个特征微小的变化都会对物体的某一属性产生重大的影响。而角点就是这样的特征。 特征检测与匹配是Computer Vision 应用中重要的一部分,这需要寻找图像之间的特征建立对应关系。点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner)。 关于角点的具体描述可以有几种:
11.3 角点检测算法11.3.1 Moravec角点检测算法 Moravec角点检测算法是最早的角点检测算法之一。该算法将角点定义为具有低“自相关性”的点。算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。这种相关性通过两个patch间的平方差之和(SSD)来衡量,SSD值越小则相似性越高。 11.3.2 Harris角点检测当一个窗口在图像上移动,在平滑区域如图(a),窗口在各个方向上没有变化。在边缘上如图(b),窗口在边缘的方向上没有变化。在角点处如图(c),窗口在各个方向上具有变化。Harris角点检测正是利用了这个直观的物理现象,通过窗口在各个方向上的变化程度,决定是否为角点。 将图像窗口平移[u,v]产生灰度变化E(u,v)
11.3.3 FAST角点检测算法Smith 和 Brady在1997年提出了一种完全不同的角点提取方法,即“SUSAN (Smallest UnivalueSegment AssimilatingNucleus)”提取算子。SUSAN 提取算子的基本原理是,与每一图像点相关的局部区域具有相同的亮度。如果某一窗口区域内的每一像元亮度值与该窗口中心的像元亮度值相同或相似,这一窗口区域将被称之为“USAN”。计算图像每一像元的“USAN”,为我们提供了是否有边缘的方法。位于边缘上的像元的“USAN”较小,位于角点上的像元的“USAN”更小。因此,我们仅需寻找最小的“USAN”,就可确定角点。该方法由于不需要计算图像灰度差,因此,具有很强的抗噪声的能力。 Edward Rosten and TomDrummond 在2006年提出了一种简单快速的角点探测算法,该算法检测的角点定义为在像素点的周围邻域内有足够多的像素点与该点处于不同的区域。应用到灰度图像中,即有足够多的像素点的灰度值大于该点的灰度值或者小于该点的灰度值。 考虑下图中p点附近半径为3的圆环上的16个点,一个思路是若其中有连续的12个点的灰度值与p点的灰度值差别超过某一阈值,则可以认为p点为角点。 这一思路可以使用机器学习的方法进行加速。对同一类图像,例如同一场景的图像,可以在16个方向上进行训练,得到一棵决策树,从而在判定某一像素点是否为角点时,不再需要对所有方向进行检测,而只需要按照决策树指定的方向进行2-3次判定即可确定该点是否为角点。 在本章节的HLS实现中我们主要介绍FAST角点检测,很多传统的算法都很耗时,而且特征点检测算法只是很多复杂图像处理里中的第一步,得不偿失。FAST特征点检测是公认的比较快速的特征点检测方法,只利用周围像素比较的信息就可以得到特征点,简单,有效。 FAST特征检测算法来源于corner的定义,这个定义基于特征点周围的图像灰度值,检测候选特征点周围一圈的像素值,如果候选点周围领域内有足够多的像素点与该候选点的灰度值差别够大,则认为该候选点为一个特征点。 其中I(x)为圆周上任意一点的灰度,I(p)为圆心的灰度,Ed为灰度值差得阈值,如果N大于给定阈值,一般为周围圆圈点的四分之三,则认为p是一个特征点。 11.4 HLS实现11.4.1 工程创建Step1:打开HLS,按照之前介绍的方法,创建一个新的工程,命名为fast_corner。 Step2:右单击Source选项,选择New File,创建一个名为Top.cpp的文件。 Step3:在打开的编辑区中,把下面的程序拷贝进去:
Step4:再在Source中添加一个名为Top.h的库函数,并添加如下程序:
Step5:在Test Bench中,用同样的方法添加一个名为Test.cpp的测试程序。添加如下代码:
Step6:在Test Bench中添加一张名为test_1080P.bmp的测试图片,图片可以在我们提供的源程序中的Image文件夹中找到。完整的工程如下图所示: 11.4.2 仿真及优化Step1:单击Project settings快捷键。 Step2:选择Synthesis选项,然后点击Browse..指定一个顶层函数。 Step3:选定hls_fast_corner为顶层函数,然后点击OK。 Step4:再次单击OK,完成工程的修改。 综合报告如下:
最新评论资讯幻灯片
热门评论
热门专题
排行榜
XILINX 官网|站点统计|Archiver|手机版|米联客品牌主页|UISRC工程师开源站 ( 苏ICP备19046771号-2 ) GMT+8, 2025-4-2 15:28 , Processed in 0.262059 second(s), 87 queries . |