Opencv中的视觉词袋

时间:2013-10-24 09:46:05

标签: opencv computer-vision k-means surf feature-extraction

我在opencv中使用BOW来聚类可变大小的功能。但是有一件事从opencv的文档中不清楚,我也无法找到这个问题的原因:

假设:字典大小= 100.

我使用surf来计算特征,每个图像都有可变大小的描述符,例如:128 x 34,128 x 63等。现在在BOW中,每个都是聚类的,我得到一个128 x 100的固定描述符大小一个图像。我知道100是使用kmeans聚类创建的集群中心。

但我感到困惑的是,如果图像有128 x 63个描述符,那么它如何聚集成100个聚类,这是不可能使用kmeans,除非我将描述符矩阵转换为1D。转换为1D会丢失单个关键点的有效128维信息吗?

我需要知道如何操纵描述符矩阵以仅从63个特征中获得100个cluter中心。

1 个答案:

答案 0 :(得分:10)

这样想。

您有10个群集意味着总数,6个功能用于当前图像。这些特征中的前3个最接近第5个平均值,其余3个最接近第7个,第8个和第9个平均值。然后,您的功能将像[0, 0, 0, 0, 3, 0, 1, 1, 1, 0]或此标准化版本。这是10维,并且等于聚类均值的数量。因此,如果需要,您可以从63个特征创建100000维向量。

但我仍然认为有问题,因为在你应用BOW之后,你的功能应该是1x100而不是128x100。您的群集意味着128x1,您将分配128x1大小的功能(第一个图像具有34 128x1功能,第二个图像具有63 128x1功能等)。因此,基本上你将34或63个特征分配给100个均值,你的结果应该是1x100。