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)
[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。