FAST-ER角点检测算法详解(改良的FAST算法)

FAST-ER是FAST算法原作者在2010年提出的,它在原来算法里提高特征点检测的重复度,重复意味着第一张图片内的检测的点,也可以在第二张图片上的相应位置被检测出来,重复度可以由如下式子定义:


这里的Nrepeated指第一张图片内的检测点有多少能在第二张被检测到,而Nuseful定义为有用的特征点数。这里计算的一组图像序列的总的重复度,所以Nrepeated和Nuseful是图像序列中所以图像对的和。

在衡量检测的特征点是否能在第二张图像上被检测到,这也是一个大问题,通常的方法先将第一张图像内的点进行变形,使其能匹配第二张,然后再将变换的特征点位置同第二张对应位置比较,看是否被再次检测到,这里也允许一定误差,一般会在3*3的窗口去寻找(也就是说大概只允许一个像素的误差)。


然后实际上,由于视点变化等形变较大因素造成的形变,很有可以使角点检测偏移到不同位置,所以这个邻近区域搜索,找到匹配的特征点是很难确定的,如果搜索范围大太,一方面容易把不匹配的点检测到,另一方面计算量也增大。而如果搜索范围太小,则容易把本来匹配点给忽视了,从面减少重复率。

由于一些形变较大因素造成的形变,很难通过简单且固定的模板将所以的角点检测出来,而原来的FAST算法其决策树的结构是固定的三层树,并不能最优的实现区分角点(实现最优的重复率)。FAST-ER就是针对这样的问题而提出的,其主要是通过模拟退火(也有通过最速下降法的)优化原先决策树的结构,从而提高重复率。

一、引入角点检测的不变性

原先一个像素点及其附近的点送往决策树进行比较时,只需要比较两个位置的点,如果这个点被检测出是角点,但在其区域发生一定旋转、变形或强度反转(白变黑,黑变白)之后,再次重新判定,很有可能被认为是非角点。

在这种情况下,为了使角点检测具有旋转、反射、强度倒转等不变性,最简单的办法就是将所以变化后的结果都计算,即不同的变换建立不同树,只要有一个树能检测出角点,即是角点。不过这样的话,计算量太大,为了减少计算复杂率,每次树被评估时,一般只需要应用16种变换:四个旋转方向变化(各相差90度),并结合反射(对左右对称及上下对称)同强度倒转,共16个变换操作。如果一个点能被6种变换中任一种的决策树视为角点,那么这个点就是角点。

由此以来我们建立了16棵对应不同变换的决策树。

二、决策树的结构优化

对于FAST算法来说,原来的三层决策树太过简单,不能达到最好得重复度,而重复度是关于决策树结构的非凸函数,这涉及到非凸函数的优化问题,这里许多方法,而FAST-ER则是通过模拟退火方法来优化决策树的。

(1)退火温度

首先考虑建立树的总成本如下:


这里的r定义为重复率,di定义为第i帧检测的角点数,而N定义为总共的帧数,s是决策树的大小(树共有多少个节点),ws,wn,wr指影响因子。注意,为了提高计算效率,重复率以一个固定的阈值t和每帧固定数量的特征点来计算。

因为每次迭代过程,我们都需要对原树进行随机调整(启发式随机寻找最优),这些调整可以通过波尔兹曼接受准则来实施,其在第I次迭代中接受调整概率为P:


这里的是接受标准之后的成本,而T是退火温度:


这里的Imax是最大的迭代次数。

(2)扩大的判定位置

通过随机调整决策树,从而找到最优的重复率,而这个调整涉及到两个方面,一个是树节点选择分类的x位置,另一个是整个树的结构。

每个树的叶子确定分类(如果为1,则是角点,而为0,则不是),而每个节点都有一个对应的判断位置x,FAST是圆环上的其中一点,而在引入退火方法,我们需要给这个位置引入一个相对于中心点的随机偏移,进一步扩大判断位置的选择范围。随机偏移如下定义(共有48个选择位置):


(3)决策树的调整

通过模拟退火的方式来随机调整树,首先选择树中的一个节点(不能是根结点),然后调整它(调整概率P,上面定义过了,随着迭代次数,其越来越趋于稳定),如果:

