如何在开放系统中将值保持在已知界限之间?

信息处理 图像处理 过滤器设计
2022-01-25 17:49:55

我用算法检测图像中的点。唯一的参数是T我可以在每个图像上修改的阈值。这些图像来自连续视频,因此每张都与前一张略有不同。我不知道在确定的阈值下我先验了多少分,因为它还取决于处理后的图像的内容。整个系统至少需要20个点才能继续运行,但我的点越多,过程越复杂,因此应用程序越慢。我制定了一个方案来表示这一点:

问题视觉表示

我需要保持nb超过 20 个,如果可能的话低于 50 个,以避免过度计算。我在 40 处确定了一个“理想”值。我从 开始T = 30,但这只是经验性的。通常,T = 10获得的分数太多而T = 60太少。

我的问题:如何T根据过去的值进行过滤nb,以便nb为每个新图像保留大约 40 个?

正如您可能已经猜到的那样,我准确地说我真的不是过滤专家。我什至不确定这是我需要的过滤器。

编辑:根据评论中的要求,这里是五个不同阈值的 nb 图。内容始终相同(固定摄像机),因此变化主要是由于摄像机噪声。

不同图像上 nb 的演变,针对五个不同的阈值

1个回答

在您的 nb vs. image 图中,似乎存在一些高频“噪声”(这并不奇怪),并且窗口平均值非常稳定。出于这个答案的目的,我将假设高频噪声相当代表一般情况,但也会有一些慢到中等的趋势。如果图像发生变化,似乎必须有。但是,帧速率通常应该比变化快,因此趋势应该相对缓慢。

通常我会建议使用低频滤波器来消除高频“噪音”,但在这种情况下,我认为这不明智。对于任何给定的图像,下一张图像很可能是高度相关的,所以我认为如果一张图像的 nb 有很大的变化,稍微调整一下是有意义的。我建议两种不同的解决方案。

1) 使用过去n nb 值的简单移动平均值。在这个应用程序中,性能显然很重要,移动平均线的计算成本很低。移动平均线提供了一定的稳定性,考虑到高频噪声,这很重要,而且对数据的变化也有反应。您可以通过减少或增加n来以响应性换取稳定性

一旦你有了 nb 移动平均线,你就可以使用它来产生“误差”,即你的目标 nb 减去移动平均线 nb。因此,如果平均 nb 过低,则误差为正,如果平均 nb 过高,则误差为负。您使用错误来调整阈值。通常,新的阈值是

threshold=thresholdαerror

α需要通过分析您的问题或通过经验测试来确定。您从阈值中减去错误结果,因为正错误意味着您需要 nb 上升,这意味着您需要阈值下降。

2) 使用PID 控制器PID 控制器将为每个图像生成一个阈值,并使用目标 nb 与实际 nb 误差(类似于移动平均误差,除了它是瞬时误差,而不是平均值)来更新下一张图像的阈值。

控制器的“积分”部分将为您提供稳定性,而比例/微分部分将为您提供响应能力。您需要确保循环本身是稳定的,并在不同的视频上测试常量,但这将是调整阈值的一种非常有效的方法。如果需要,它还提供了通过动态更改循环常量来使您的应用程序更智能的可能性。

解决方案 1 更容易实现并且计算成本更低,解决方案 2 更强大但也更复杂。我会看看移动平均线是否足够好。如果是,很好,如果不是,实施 PID 控制器。

编辑:试图使这两种解决方案更加清晰。