import os
import numpy as np
import cv2
import glob
import sklearn.svm as svm
import joblib
def calcSiftFeature(img):
#设置图像sift特征关键点最大为200
sift = cv2.xfeatures2d.SURF_create()
#计算图片的特征点和特征点描述
keypoints, features = sift.detectAndCompute(img, None)
return features
#计算词袋
def learnVocabulary(features):
wordCnt = 50
#criteria表示迭代停止的模式 eps---精度0.1,max_iter---满足超过最大迭代次数20
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.1)
#得到k-means聚类的初始中心点
flags = cv2.KMEANS_RANDOM_CENTERS
# 标签,中心 = kmeans(输入数据(特征)、聚类的个数K,预设标签,聚类停止条件、重复聚类次数、初始聚类中心点
compactness, labels, centers = cv2.kmeans(features, wordCnt, None,criteria, 20, flags)
return centers
#计算特征向量
def calcFeatVec(features, centers):
featVec = np.zeros((1, 50))
for i in range(0, features.shape[0]):
<
SIFT+SVM图像分类
最新推荐文章于 2024-05-15 20:13:56 发布