【发布时间】:2016-10-07 05:56:36
【问题描述】:
我不确定这个论坛是否适合这个问题,否则我很抱歉。
我对@987654321@ 模型很陌生,我正在尝试实现以通过向量表示图像(对于 CBIR 项目)。
据我了解,给定训练集 S 和 n 图像,并假设我们想通过大小为 k 的向量表示图像,这些是实现 BoF 的步骤:
- 对于每个图像
i,计算关键点集,并从中计算描述符集i-D。 - 将所有图像的描述符集放在一起,所以现在我们有了
D。 - 在
D上运行k均值(上面定义了k)算法,所以现在我们有了k簇,并且每个描述符向量恰好属于一个簇。 - 将
iv定义为相对于图像i的结果BoF 矢量(大小为k)。每个维度都初始化为0。 - 对于每个图像
i,以及对于属于i-D的每个描述符d,找出d属于所有k簇之间的哪个簇。假设d属于j-th簇,那么vi[j]++。
我不清楚如何实现第 5 点,那么我们如何理解描述符属于哪个集群,尤其是如果我们尝试计算 BoF 向量的图像是查询图像(因此不属于初始数据集)?我们是否应该找到最近邻(1-NN)以了解查询描述符属于哪个集群?
我为什么需要这个 - 应用程序:
我正在实施 BoF 模型以实施 CBIR:给定查询图像 q,在图像数据集中找到与 q 最相似的图像 i。为此,我们需要解决 1 近似最近邻问题,例如使用LSH。问题是 LSH 中每个图像的输入都表示为一个向量,所以我们需要 BoF 来做到这一点!我希望现在更清楚我为什么需要它:)
如果我在上述过程中犯了一些错误,请告诉我。
【问题讨论】:
标签: c++ algorithm computer-vision k-means