gpt4 book ai didi

java - BackgroundSubtractorMOG2 中的 "history"是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:13 26 4
gpt4 key购买 nike

我正在使用 OpenCV for java(但我想这不相关)。我正在使用 BackgroundSubtractorMOG2 类,该类被(错误地)引用了 here .我已经阅读并理解了关于算法的 Zivkovic 论文,您可以找到 here .

BackgroundSubtractorMOG2 在其构造函数中接收一个名为 history 的参数。它是什么,它如何影响结果?例如,您能否指出论文中的引用文献?

来自class source code ,第106行,表示alpha = 1/history。这意味着历史就是论文中的 T 参数,即(或多或少)构成训练集的帧数。

不过好像不是。将构造函数中的值从 10 更改为 500 或更高,对最终结果没有影响。这就是我所说的:

Mat result = new Mat();
int history = 10; //or 50, or 500, or whatever
BackgroundSubtractorMOG2 sub = new BackgroundSubtractorMOG2(history, 16, false);
for (....) {
sub.apply(frame[i], result);
}
imshow(result); //let's see last frame

无论我设置什么历史,无论是 5、10、500、1000 - 结果总是一样的。然而,如果我通过 apply() 更改 alpha 值(学习率),我可以看到它的真正影响:

Mat result = new Mat();
float alpha = 0.1; //learning rate, 1/T (1/history?)
BackgroundSubtractorMOG2 sub = new BackgroundSubtractorMOG2(whatever, 16, false);
for (...) {
sub.apply(frame[i], result, alpha);
}
imshow(result);

如果我在这里更改 alpha,结果会发生很大变化,这是可以理解的。所以,两个猜想:

  1. history 并不是真正的 1/alpha 如源代码所述。但是然后:它是什么?它如何影响算法?

  2. history 确实是 1/alpha,但 java 包装器中存在一个错误,它使您设置的 history 值构造函数没用。

你能帮帮我吗?

(也标记 c++,因为这主要是关于 OpenCV 类的问题,而整个 OpenCV java 框架只是 c++ 的包装器)

最佳答案

alpha = 1/history 似乎很清楚(除了一些短暂的瞬间)。在无效 BackgroundSubtractorMOG2Impl::apply 方法中:

learningRate = learningRate >= 0 && nframes > 1 ? learningRate : 1./std::min( 2*nframes, history );

您可以使用 getHistory() 方法测试 BackgroundSubtractorMOG2 对象是否使用您在构造函数中传递的历史值。

关于java - BackgroundSubtractorMOG2 中的 "history"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com