简体   繁体   English

调整Scikit-Learn分类器的HOG功能

[英]Resize HOG feature for Scikit-Learn classifier

I'm trying to execute this code that processes 70 images and extracts Histogram of Oriented Gradients (HOG) features. 我正在尝试执行此代码来处理70个图像并提取直方图梯度(HOG)功能。 These are passed to a classifier (Scikit-Learn). 这些传递给分类器(Scikit-Learn)。

However, an error is raised: 但是,会出现错误:

hog_image = hog_image_rescaled.resize((200, 200), Image.ANTIALIAS)
TypeError: an integer is required

I do not understand why, because with attempting with a single image works correctly. 我不明白为什么,因为尝试使用单个图像正常工作。

#Hog Feature

from skimage.feature import hog
from skimage import data, color, exposure
import cv2
import matplotlib.pyplot as plt
from PIL import Image
import os
import glob
import numpy as np
from numpy import array

listagrigie = []

path = 'img/'
for infile in glob.glob( os.path.join(path, '*.jpg') ):
    print("current file is: " + infile )
    colorato = Image.open(infile)
    greyscale = colorato.convert('1')

    #hog feature
    fd, hog_image = hog(greyscale, orientations=8, pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1), visualise=True)

    plt.figure(figsize=(8, 4))
    print(type(fd))
    plt.subplot(121).set_axis_off()
    plt.imshow(grigiscala, cmap=plt.cm.gray)
    plt.title('Input image')

    # Rescale histogram for better display
    hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
    print("hog 1 immagine shape")
    print(hog_image_rescaled.shape)

    hog_image = hog_image_rescaled.resize((200, 200), Image.ANTIALIAS)    
    listagrigie.append(hog_image)
    target.append(i)

print("ARRAY of gray matrices")

print(len(listagrigie))
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume = np.rollaxis(grigiume, -1)
print(grigiume.shape)

from sklearn import svm, metrics

n_samples = len(listagrigie)
data = grigiume.reshape((n_samples, -1))
# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)

# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], target[:n_samples / 2])

# Now predict the value of the digit on the second half:
expected = target[n_samples / 2:]
predicted = classifier.predict(data[n_samples / 2:])
print("expected")

print("predicted")

You should rescale the source image (named colorato in your example) to (200, 200) , then extract the HOG features and then pass the list of fd vectors to your machine learning models. 您应该将源图像(在您的示例中名为colorato )重新缩放为(200, 200) ,然后提取HOG colorato ,然后将fd向量列表传递给您的机器学习模型。 The hog_image are just meant to visualize the feature descriptors in a user friendly manner. hog_image只是用户友好的方式可视化特征描述符。 The actual features are returned in the fd variable. 实际的功能在fd变量中返回。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM