【问题标题】:Resize HOG feature for Scikit-Learn classifier调整 Scikit-Learn 分类器的 HOG 特征
【发布时间】:2019-01-02 17:26:57
【问题描述】:

我正在尝试执行处理 70 张图像并提取定向梯度 (HOG) 特征直方图的代码。这些被传递给分类器 (Scikit-Learn)。

但是,会引发错误:

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

我不明白为什么,因为尝试使用单个图像可以正常工作。

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

【问题讨论】:

    标签: python image image-processing scikit-learn opencv3.0


    【解决方案1】:

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

    【讨论】:

    • fd 列表可能由以下组成: [ 0. 0. 0. ..., 0. 0. 0.] ?测量结果,显然是0的序列
    • 我不确定,您的图片中是否有统一颜色的区域?你试过检查numpy.max(fd)numpy.mean(fd)的值吗?
    • 好的,它给我这个:最大值:0.999636109832 和媒体 0.104345580011,所以我想我必须改变一些东西,因为测量精度、召回、f1 分数和支持的结果都是 0 和平均 /打印时总计:打印“分类器 %s 的分类报告:\n%s\n”%(分类器,metrics.classification_report(预期,预测))
    • 您是否尝试为Cgamma 找到最佳值?您是否尝试过更简单的模型,例如LinearSVC
    • 我试图改变 gamma 值、内核(线性和 rbf)但结果是一样的。我试图运行这段代码 (scikit-learn.org/stable/modules/svm.html) 并显示 4 张红色背景的图像,只有 1 张点。我只知道出了点问题。我认为 svm 不适合 hog 特征(我有一个长度为 40.000 的特征向量)我尝试了 K-means,当我打印它时。打印 k_means.labels_[::10] 我有这个结果:[2 2 2 0 0 0 0 2]。我不明白这是什么意思。
    猜你喜欢
    • 2015-01-12
    • 2014-05-24
    • 2014-02-17
    • 2021-03-26
    • 2013-04-30
    • 2018-11-23
    • 1970-01-01
    • 2016-02-25
    • 2018-02-24
    相关资源
    最近更新 更多