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



我将使用与SVM分类器结合使用的HOG功能描述符进行对象检测项目。Scikit-图像中提供的HOG在分类阶段带来了很好的结果。但是,它运行非常缓慢(每图像20秒)。另一方面,OPENCV版本非常快(每张图像0.3s)。问题是,尽管我在两个猪版本中都使用了相同的参数,但结果彼此不同。我用于每个版本的参数如下:

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 Hog的问题是什么,不会产生与Scikit-image相同的结果?

在scikit-image中的猪纸的实现与OpenCV的实现不同。我上次浏览源代码时,我注意到,除其他外,Scikit-image执行的标准化不是纸张的建议。

我建议使用OPENCV提供的一种,因为它可以更改几个参数,并且更接近Hog Paper的实现。另外,正如您为自己发现的那样,OpenCV实施是优化速度更快的。

最新更新