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