Was bedeutet "Geschichte" in BackgroundSubtractorMOG2?

Ich bin auf OpenCV für Java (aber das ist nicht relevant, denke ich). Ich benutze dasBackgroundSubtractorMOG2 Klasse, auf die (schlecht) verwiesen wirdHie. Ich habe das Zivkovic-Papier über den Algorithmus gelesen und verstanden, den Sie unter finden könneHie.

BackgroundSubtractorMOG2 nimmt in seinem Konstruktor einen Parameter namenshistory. Was ist das und wie beeinflusst es das Ergebnis? Könnten Sie mich zum Beispiel auf seine Referenz innerhalb des Papiers verweisen?

Von demclass source code, Zeile 106, es wird gesagt, dassalpha = 1/history. Das würde bedeuten, dass die Historie nämlich der T-Parameter innerhalb des Papiers ist, d. H. (Mehr oder weniger) die Anzahl der Frames, die den Trainingssatz bilde

Aber es scheint nicht so. Wenn Sie den Wert im Konstruktor von 10 auf 500 oder höher ändern, hatkeine Wirkun auf das Endergebnis. Das rufe ich an:

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

Es ist egal, welchen Verlauf ich eingestellt habe, sei es 5, 10, 500, 1000 - das Ergebnis ist immer das gleiche. Wobei, wenn ich das @ ändealpha Wert (die Lernrate) bisapply(), Ich kann seinen wirklichen Einfluss sehen:

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);

Wenn ich hier das Alpha ändere, ändert sich das Ergebnis sehr, was verständlich ist. Also zwei Vermutungen:

history ist nicht wirklich1/alpha wie der Quellcode sagt. Aber was ist es dann? Wie wirkt es sich auf den Algorithmus aus?

history ist wirklich1/alpha, aber es gibt einen Fehler im Java-Wrapper, der dashistory Wert, den Sie im Konstruktor festgelegt haben, ist unbrauchbar.

Kannst du mir helfen

(Markieren von c ++, da dies hauptsächlich eine Frage zu einer OpenCV-Klasse ist und das gesamte OpenCV-Java-Framework nur ein Wrapper um c ++ ist).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage