我不确定这是否是适合此问题的正确论坛,否则我很抱歉。功能包如何工作?
我对Bag of Features模型很陌生,我试图实现为了通过矢量(用于CBIR项目)表示图像。
从就我的理解,给定一个训练集n
图像0,并假定我们想通过大小k
的矢量来表示图像,这些都为实现使用BoF步骤:
- 对于每个图像
i
,计算关键点集合并从中计算描述符集合i-D
。 - 把所有图像中的描述符集合放在一起,所以现在我们有
D
。 - 在
D
上运行k
表示(其中k
定义如上)算法,所以现在我们有k
簇,每个描述符向量完全属于一个簇。 - 将相对于图像
i
的结果BoF矢量(尺寸为k
)定义为iv
。每个维度被初始化为0 - 对于每个图像
i
,和用于属于i-D
每个描述符d
,找出d
所有k
簇之间所属群集。假设d
属于j
集群,那么vi[j]++
。
什么是我不明白的是如何落实第5点,那么我们该如何理解到集群中的描述属于,特别是如果我们试图计算转炉矢量图像是查询图像(不属于初始数据集)?我们是否应该找到最近邻居(1-NN)以便了解查询描述符属于哪个群集?
为什么我需要这个 - 应用程序:
为了实现CBIR我实现炼钢模型:给定一个查询图像q
,找到q
最相似的图像i
中的数据集图片。为了做到这一点,我们需要解决1-近似最近邻问题,例如使用LSH。问题在于LSH中的每个图像的输入都表示为一个矢量,所以我们需要BoF才能做到这一点!我希望现在它更清楚为什么我需要它:)
请让我知道,如果我在上述程序中犯了一些错误。
我太如此如此抱歉,我很愚蠢!这不是第3点(它只是k-均值),而是第5点(我们通过将每个描述符关联到一个聚类并定义直方图来定义结果向量)。 – justHelloWorld
因此,仍然不清楚的是“给出图像查询,我们如何获得最终的BoF矢量”?我们必须为每个描述符找到数据集中的1-NN描述符,并将其与相对集群关联起来?告诉我,如果我不清楚 – justHelloWorld
是的,要分配一个描述符,你可以得到最近的邻居。您可以根据您的训练数据计算每个聚类的半径,只有当查询点位于该半径范围内时(如果您开始获得与训练数据非常不同的查询)才可以分配它。 – Sorin