在scikit-learn中如何处理HOG特征数组以用于分类?

use*_*627 3 numpy training-data scikit-learn anaconda cascade-classifier

我想从图像中提取HOG功能,以便可以将它们通过分类器(AdaBoost.SAMME尤其是使用scikit-learn:scikit-learn集合中的multiclass Adaboost)。

为此,我需要将图像转换为类似数组的 shape = [n_samples, n_features]

但是从图像中提取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)
Run Code Online (Sandbox Code Playgroud)

当我检查时fd,它是一个像这样的数组:

在此处输入图片说明

让我们以前9行为例,并假设这是hog函数的完整输出,并且从中获得HOG功能的这张图像是训练数据集中的第一张图像。

然后,假设我有一千张训练图像,那么如何将HOG信息表示为X = [n_samples, n_features]

下面的行X是我可以用作分类器输入的第一行吗?

[1, [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]
Run Code Online (Sandbox Code Playgroud)

将整行HOG值都视为一个功能吗?还是这是错误的?据我了解,培训样本应符合以下格式:

[sample_index, feature_1, feature_2, feature_3, ..., feature_x]
Run Code Online (Sandbox Code Playgroud)

eic*_*erg 5

[n_samples, n_features]正如您正确地说的那样,对于scikit学习分类器,数据以形状矩阵的形式表示。不需要样本索引(如果您出于其他目的需要一个样本索引,则不要将其放在要传递给scikit学习的矩阵中)。

以您的示例为例,

samples = [[0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]
Run Code Online (Sandbox Code Playgroud)

这是示例的python列表。它包含一个示例,其中列出了您的功能。但是,如果您有大量数字数据,则必须将其连续保存在内存中。这是使用numpy.ndarrays 完成的。将您的一个样本矩阵转换为数组就像

import numpy as np
sample_array = np.array(samples)
Run Code Online (Sandbox Code Playgroud)

让我们继续几个示例。我将多次复制同一副本,但是它们当然会有所不同。同样,这确实应该是一个数组,所以

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]])
Run Code Online (Sandbox Code Playgroud)

可以将这个样本矩阵输入分类器,通常使用的作用X

  • 在我称为样本的数组中,您有3个图像的生猪描述符。每张图像用一行表示。每个图像都是一个样本。您使用的图像数量为n_samples。每个图像的HOG功能数量为n_features。“ n_samples”和“ n_features”分别描述了输入数量和每个输入的大小 (2认同)
  • 您的特征向量必须大小相同。通常,您从扫描图像的大小相等的窗口中提取HOG功能。所以是的,实际上最好是将样本的大小设为相同 (2认同)