Corner Feature Detector(Intensity-Based)
基于光强比较的角点检测,直接比较光强(像素灰度值),而不计算梯度。所以实时性更好,所需的存储空间更小。
SUSAN 角点检测
SUSAN 全称Smallest univalue segment assimilating nucleus,最小核同值区。提出者Smith与Brady, 1997.
SUSAN 使用一个圆形模板和一个圆的中心点,通过圆的中心点象素值与模板圆内其他象素值的比较,统计出与圆中心点象素值近似的象素数量,当这样的象素数量小于某一阈值时,则该圆中心点就被认为是角点。
- 圆形模板:通常是半径为3.5,37个像素的圆形
- 圆形模板中心点:圆心位置的像素
- 最小核同值区:像素值与圆心位置像素值接近的区域和(颜色接近的区域)
有两种划分(了解):
平滑划分: c ( r ⃗ , r ⃗ 0 ) = e − ( I ( r ) − I ( r 0 ) t ) 6 c\left(\vec{r}, \vec{r}_{0}\right)=e^{-\left(\frac{I(r)-I\left(r_{0}\right)}{t}\right)^{6}} c(r,r0)=e−(tI(r)−I(r0))6
直接划分: c ( r ⃗ , r ⃗ 0 ) = { 1 if ∣ I ( r ⃗ ) − I ( r ⃗ 0 ) ∣ ≤ t 0 if ∣ I ( r ⃗ ) − I ( r ⃗ 0 ) ∣ > t c\left(\vec{r}, \vec{r}_{0}\right)=\left\{\begin{array}{ll}1 & \text { if }\left|I(\vec{r})-I\left(\vec{r}_{0}\right)\right| \leq t \\ 0 & \text { if }\left|I(\vec{r})-I\left(\vec{r}_{0}\right)\right|>t\end{array}\right. c(r,r0)={10 if ∣I(r)−I(r0)∣≤t if ∣I(r)−I(r0)∣>t
像素个数: n ( x 0 , y 0 ) = ∑ ( x , y ) ≠ ( x 0 , y 0 ) c ( x , y ) n\left(x_{0}, y_{0}\right)=\sum_{(x, y) \neq\left(x_{0}, y_{0}\right)} c(x, y) n(x0,y0)=∑(x,y)=(x0,y0)c(x,y)
像素个数与阈值
g
g
g进行比较,以此判断角点。
R
(
r
⃗
0
)
=
{
g
−
n
(
r
⃗
0
)
n
(
r
⃗
0
)
<
g
0
otherwise
R\left(\vec{r}_{0}\right)=\left\{\begin{array}{cc} g-n\left(\vec{r}_{0}\right) & n\left(\vec{r}_{0}\right)<g \\ 0 & \text { otherwise } \end{array}\right.
R(r0)={g−n(r0)0n(r0)<g otherwise
FAST 角点检测
实时性好,不具有旋转不变性。
主要思想:比较中心像素与圆内(这里的圆内指的是圆边经过的像素)16个像素,如果圆内存在n个相邻的像素块都比中心像素的亮度 I p I_p Ip加上一个阈值 t t t亮,或者都比 I p − t I_p - t Ip−t暗,则就判断其为角点。n通常选择为12. FAST uses binary comparison with each pixel along a circle pattern against the central pixel。
算法描述:
- 以候选的像素角点为中心,画一个半径为3的圆,这样圆上就会有16个像素块。
- 比较pixel 1、pixel 9与中心像素的亮度值。如果它们距离 I p I_p Ip都在 p p p的阈值内,即比 I p + t I_p + t Ip+t亮或比 I p − t I_p - t Ip−t暗,则该像素 p p p不可能是角点。
- 如果未能排除角点可能性,则判断pixel 5、pixel 13(可以观察到5、13是正交于1和9的)。如果 p p p是角点,那么在1,9,5,13中至少有3个像素全部比 I p + t I_p + t Ip+t亮或全部比 I p − t I_p - t Ip−t暗。如果未满足该条件,则像素 p p p不可能是角点。
- 若还不能排除角点的可能性,则对所有16个像素块进行测试。判断n与12的大小。
在SUSAN上进行了改进,FAST效率极高,具有高重复性。但仍然存在一些问题:
- 如果圆环上的16个像素,一半明显比中心暗,一半明显比中心亮,则也有可能是角点。但会被FAST拒绝。
- 检测器的相率取决于像素点判断的顺序,无法保证最优。
- 相邻的几个特征像素点容易被重复检测为角点(可以使用非极大值抑制)。
FAST-ER 角点检测
FAST-ER,Rosten 2010年提出的对FAST算法的改进。
主要改进在于:使用ID3决策树策略对FAST进行了加速,使得其更快。
关于ID3决策树,可以参考:https://blog.csdn.net/weixin_43977640/article/details/114336485
每个像素点 x x x都能将全部像素构成的集合 P P P分为三个集合 P d , P b , P s P_d, P_b, P_s Pd,Pb,Ps,即比 I p − t I_p-t Ip−t暗,比 I p + t I_p+t Ip+t亮,与之类似。这样就可以根据像素点 x x x来对决策树进行进一步的划分。
一个任意的角点集合的信息熵:
H
(
Q
)
=
(
c
+
c
ˉ
)
log
2
(
c
+
c
ˉ
)
−
c
log
2
c
−
c
ˉ
log
2
c
ˉ
H(Q)=(c+\bar{c}) \log _{2}(c+\bar{c})-c \log _{2} c-\bar{c} \log _{2} \bar{c}
H(Q)=(c+cˉ)log2(c+cˉ)−clog2c−cˉlog2cˉ
c c c是集合中的角点数量, c ˉ \bar c cˉ是集合中的非角点数量。就是传统的信息熵计算方法。只不过把概率拆开写了。
而依据
x
x
x会将训练集中的全部像素构成的集合划分为三个子集,作者规定他们的贡献度都一样,所以
x
x
x的信息增益:
H
g
=
H
(
P
)
−
H
(
P
d
)
−
H
(
P
s
)
−
H
(
P
b
)
H_{g}=H(P)-H\left(P_{d}\right)-H\left(P_{s}\right)-H\left(P_{b}\right)
Hg=H(P)−H(Pd)−H(Ps)−H(Pb)
计算周围16个像素点的信息增益,选择增益最大的 x x x,然后进一步递归构建决策树,直到递归结束。
这样构建出来的决策树可以正确分类训练集中的所有角点,因此非常近似地体现了FAST角点检测器的规则。