मैं जावा के लिए OpenCV पर हूँ (लेकिन यह प्रासंगिक नहीं है मुझे लगता है कि)। मैं BackgroundSubtractorMOG2
कक्षा का उपयोग कर रहा हूं जो कि (खराब) संदर्भित है here। मैंने एल्गोरिदम के बारे में ज़िकोकोविक पेपर को पढ़ और समझ लिया है जिसे आप here पा सकते हैं।BackgroundSubtractorMOG2 के अंदर "इतिहास" का अर्थ क्या है?
BackgroundSubtractorMOG2
इसके निर्माता एक पैरामीटर history
कहा जाता है में ले जाता है। यह क्या है, और यह परिणाम को कैसे प्रभावित करता है? क्या आप मुझे कागज के अंदर इसके संदर्भ में इंगित कर सकते हैं, उदाहरण के लिए?
class source code से, लाइन 106, यह उस alpha = 1/history
कहा जाता है। इसका मतलब यह होगा कि इतिहास पेपर के अंदर टी पैरामीटर है, यानी (अधिक या कम) प्रशिक्षण सेट का निर्माण करने वाले फ्रेम की संख्या।
हालांकि यह इतना प्रतीत नहीं होता। 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 - परिणाम हमेशा एक ही है।
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);
अगर मैं यहाँ अल्फा बदलने के लिए, परिणाम एक बहुत है, जो समझा जा सकता है परिवर्तन: जबकि, अगर मैं apply()
के माध्यम से alpha
मूल्य (सीखने की दर) बदलने के लिए, मैं अपनी असली प्रभाव देख सकते हैं। तो, दो अनुमान:
history
वास्तव में1/alpha
स्रोत कोड राज्यों के रूप में नहीं है। लेकिन फिर: यह क्या है? यह एल्गोरिदम को कैसे प्रभावित करता है?history
वास्तव में1/alpha
है, लेकिन जावा आवरण आप निर्माता बेकार में सेटhistory
मूल्य बनाता है में एक बग है।
क्या आप मेरी मदद कर सकते हैं?
(टैगिंग सी ++ भी मुख्य रूप से ओपनसीवी कक्षा के बारे में एक प्रश्न है और पूरे ओपनसीवी जावा फ्रेमवर्क सी ++ के आसपास सिर्फ एक रैपर है)।
यही वह है जो मैंने समझा था, लेकिन मेरे परीक्षणों के खिलाफ हैं, जैसा कि मैंने दिखाया है - बदलते इतिहास परिणाम को नहीं बदलता है। अपनी लाइन देखकर, शायद ऐसा इसलिए है क्योंकि '2 * nframes
natario
कि 'min' का अर्थ है कि पहले फ्रेम में यह 'अल्फा = 0.5' का उपयोग कर रहा है, फिर धीरे-धीरे' अल्फा = 1/इतिहास' पर जा रहा है। दिलचस्प। – natario