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