一种改进的自适应FAST 角点检测算法

2022-09-09 03:17刘志海
现代电子技术 2022年17期
关键词:角点中心点像素点

刘志海,尹 翔

(山东科技大学 交通学院,山东 青岛 266590)

0 引 言

特征点提取是特征匹配、图像识别和目标跟踪等计算机图像处理项目中应用最广泛的方法之一。对于图像中的特征点而言,角点可以说是特征点中最有检测价值的特征点,图像的分层、前景背景分离,以及检测物体的边缘等都会用到角点。

在人工智能、无人驾驶、视觉SLAM(Simultaneous Localization and Mapping)等先进领域,尤其是在经典的ORB_SLAM 中,FAST 角点检测算法的使用较多,对该算法的研究和改进也是较为热门的。经过长时间的发展,适应各种情况下的各类角点检测算法纷纷产生,大部分的角点检测算法都以灰度化处理后的图像为检测基础,相对于彩色图像,灰度图像在检测速度方面有显著提升,并且依靠灰度值明显的分层变化来区分角点。

目前应用广泛的角点检测算法有FAST 角点检测算法、Harris 角点检测算法和Susan 角点检测算法。但是FAST 角点检测算法本身存在单一阈值无法兼顾适应整幅图像的所有区域的问题。阈值的设定为固定值对角点的检测影响很大,而该算法的阈值相对来说依赖于经验,不适用于整幅图像。现有的算法中,角点的数据冗余、漏检和错检的情况十分明显,这不仅会降低算法的检测速度,也会降低检测的正确率。所以本文提出一种基于OTSU 的区域自适应FAST 角点检测算法。

1 FAST 角点检测算法

FAST 角点检测算法是近年人工智能、机器视觉、视觉SLAM 等领域中热门的角点检测方法,它不仅具有较快的运算速度,还具有很高的精确度,是一个兼备适用性和性价比的算法。

FAST 角点检测算法会视图像中每个点为中心像素点并进行取值,选中像素后以3 个像素点为半径选取原型窗口上的16 个像素,如图1所示,为中心点,1~16为需要进行处理的点。

图1 FAST 角点检测算法原理图

最初的FAST 角点检测算法需要取中心点附近窗口区域上的连续16 个像素点,并取这16 个点的灰度值与中心像素点灰度值的差值,如果有连续个点都大于设定的阈值,则该中心点可以被视为角点的候选点。一般情况下,取9 时效果最佳。

由于需要对每个点都进行16 个像素点的检测,所以对FAST 角点检测算法进行了优化,优先检测1,5,9,13 号位置的像素点是否符合要求。如果不符合要求则跳过,该优化提升了FAST 角点检测算法的运算速度,提高了检测效率。

FAST 角点检测算法步骤如下:

第1 步:首先定义一个阈值,的大小根据经验设置为选中的像素点的10%。取(1),(9)两个点,将他们与中心点做差再取绝对值,得到的绝对值与预先设定的阈值进行比较,若所得到的差的绝对值都小于设定的阈值,那么点不是角点,否则进行第2 步。

第2 步:取(1),(5),(9),(13)四个点,将他们与中心点做差再取绝对值,得到的绝对值与预先设定的阈值进行比较,若所得到的绝对值至少有三个点小于阈值,那么点不是角点,否则进行第3 步。

第3 步:取(1)~(16)中的16 个点,将他们与中心点做差再取绝对值,得到的绝对值与预先设定的阈值进行比较,若至少有连续9 个点的绝对值都小于阈值,那么点是角点。

2 基于OTSU 的改进FAST 角点检测算法

传统的FAST 角点检测算法中,阈值是根据经验设定的,一般为所选择中心点像素的10%,那么周围像素点的比较范围为:

若角点与周围环境的像素差大于阈值,那么该角点将会被忽略。因此引入OTSU 算法自适应阈值的大小,使得与环境差较小的角点仍然被提取出来。

将图像按面积进行等分为×份。对每一份图像使用OTSU 算法,得到该份的图像阈值,再将阈值代入FAST 算法中。解决了整个FAST 角点检测算法中阈值取值经验化的缺点,经过实验验证,改进后的FAST 角点检测算法提高了计算效率和检测精度。

改进算法的步骤如下:

