如何在python中使用rootSIFT功能初始化和训练SVM



我有一个利用OpenCV在python中建立的CBIR系统。我已经成功地提取了关键点和描述符,使用 k 均值将它们聚类以创建密码本,并基于此密码本生成描述图像的直方图。我想知道如何使用在此代码的最后一行生成的这些直方图来训练 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)

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

相关内容

  • 没有找到相关文章

最新更新