选择/标准化HoG参数用于目标检测?

4 投票
1 回答
3381 浏览
提问于 2025-04-18 07:22

我正在使用HoG特征来进行物体检测和分类。

我对如何处理不同长度的HoG特征向量感到困惑。

我用大小相同的训练图像训练了我的分类器。

现在,我正在从我的图像中提取区域来运行分类器,比如使用滑动窗口的方法。有些提取的窗口比我训练时使用的图像要大得多。(我训练时使用的图像是可能在测试图像中出现的物体的最小尺寸)。

问题是,当我需要分类的窗口比训练图像大时,HoG特征向量也会比训练模型的特征向量大很多。

那么我该如何使用模型的特征向量来对提取的窗口进行分类呢?

举个例子,假设我提取的一个窗口的尺寸是360x240,我们称之为extractedwindow。然后我有一个训练图像,尺寸只有20x30,我们称之为trainingsample

如果我这样获取HoG特征向量:

fd1, hog_image1 = hog(extractedwindow, orientations=8, pixels_per_cell=(16, 16), cells_per_block=(1, 1), visualise=True, normalise=True)

fd2, hog_image2 = hog(trainingsample, orientations=8, pixels_per_cell=(16, 16), cells_per_block=(1, 1), visualise=True, normalise=True)

print len(fd1)
print len(fd2)

那么特征向量之间的长度差异就是:

2640
616

那么这个问题该如何解决呢?提取的窗口是否应该缩小到分类器训练时样本的大小?还是应该根据每个提取的窗口改变或归一化HoG特征的参数?或者还有其他方法吗?

我个人是在使用python,利用scikit-image库,但我想这个问题和我使用的平台无关。

1 个回答

3

正如你所说,HOG(方向梯度直方图)其实是用一个参数来设定像素的单元格大小。所以如果图片的大小变化了,单元格的数量也会不同,这样得到的描述符(特征描述)大小也会不同。

使用HOG的主要方法是确保在训练和测试时使用相同大小的窗口(也就是像素大小要一致)。所以提取的窗口(extracted window)应该和训练样本(trainingsample)的大小是一样的。

那个参考中,有用户提到:

HOG并不是尺度不变的。对于每张图片得到相同长度的特征向量,并不能保证尺度不变。

所以你应该使用相同的窗口大小……

撰写回答