A)如果挑选的点是叶节点,那么其有相等的概率做如下:

Ø  用一个深度为1随机子树节点代替,将其下继续分成三个叶结点

Ø  翻转叶子的分类(由角点变为非角点,或相反),如果叶子的类被严格限制就不进行此操作(如s子树的叶节点被限制为非角点,因为已经有两个位置检测为同中心相似,这样的点肯定是非角点,可以保证在阈值t增加时,其角点数将通常会减少)

B)如果节点,那么其也有相等概率做如下操作:

Ø  将偏移位置用新的随机偏移位置[0,47]代替,并更新下面的叶结点,前面B)有说明。

Ø  将节点用随机叶节点代替(也要满足以上限制条件)

Ø  移除节点随机选择的分支,并用该节点下另一随机选择的分支拷贝到其位置,比如,b分支可以由s分支代替。

(4)迭代过程的终止

通过对决策树的这些随机调整,树最后很可能不是原来FAST的简单三层树了。树调整后,再对结果应用FAST-9,进一步确定角点,计算新的重复率,如果重复率比原来的重复率高,那么我们就将当前结果视为我们目前最优树,继续应用上面决策树调整,最终在达到一定程度重复率或迭代次数时,停止迭代过程。这个优化也可以通过不同的多个随机种子来运行。我们包含了这些调整可以让FAST-ER更容易地学习到相似的结构。

三、其作用和总结

因为每个迭代过程中,都需要对重新应用新的决策树进行检测,而且16个变换中每一个都需要对应一个候选树,所以这样的检测算法并不十分有效,因此,从效率上考虑,上述的算法一般用于产生训练数据,之后获得较为精确的角点检测结果,我们就可以通过原来的FAST算法来产生单个树。

 

参考文献:

Faster and Better : A Machine Learning Approach to Corner Detection  (提出FAST-ER的论文)

Machine Learning for High-Speed Corner Detection  (FAST的原文,上面的论文也是这个作者写的)

FAST角点检测方法详解  (本人关于FAST算法的博文)


  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HIO-ER(Hybrid Input-Output with Error Reduction)是一种常用的相位恢复算法,用于从幅度信息中恢复出物体的相位信息。以下是一个简单的HIO-ER算法的示例代码: ```python import numpy as np def hio_er_algorithm(amplitude, support, max_iterations=1000, beta=0.9, threshold=0.01): n = len(amplitude) phase = np.random.rand(n) * 2 * np.pi # 初始化相位 for iteration in range(max_iterations): previous_phase = phase.copy() # 计算复振幅 complex_amplitude = amplitude * np.exp(1j * phase) # Fourier变换 fourier_transform = np.fft.fftshift(np.fft.fft(complex_amplitude)) # 保留幅度信息,重构相位 fourier_transform = amplitude * np.exp(1j * np.angle(fourier_transform)) # 逆Fourier变换 inverse_transform = np.fft.ifft(np.fft.ifftshift(fourier_transform)) # 更新相位 phase = np.angle(inverse_transform) # 限制相位在支持内部 phase[support == 0] = previous_phase[support == 0] # 错误减小步骤 phase_error = np.angle(inverse_transform / amplitude) phase_error[support == 0] = 0 phase -= beta * phase_error # 判断收敛条件 if np.max(np.abs(phase - previous_phase)) < threshold: break return phase ``` 在这个示例代码中,`amplitude` 是物体的幅度信息,`support` 是物体的支持信息(即物体的形状或位置信息),`max_iterations` 是最大迭代次数,`beta` 是错误减小步骤的参数,`threshold` 是收敛条件的阈值。 该算法的基本思想是通过交替更新幅度和相位来逐步恢复物体的相位信息。在每次迭代中,根据当前的相位估计计算出复振幅,然后根据幅度信息重构相位,并进行逆Fourier变换得到物体的估计。然后更新相位,限制相位在支持内部,并进行错误减小步骤以减小相位估计中的错误。重复以上步骤直到收敛。 需要注意的是,实际应用中可能需要根据具体问题进行一些调整和修改。此代码仅提供了一个简单的示例供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值