为什么我在使用scikit-image hog和OpenCV hog时没有获得相同的功能描述?

时间:2017-09-18 06:27:26

标签: python opencv image-processing object-detection scikits

我将使用hog特征描述符与SVM分类器结合用于对象检测项目。 scikit-image中提供的猪在分类阶段产生了非常好的结果。但是,它运行速度非常慢(每张图像20秒)。另一方面,OpenCV版本非常快(每张图像0.3秒)。问题是虽然我对两个猪版本使用了相同的参数,但结果却彼此不同。 我为每个版本使用的参数如下:

OpenCV版本:

winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)

scikit-image版本:

hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')

OpenCV导致的生猪:

[[ 0.        ]
[ 0.        ]
[ 0.99502486]
   ...,
[ 0.99502486]
[ 0.        ]
[ 0.        ]]

scikit-image导致的生猪:

[[ 0.        ]
[ 0.        ]
[ 0.16415654]
   ...,
[ 0.14253933]
[ 0.        ]
[ 0.        ]]

值得注意的是,两个描述符生成的特征数量是相同的。

OpenCV的问题是什么,与scikit-image的结果不同?

1 个答案:

答案 0 :(得分:1)

scikit-image中HOG文件的实现与opencv不同。我最后一次浏览源代码时注意到,除其他外,scikit-image执行的规范化不是本文推荐的规范化。

我建议使用opencv提供的那个,因为它允许你更改几个参数,并且更接近HOG文件的实现。此外,正如您自己发现的那样,opencv实现经过优化并且速度更快。