Numpy 如何处理scikit学习中用于分类的HOG特征数组?

Numpy 如何处理scikit学习中用于分类的HOG特征数组?,numpy,scikit-learn,anaconda,training-data,cascade-classifier,Numpy,Scikit Learn,Anaconda,Training Data,Cascade Classifier,我想从图像中提取HOG特征,以便通过分类器(AdaBoost.SAMME,尤其是使用scikit learn:) 为此,我需要将图像转换为一个数组,如shape=[n_样本,n_特征] 但是从图像中提取HOG特征的输出是一个一维数组。 这是我的代码的相关部分: tree = io.imread('C:\\Users\\app\\Pictures\\treephoto1.jpg') type(tree) print tree.shape, tree.dtype graytree = color.

我想从图像中提取HOG特征,以便通过分类器(
AdaBoost.SAMME
,尤其是使用scikit learn:)

为此,我需要将图像转换为一个数组,如
shape=[n_样本,n_特征]

但是从图像中提取HOG特征的输出是一个一维数组。 这是我的代码的相关部分:

tree = io.imread('C:\\Users\\app\\Pictures\\treephoto1.jpg')
type(tree)
print tree.shape, tree.dtype

graytree = color.rgb2gray(tree)
ge = filter.canny(graytree)
fd, hog_image = hog(ge, orientations=8, pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1), visualise=True)
当我选中fd时,它是这样一个数组:

让我们以前9行为例,假设这是
hog
函数的完整输出,并且我从中获取hog特征的图像是训练数据集中的第一个图像

那么,考虑到我有一千张训练图像,这个HOG信息将如何表示为
X=[n_样本,n_特征]

下面这一行是
X
的第一行,我可以将其用作分类器的输入吗

[1, [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]
这整行HOG值是否会被视为单个特征?或者这是错误的? 据我所知,培训样本应符合以下格式:

[sample_index, feature_1, feature_2, feature_3, ..., feature_x]

对于scikit学习分类器,数据以形状矩阵的形式表示,正如您正确地说的那样。不需要样本索引(如果您出于其他目的需要样本索引,请不要将其放入您打算传递给scikit learn的矩阵中)

以你为例,一个样本是

samples = [[0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]
这是一个python示例列表。它包含一个示例,是您的功能列表。然而,如果你有大量的数字数据,你必须把它连续地保存在内存中。这是使用
numpy.ndarray
s完成的。将一个样本矩阵转换为数组非常简单

import numpy as np
sample_array = np.array(samples)
让我们继续看几个例子。我会复制同一个好几次,当然它们会有所不同。这应该是一个数组,所以

samples =  np.array(
               [[0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149],
               [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149],
               [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]])

这个样本矩阵可以输入分类器,通常它扮演
X

好吧,我很困惑-那么n个样本在形状[n个样本,n个特征]中必须保持什么值?在我看来,您构建的数组似乎只是[n_features]。如果我有一千张训练图像,分类器会接受[1000,样本]吗?或者简单地说[samples]?另外-您提到sample_array是一个样本图像的矩阵,但您也将其称为“特征列表”。但我只使用了HOG描述符,没有其他功能。所以,尽管有一个完整的值数组,但它仍然会被当作唯一的HOG特性,对吗?所以,如果我使用除HOG之外的另一个特性,那么一个示例会是这样的:np.array([set of HOG features],[set of second type of features]])?我对计算机视觉有点陌生,所以我对术语不太熟悉……在我称之为样本的数组中,有3幅图像的hog描述符。每个图像由一条线表示。每个图像都是一个示例。您使用的图像数量为n_个样本。每个图像的HOG特征数为n_特征。“n_样本”和“n_特征”仅分别描述输入的数量和每个输入的大小。特征向量的大小必须相同。通常,从扫描图像的大小相等的窗口中提取HOG特征。因此,是的,事实上,最好为您的客户提供相同的尺码samples@user961627测试输入应始终与训练集位于同一空间,因为模型已学会在该空间中工作。两种方法都应采用相同的预处理。