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

标签 python opencv image-processing object-detection scikits

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

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 生成的 pig :

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

由 scikit-image 产生的 hog:

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

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

OpenCV hog 生成的结果与 scikit-image 的结果不同,这有什么问题?

最佳答案

HOG论文在scikit-image中的实现与opencv不同。上次查看源代码时,我注意到,除其他事项外,scikit-image 执行的规范化并不是本文推荐的规范化。

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

关于python - 为什么我在使用 scikit-image hog 和 OpenCV hog 时没有得到相同的特征描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46272842/

相关文章:

python - 使用 python 的 logging 模块记录所有异常和错误

python - 手动实现bayern转RGB

python - 调整大小和裁剪图像后找到新的 (X,Y)

c++ - 使用 OpenCV C++ 检测和跟踪视频中液滴的步骤

java - Android 中的 BitmapFactory null 问题

python - 如何阻止用户输入 1582 年之前的年份 (Python)

Python递归不返回值

python - 循环使用 Rocket.Chat API

image - 如何在 OpenCV 中使用 Adob​​e RGB 色彩空间读取 jpeg 图像?

python - 从视频错误中提取帧