我一直在阅读this question,this opencv article,当然还有original关于使用机器学习的FAST算法的论文。
我似乎并不了解它。以下是我的理解所摘录的文章摘录:
选择一组图像进行训练(最好从目标应用程序域中进行训练)。假设这是我的具有4个功能的灰度图片。
+------------+
| + + |
| | | |
| +--------+ |
| | | |
| +--------+ |
| + + |
| |
+------------+
在每个图像中运行FAST算法以查找特征点。 如上一步所述,它具有4个功能(角落功能)。
对于每个特征点,将其周围的16个像素存储为矢量。对所有图像执行此操作以获得特征向量P。想象一下,这些是像素值,每个特征向量中有16个像素值。
这16个像素中的每个像素(例如x)可以具有以下三种状态之一:
现在,我将所有这些特征向量放入1个称为P的特征向量中,并根据给定的p评估每个像素是否更暗,相似或更亮。
向量P
b s d b s d b s b b s d d d | | b b b b d d s d b s d b s d b s | s d s d s d d d | d s b d s b d s b d s s d b s
我不明白这部分。是否将其中的每个特征划分为P_s,P_b和P_d?
b b b b s s s s d d d d d d | b b b b s s s s s d d d d d | | b b b b b b s s s s s d d d | b b b b b s s s s s d d d d d
还是我将整个向量P分成三个子集?
b b b b b b b b b b b b b b b b b s s s s s s s s s s s s s s s s d d d d d d d d ...
或者因为我可以计算出b,d和s中哪一个最高,所以我可以说Feature1是b,feature2是d,feature3,是s,feature4是b?
我们如何使用它来创建ID3?我认为这是我不理解的主要部分。
定义一个新的布尔变量K_p,如果p是一个角,则为true,否则为false。
使用ID3算法(决策树分类器)使用变量K_p查询每个子集,以获取有关真实类的知识。它会选择x,该x会根据K_p的熵衡量得出有关候选像素是否为角的最多信息。
这将递归应用于所有子集,直到其熵为零为止。
这样创建的决策树用于其他图像中的快速检测。