【发布时间】:2020-04-09 12:08:13
【问题描述】:
我想训练一个具有 hog 特征的 SVM 来自 skimage 的 hog 描述符。 这些图像有 3 个通道(RGB 图像),我想在提取 hog 特征之前将其转换为灰度。 这就是问题所在,当我使用 OpenCV 中的以下代码时
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
然后我得到未归一化的特征,这意味着像素值仍在 0 到 255 之间。
当我使用来自 Skimage 的代码时
img_gray = color.rgb2gray(image)
然后这些值似乎被归一化,因为像素值约为。介于 0 和 1 之间。
我尝试了两个版本的 hog 特征提取,结果相似但不一样,当我训练 SVM 时,结果也相似但不一样。当我用归一化图像训练 SVM 时,精度等会好一些,但不会很多。
当我查看来自 skimage https://scikit-image.org/docs/dev/auto_examples/features_detection/plot_hog.html 的以下链接时,我假设在使用 HOG 描述符之前不需要对图像进行标准化,因为此链接中的宇航员图像也未标准化。 不过,我觉得这很混乱。 您能否确认或不同意我的假设,即使用 OpenCV 的代码比使用 skimage 的代码从 rgb 转换为灰色更好?
完整代码:
import cv2
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY
或
from skimage import color
img_gray = color.rgb2gray(image)
之前
from skimage import feature
feat = feature.hog(img_gray, orientations=12, pixels_per_cell=(5,5), cells_per_block=(2,2), transform_sqrt=True, visualize=False)
【问题讨论】:
标签: opencv svm normalization feature-extraction scikit-image