第1 步:将原图像转化成灰度图像并利用高斯滤波函数进行过滤噪声处理。接着将图像等分成×份。并对分割后的每一份图像进行OTSU 算法处理,计算该子部分图像的阈值。

对图像的子部分分别进行处理,子部分的阈值记为,并区别前景与背景,设为子部分前景像素点的比例,为子部分前景像素的平均灰度;为子部分背景像素点的比例,为子部分背景像素的平均灰度。记为图像子部分总平均灰度,为类间方差。

×为图像子部分的大小,图像子部分中像素灰度值小于阈值的像素个数记作,图像子部分像素灰度值大于阈值的像素个数记作,则有:

将式(6)代入式(7),得到公式:

遍历图像子部分的每个像素可以得到使类间方差最大的阈值′,′即为该图像子部分的阈值。

第2 步:对分割后的图像子部分分别使用FAST 角点检测算法进行处理。取阈值,为第1 步中所取得的阈值与中心像素点灰度值差值的绝对值。若为候选点,则计算圆周上的16 个候选点与中心点的灰度值之差的绝对值,计算公式如式(9)所示:

C≥,则记为候选点,否则剔除该点。对16 个点进行比较,若连续9 个以上的点为候选点则该中心点为角点。角点检测范围如图2所示。

图2 角点检测范围

3 实验结果分析

为了验证本文算法的可靠性,对同一幅图像分别进行FAST 角点检测算法、本文改进的FAST 角点检测算法以及其他算法的实验,根据检测到的角点数量、角点的准确度以及算法的计算速率的结果进行比较。

采用FAST 角点检测算法、Susan 算法和Harris 算法对图3 进行实验。图4 为进行5×5 等分的图像,并对每一子部分进行本文算法的实验。将四者的结果进行对比。

图3 测试图像

图4 分割后的图像

首先,利用FAST 角点检测算法对图3 原始图像进行处理,得到的实验结果如图5所示。从图中可以直观观测出整幅图像能够检测出大部分角点,但有部分角点并没有检测出来,同时也产生了角点遗漏,并且局部的角点出现了冗余,在灰度差别不明显的区域遗失了部分角点。如图6所示,Susan 算法在检测时,消耗的时间很长,角点的冗余情况十分严重,并且遗失了部分角点。如图7所示,Harris 算法对图3 进行处理,该算法也需要设定固定的阈值,当阈值设置不合理时,会检测出错误的角点,或者丢失角点。

图5 FAST 角点检测算法

图6 Susan 算法

图7 Harris 算法

最后,利用本文提出的改进的区域自适应FAST 角点检测算法检测图像中的角点。如图8所示,图像在按5×5 比例的分割过程中,会有部分位置的角点被分割,造成角点遗失,所以在分割图像时,四个边界各留出三行像素,形成(+3)×(+3),这样分割后,原有被分割的角点可以被完整地留出。根据算法本身来看,FAST角点检测算法从检测的效果来看,图像中的角点都能检测出来,角点冗余的情况明显减少,在图像灰度差别较小的区域也可以识别出角点。

图8 本文改进算法

相比前面三种算法,由对比图像的检测结果来看,在角点数和角点分布上,本文算法具有较大的优势。从而验证了本文提出的改进的区域自适应FAST 角点检测算法的可靠性。

统计各个算法的实验数据,如表1所示。根据数据对比结果可以直观看出,相比前面三种算法,在角点数、角点检测准确情况以及所耗时间来看,本文算法具有极大的可靠性,从而验证了本文所提出的改进的图像区域自适应FAST 角点检测算法的检测效果。

表1 各算法实验结果对比

4 结 语

针对传统FAST 角点检测算法存在的固定阈值所造成漏检、误检角点的问题,本文提出一种基于OTSU 的区域自适应FAST 角点检测算法。通过将图像分割成×个子部分,再对每一个子部分进行OTSU 算法处理求得阈值,将阈值反馈给FAST 角点检测算法进行处理,有效地解决了固定阈值不适用于全图的问题,使得较为隐蔽且不清楚角点可以被检测到。实验结果表明,本文算法可以有效提高角点检测的准确率。

猜你喜欢
角点中心点像素点
Scratch 3.9更新了什么?
如何设置造型中心点?
基于5×5邻域像素点相关性的划痕修复算法
基于FAST角点检测算法上对Y型与X型角点的检测
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法
汉字艺术结构解析(二)中心点处笔画应紧奏
寻找视觉中心点