3

我想从图像中提取 HOG 特征,以便我可以将它们放入分类器(AdaBoost.SAMME特别是使用 scikit-learn: multiclass Adaboost in scikit-learn ensemble)。

为此,我需要将图像转换为类似数组的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)

当我检查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]]

这整行 HOG 值是否会被视为单个特征?或者这是错的?据我了解,训练样本应符合以下格式:

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

1 回答 1

5

对于 scikit learn 分类器,数据以 shape 矩阵的形式表示[n_samples, n_features],正如您所说的那样。不需要样本索引(如果您需要一个用于其他目的,请不要将其放入您打算传递给 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.ndarrays 完成的。将您的一个样本矩阵转换为数组就像

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.

于 2014-04-10T20:15:29.330 回答