【问题标题】:How to initialize and train an SVM with rootSIFT features in python如何在 python 中初始化和训练具有 rootSIFT 特征的 SVM
【发布时间】:2016-11-16 08:05:22
【问题描述】:

我使用 OpenCV 在 python 中设置了一个 CBIR 系统。我已成功提取关键点和描述符,使用 k-means 对它们进行聚类以创建码本,并根据此码本生成描述图像的直方图。我想知道如何使用此代码最后一行生成的这些直方图来训练 SVM,或者我是否以错误的方式进行此操作。

import argparse
import glob
import cv2
import numpy
import pickle
import base64
from scipy.cluster.vq import *
from cassandra.cluster import Cluster

def compute(imagePath, eps=1e-7)
    sift = cv2.xfeatures2d.SIFT_create()
    image = cv2.imread(imagePath, 0)

    kp, des = sift.detectAndCompute(image, None)

    if des is not None:
        kp, des = sift.compute(image, kp)

        if len(kp) == 0:
            return ([], None)

        des /= (des.sum(axis=1, keepdims=True) + eps)
        des = numpy.sqrt(des)

        des = whiten(des)

        return kp, des

for imagePath in dataset :
    kp,des = compute(imagePath)

    codes, distortion = vq(des, codebook)
    hist, bins = numpy.histogram(codes, K)

【问题讨论】:

    标签: python opencv computer-vision scikit-learn


    【解决方案1】:

    看看sklearn.svm 以及SVM 分类的工作原理here。 也许您可以按照Bag of Words 通用程序进行操作,这意味着对于每个图像特征(直方图),您应该选择字典中最近的码字(根据某种特征距离/相似度的度量)。

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 2018-02-25
      • 1970-01-01
      • 2012-09-17
      • 2019-02-02
      • 2012-01-23
      • 1970-01-01
      • 2014-11-21
      • 2018-10-25
      相关资源
      最近更新 更多