【问题标题】:k-means clustering on ORB featuresORB 特征上的 k-means 聚类
【发布时间】:2020-04-18 06:22:24
【问题描述】:

我必须根据 ORB 特征的 k-means 聚类来进行图像分类。如果我从文档中正确理解,一个特性本质上是一个关键点和一个描述符。我不确定在执行 kmeans.fit() 时应该将什么作为 X:在示例 here 中,它说 X_digits 是 Bunch 对象的一个​​ numpy 数组,所以我假设我应该对关键点和将相应的描述符放在一起并将其用作 kmeans.fit(x) 中的 X。 代码如下:

@dataclass
class BOVWFeaturizer(ImgFeaturizerABC):
    number_of_features_per_image: int = 100
    vocabulary_size: int = 8
    def fit(self, images: np.ndarray, labels=None):
        orb = cv.ORB_create(self.number_of_features_per_image)
        keypoints_orb = orb.detect(images, None)
        keypoints_orb, descriptors = orb.compute(images, keypoints_orb)
        kmeans = cluster.KMeans(n_clusters=2, random_state=0)
        """
        features = ## something that groups keypoints and descriptor
        """
        kmeans.fit(features, labels)

        return self

我没有机器学习或计算机视觉方面的先验知识,如果这是一个非常基本的问题,请见谅

编辑: 这是我尝试过的:

features = [[kp, desc] for kp, desc in zip(keypoints_orb, descriptors)]
features = [(kp, desc) for kp, desc in zip(keypoints_orb, descriptors)]

在这两种情况下,输出都是:

TypeError: float() argument must be a string or a number, not 'cv2.KeyPoint'

我尝试将其转换为 ndarray:

features = np.ndarray([(kp, desc) for kp, desc in zip(keypoints_orb, descriptors)])

输出:

ValueError: maximum supported dimension for an ndarray is 32, found 100

我是否应该将两个值(关键点和描述符)压缩到 1d ndarray 中?

【问题讨论】:

    标签: opencv scikit-learn k-means orb


    【解决方案1】:

    您不得向分类器添加关键点。分类将仅基于描述符进行,因此只需向分类器提供描述符作为输入特征。

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 2011-09-04
      • 1970-01-01
      • 2015-04-11
      • 2011-08-13
      • 2013-08-08
      • 2013-02-14
      • 2018-01-14
      • 2017-12-30
      相关资源
      最近更新 更多