Python 合并LBP和HOG特征描述符

Python 合并LBP和HOG特征描述符,python,opencv,svm,Python,Opencv,Svm,我正在进行年龄、性别评估项目。到目前为止,我已经尝试使用LBP(局部二进制模式)+SVM(支持向量机)来训练它进行性别分类,但在使用LBP+SVM时,我得到了太多的假阳性,因此我尝试了HOG(梯度直方图)+SVM,令人惊讶的是,准确率提高到了90%,所以我只是想合并描述符的特征,并用它来训练SVM。其代码如下: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) fd = hog(gray, orientations, pixels_p

我正在进行年龄、性别评估项目。到目前为止,我已经尝试使用LBP(局部二进制模式)+SVM(支持向量机)来训练它进行性别分类,但在使用LBP+SVM时,我得到了太多的假阳性,因此我尝试了HOG(梯度直方图)+SVM,令人惊讶的是,准确率提高到了90%,所以我只是想合并描述符的特征,并用它来训练SVM。其代码如下:

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    fd = hog(gray, orientations, pixels_per_cell, cells_per_block, visualize, normalize) #HOG descriptor here.

    hist = desc.describe(gray) #get the LBP histogram here.

    # extract the label from the image path, then update the
    # label and data lists
    labels.append(imagePath.split("/")[-2])
    data.append(fd + hist) # tried concatinate both featurs, but gives error on this line.

# train a Linear SVM on the data
model = LinearSVC(C=100.0, random_state=42)
model.fit(data, labels)
但是,当尝试这一行时:
data.append(fd+hist)
只是尝试连接两个功能描述器,并抛出以下错误:

回溯(最近一次调用上次):文件 “/home/swap/Ubuntu home/swap/openCV/gender\u age\u weight\u recog/tarin.py”

第41行,在 data.append(fd+hist)ValueError:操作数无法与形状(11340,)(26,)一起广播


因此,有人能告诉我如何将两个特征合并为一个特征,然后训练支持向量机来实现这一点。

问题是您试图添加两个不同大小的数组。一个数组有11340个元素,另一个数组有26个元素。在存储这些值时,您应该更改逻辑,而不是将它们相加。

我发现了问题所在,可以简单地将numpy数组与任何形状相似的特征描述符堆叠在一起,如HOG和LBPH在灰度图像上工作,因此在这种情况下,
LBP生成的特征的深度,HOG将始终是一个,所以我们可以用numpy来叠加它们

    desc_hist = desc.describe(gray_img)
    hog_hist = hog(gray_img, orientations, pixels_per_cell, cells_per_block, 'L1', visualize, normalize)      
    feat = np.hstack([desc_hist, hog_hist])
但假设有人想要合并在3个通道上工作的hsv直方图 图像(RGB),然后它可以展平到1D阵列,然后可以 堆叠以拥有该功能

现在,所有这些都可以像往常一样堆叠起来

feat = np.hstack([desc_hist, hog_hist, td_hist])

+问题1。我的最爱也是如此,所以如果有新的答案出现,我可以跟进。我的建议是,如何为每个图像分配一个包含HOG和LBP直方图元组的列表,即;一个元组将包含每个图像的HOG和LBP直方图,所有这些元组都可以在一个列表中获取。是的,这是一个很好的元组,请尝试!
feat = np.hstack([desc_hist, hog_hist, td_hist])