C++ 功能包是如何工作的?
我不确定这是否是这个问题的正确论坛,否则我很抱歉 我对这个模型非常陌生,我正在尝试实现通过向量表示图像(对于CBIR项目) 据我所知,给定一组C++ 功能包是如何工作的?,c++,algorithm,computer-vision,k-means,C++,Algorithm,Computer Vision,K Means,我不确定这是否是这个问题的正确论坛,否则我很抱歉 我对这个模型非常陌生,我正在尝试实现通过向量表示图像(对于CBIR项目) 据我所知,给定一组n图像的S,并假设我们希望通过大小k的向量来表示图像,以下是实现BoF的步骤: 对于每个图像i,计算关键点集,并从中计算描述符集i-D 将所有图像中的描述符集合放在一起,现在我们有了D 在D上运行kmeans(上面定义了k)算法,因此现在我们有了k簇,每个描述符向量恰好属于一个簇 将iv定义为相对于图像i的结果BoF向量(大小k)。每个维度都初始化为0 对
n
图像的S
,并假设我们希望通过大小k
的向量来表示图像,以下是实现BoF的步骤:
i
,计算关键点集,并从中计算描述符集i-D
D
李>
D
上运行k
means(上面定义了k
)算法,因此现在我们有了k
簇,每个描述符向量恰好属于一个簇iv
定义为相对于图像i
的结果BoF向量(大小k
)。每个维度都初始化为0李>
i
,以及属于i-d
的每个描述符d
,找出所有k
簇之间的d
簇。假设d
属于j
-th集群,则vi[j]++
q
,在图像数据集中找到与q
最相似的图像I
。为了做到这一点,我们需要解决1-近似最近邻问题,例如使用。问题是,LSH中的每个图像的输入都表示为一个向量,因此我们需要BoF来实现这一点!我希望现在我需要它的原因更清楚了:)
如果我在上述过程中犯了错误,请告诉我。您的算法所做的是为图像生成等价的单词。这组“单词”并不意味着是最终的结果,而只是使其与其他机器学习技术一起使用变得简单的东西 在此设置中,将从初始特征(点1的关键点)生成一组k簇。 然后根据每个簇中的关键点数量来描述每个图像(就像有一个由长度为k的字典中的单词组成的文本一样) 第3点说,从训练集图像中获取所有关键点,然后运行,以确定这些点之间的合理间隔。这基本上确定了单词的含义 因此,对于一个新图像,你需要像对训练集那样计算关键点,然后使用你在训练中已经计算出的聚类,计算出新图像的特征向量。也就是说,您可以从自己创建的词典中将图像转换为单词
这是一种从图像中生成合理特征向量的方法(如果需要,可以是部分结果)。这不是一个完整的机器学习算法。要完成它,你需要知道你想做什么。如果您只想找到最相似的图像,那么是的,最近邻搜索应该可以做到这一点。如果你想给图像添加标签,那么你需要从特征向量中训练一个分类器(比如朴素贝叶斯),并用它来找出查询的标签。对不起,我很愚蠢!这不是第三点。(这只是k-means),但是第5点。(我们通过将每个描述符关联到一个簇并定义直方图来定义结果向量)。因此,我仍然不清楚的是“给定一个图像查询,我们如何获得结果的BoF向量”?我们必须为每个描述符找到数据集中的1-NN描述符,并将其与相对集群相关联?如果我不清楚,请告诉我是的,要分配描述符,您可以获取最近的邻居。你可以根据你的训练数据计算每个集群的半径,并且只有当查询点在该半径范围内时才分配它(以防你开始得到与训练数据非常不同的查询)。哇,这很聪明,没有想到半径技巧!谢谢你们能看一下这个问题吗?