OpenCV HOG描述符参数

5

我试图使用cv2.HOGDescriptor()来检测摄像头的视频流中的人,并使用默认的人员分类器。

这个识别器有点奏效,但是我对于如何为winStridepaddingscalegroupThreshold分配值的理解存在问题。

目前,摄像头视频流的帧大小为1280 X 720,我将其调整为400 X 400,然后使用以下参数执行detectMultiScale

hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05, 'finalThreshold': 2}

基于这个答案,我了解了这些参数的作用和代表的含义。
我的问题是,是否有一种方法可以将图像大小与这些值进行映射? 数学方程? 估计方法? 我不一定要一个具体的或者能给出所有值的方法,而是希望比试错法魔数更好的办法。
大多数参考文献和教程基本上都使用魔数,而没有提出他们如何获得它们的建议。 PS:如果您仍然不确定我的问题,请看这里的视觉辅助I am looking for the cloud
1个回答

3
很遗憾,这里没有银弹。从输入数据到输入数据,最优解决方案会有所不同,因此很难确定。以下是一些额外的指导:
- 如果步幅 > 窗口大小,则可能甚至不会在人身上运行检测器。我通常认为步幅与窗口大小有关,例如64/8。 - 如果缩放比例约为1,则不会发生太多事情。像1.2、1.3这样的值通常更好。该参数本质上将图像缩小,然后再次运行检测器。希望的是,如果人在第一次运行中对检测器来说太大了,那么在缩小后他们可能就是合适的大小了。例如,如果您的检测器大小是默认的64x128,但图像中的某个人物高度为150px,则检测器可能无法意识到它是一个人物,因为它只能查看腿部或者躯干。如果我们按比例缩小150/1.2=125,则现在可能会检测到这个人。 (愚蠢的数字。如果他们是150px,它非常有可能检测到该人。但你明白我的意思。) - 最好的方法是进行一些实验。选择一些您认为代表您用例的图像/视频,创建端到端设置,并尝试几种不同的参数设置。如果未检测到人,请考虑他们与检测器大小的关系。他们比那个大吗?更小?如果它们更小,可以增加缩放因子或增加级别数。如果它们更大,请更多地缩小输入图像。
附注:如果您只是简单地调整大小而没有裁剪,则会得到糟糕的结果。要么将其调整为相同的纵横比,例如711x400,要么在调整大小之前将初始图像裁剪为正方形。

1
谢谢你的建议。 - eshirima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接