fast 角点检测 c 语言,图像特征之FAST角点检测

前面已经介绍多种图像特征点(角点、斑点、极值点)的检测算法,包括Harris、LoG、HoG以及SIFT、SURF等,这些方法大多涉及图像局部邻域的梯度计算和统计,相比较而言,FAST(Features From Accelerated Segment Test)在进行角点检测时,计算速度更快,实时性更好。

FAST角点定义

FAST角点定义为:若某像素点与周围邻域足够多的像素点处于不同区域,则该像素可能为角点。考虑灰度图像,即若某像素点的灰度值比周围邻域足够多的像素点的灰度值大或小,则该点可能为角点。

算法步骤对于图像中一个像素点$p$,其灰度值为$I_p$

以该像素点为中心考虑一个半径为3的离散化的Bresenham圆,圆边界上有16个像素(如下图所示)

设定一个合适的阈值$t$,如果圆上有n个连续像素点的灰度值小于$I_p-t$或者大于$I_p+t$,那么这个点即可判断为角点(n的值可取12或9)

3fae60c00994764154131788990db4da.png

一种快速排除大部分非角点像素的方法就是检查周围1、5、9、13四个位置的像素,如果位置1和9与中心像素P点的灰度差小于给定阈值,则P点不可能是角点,直接排除;否则进一步判断位置5和13与中心像素的灰度差,如果四个像素中至少有3个像素与P点的灰度差超过阈值,则考察邻域圆上16个像素点与中心点的灰度差,如果有至少9个超过给定阈值则认为是角点。

角点分类器选取需要检测的场景的多张图像进行FAST角点检测,选取合适的阈值n(n<12),提取多个特征点作为训练数据

对于特征点邻域圆上的16个像素$x \in {1,2,…,16 }$,按下式将其划分为3类

$$S_{p\rightarrow x} = \begin{cases} d,  I_{p\rightarrow x} \leq I_p-t \\ s,  I_p-t \leq I_{p\rightarrow x} \leq I_p+t \\ b,  I_p+t \leq I_{p\rightarrow x} \end{cases}$$

对每个特征点定义一个bool变量$K_p$,如果$p$是一个角点,则$K_p$为真,否则为假

对提取的特征点集进行训练,使用ID3算法建立一颗决策树,通过第$x$个像素点进行决策树的划分,对集合$P$,得到熵值为

$$H(P)=(c+\hat{c})log_2 (c+\hat{c})-clog_2 c - \hat{c}log_2 \hat{c} $$

其中$c$为角点的数目,$\hat{c}$为非角点的数目。由此得到的信息增益为

$$\Delta H = H(P) - H(P_d) - H(P_s) - H(P_b)$$

选择信息增益最大位置进行划分,得到决策树

使用决策树对类似场景进行特征点的检测与分类

非极大值抑制

对于邻近位置存在多个特征点的情况,需要进一步做非极大值抑制(Non-Maximal Suppression)。给每个已经检测到的角点一个量化的值$V$,然后比较相邻角点的$V$值,保留局部邻域内$V$值最大的点。$V$值可定义为

特征点与邻域16个像素点灰度绝对差值的和

$V = max(\Sigma_{x \in S_{bright}} |I_{p\rightarrow x} - I_p| - t, \Sigma_{x \in S_{dark}} |I_{p\rightarrow x} - I_p| - t)$

式中,$S_{bright}$是16个邻域像素点中灰度值大于$I_p+t$的像素点的集合,而$S_{dark}$表示的是那些灰度值小于$I_p−t$的像素点。

算法特点FAST算法比其他角点检测算法要快

受图像噪声以及设定阈值影响较大

当设置$n<12$时,不能用快速方法过滤非角点

FAST不产生多尺度特征,不具备旋转不变性,而且检测到的角点不是最优

reference

实现YOLOv8的并行检测多张图像,可以按照以下步骤进行操作: 1. 准备YOLOv8的运行环境,包括安装必要的软件和库文件。根据引用和引用,需要先进行软件准备部分,并了解YOLOv8的运行环境。 2. 理解YOLOv8的模型架构。根据引用,YOLOv8的结构是在YOLOv5的基础上进行了改进和优化。它使用了新的backbone和neck部分,并采用了解耦的结构。此外,如果还需要进行实例分割,则需要了解YOLOv8-seg的模型架构,如引用中所述。 3. 并行检测多张图像的具体实现取决于使用的编程语言和框架。以Python和PyTorch为例,可以按照以下步骤进行: a. 加载YOLOv8的模型和权重。可以使用PyTorch提供的函数加载预训练的YOLOv8模型。 b. 准备待检测的多张图像。可以将这些图像存储在一个列表中,以便后续处理。 c. 将待检测的图像分成多个批次。可以根据计算资源和需求将图像分成多个批次,每个批次包含一定数量的图像。 d. 对每个批次的图像进行并行检测。可以使用多线程或多进程的方式,将每个批次的图像同时送入YOLOv8模型进行检测。并行处理可以提高检测速度。 e. 获取检测结果。对于每个批次的图像,可以获取模型的输出结果,包括类别、边界框和分割结果等。 f. 整合检测结果。将每个批次的检测结果整合在一起,得到最终的多张图像的检测结果。 4. 根据实际需求进行后续处理。根据检测结果,可以进行后续的分析、可视化或其他操作,以满足具体的应用需求。 需要注意的是,并行检测多张图像需要充分利用计算资源,因此合理设置批次大小和并行处理方式可以提高检测速度。具体实现的细节需要根据使用的编程语言、框架和硬件环境进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [深度学习环境配置指南/YOLOv8目标检测实践](https://blog.csdn.net/weixin_42429239/article/details/129180570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [论文解读:FastSAM | Fast Segment Anything | 基于yolov8-seg实现 比SAM快50倍](https://blog.csdn.net/a486259/article/details/131453794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值