调整Scikit-Learn分类器的HOG功能 [英] Resize HOG feature for Scikit-Learn classifier

查看:229
本文介绍了调整Scikit-Learn分类器的HOG功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试执行此代码来处理70个图像并提取直方图梯度(HOG)功能。这些传递给分类器(Scikit-Learn)。

I'm trying to execute this code that processes 70 images and extracts Histogram of Oriented Gradients (HOG) features. These are passed to a classifier (Scikit-Learn).

然而,出现错误:

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")


推荐答案

您应该重新缩放源图像(名为 colorato 在你的例子中)到(200,200),然后提取HOG功能,然后传递 fd 向您的机器学习模型的向量。 hog_image 只是用户友好的方式可视化功能描述符。实际功能在 fd 变量中返回。

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. The hog_image are just meant to visualize the feature descriptors in a user friendly manner. The actual features are returned in the fd variable.

这篇关于调整Scikit-Learn分类器的HOG功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