/// <summary> /// Creates an instance of BackgroundSubtractorGSOC algorithm. /// </summary> /// <param name="mc">Whether to use camera motion compensation.</param> /// <param name="nSamples">Number of samples to maintain at each point of the frame.</param> /// <param name="replaceRate">Probability of replacing the old sample - how fast the model will update itself.</param> /// <param name="propagationRate">Probability of propagating to neighbors.</param> /// <param name="hitsThreshold">How many positives the sample must get before it will be considered as a possible replacement.</param> /// <param name="alpha">Scale coefficient for threshold.</param> /// <param name="beta">Bias coefficient for threshold.</param> /// <param name="blinkingSupressionDecay">Blinking supression decay factor.</param> /// <param name="blinkingSupressionMultiplier">Blinking supression multiplier.</param> /// <param name="noiseRemovalThresholdFacBG">Strength of the noise removal for background points.</param> /// <param name="noiseRemovalThresholdFacFG">Strength of the noise removal for foreground points.</param> public BackgroundSubtractorGSOC( BackgroundSubtractorLSBP.CameraMotionCompensation mc = BackgroundSubtractorLSBP.CameraMotionCompensation.None, int nSamples = 20, float replaceRate = 0.003f, float propagationRate = 0.01f, int hitsThreshold = 32, float alpha = 0.01f, float beta = 0.0022f, float blinkingSupressionDecay = 0.1f, float blinkingSupressionMultiplier = 0.1f, float noiseRemovalThresholdFacBG = 0.0004f, float noiseRemovalThresholdFacFG = 0.0008f) { _ptr = ContribInvoke.cveBackgroundSubtractorGSOCCreate(mc, nSamples, replaceRate, propagationRate, hitsThreshold, alpha, beta, blinkingSupressionDecay, blinkingSupressionMultiplier, noiseRemovalThresholdFacBG, noiseRemovalThresholdFacFG, ref _backgroundSubtractorPtr, ref _algorithmPtr); }
private IBackgroundSubtractor CreateLSBPBackgroundSubtractor() { BackgroundSubtractorLSBP.CameraMotionCompensation cameraMotionCompensation = BackgroundSubtractorLSBP.CameraMotionCompensation.None; int nSamples = 5, LSBPRadius = 16, LSBPthreshold = 8, minCount = 2; float tlower = 2, tupper = 32, tinc = 1, tdec = 0.05F, rscale = 10, rincdec = 0.005F, noiseRemovalThresholdFacBG = 0.0004F, noiseRemovalThresholdFacFG = 0.0008F; bool showWarning = false; string warningMessage = String.Empty; Enum.TryParse(lsbpCameraMotionCompensationCmBx.SelectedValue.ToString(), out cameraMotionCompensation); if (int.TryParse(lsbpNSamplesTxBx.Text, out int parsedNSamples)) { nSamples = parsedNSamples; } else { showWarning = true; warningMessage = warningMessage + "nSamples"; } if (int.TryParse(lsbpRadiusTxBx.Text, out int parsedLSBPRadius)) { LSBPRadius = parsedLSBPRadius; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "LSBP Radius"; } else { warningMessage = warningMessage + ", LSBP Radius"; } } if (float.TryParse(lsbpTLowerTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedTLower)) { tlower = parsedTLower; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "tlower"; } else { warningMessage = warningMessage + ", tlower"; } } if (float.TryParse(lsbpTUpperTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedTUpper)) { tupper = parsedTUpper; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "tupper"; } else { warningMessage = warningMessage + ", tupper"; } } if (float.TryParse(lsbpTIncTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedTInc)) { tinc = parsedTInc; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "tinc"; } else { warningMessage = warningMessage + ", tinc"; } } if (float.TryParse(lsbpTDecTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedTDec)) { tdec = parsedTDec; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "tdec"; } else { warningMessage = warningMessage + ", tdec"; } } if (float.TryParse(lsbpRScaleTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedRScale)) { rscale = parsedRScale; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "rscale"; } else { warningMessage = warningMessage + ", rscale"; } } if (float.TryParse(lsbpRIncDecTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedRIncDec)) { rincdec = parsedRIncDec; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "rincdec"; } else { warningMessage = warningMessage + ", rincdec"; } } if (float.TryParse(lsbpNoiseRemovalThresholdFacBGTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedNoiseRemovalThresholdFacBG)) { noiseRemovalThresholdFacBG = parsedNoiseRemovalThresholdFacBG; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "noiseRemovalThresholdFacBG"; } else { warningMessage = warningMessage + ", noiseRemovalThresholdFacBG"; } } if (float.TryParse(lsbpNoiseRemovalThresholdFacFGTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out float parsedNoiseRemovalThresholdFacFG)) { noiseRemovalThresholdFacFG = parsedNoiseRemovalThresholdFacFG; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "noiseRemovalThresholdFacFG"; } else { warningMessage = warningMessage + ", noiseRemovalThresholdFacFG"; } } if (int.TryParse(lsbpThresholdTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out int parsedLSBPThreshold)) { LSBPthreshold = parsedLSBPRadius; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "LSBP threshold"; } else { warningMessage = warningMessage + ", LSBP threshold"; } } if (int.TryParse(lsbpMinCountTxBx.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out int parsedMinCount)) { minCount = parsedMinCount; } else { showWarning = true; if (warningMessage == String.Empty) { warningMessage = warningMessage + "minCount"; } else { warningMessage = warningMessage + ", minCount"; } } if (showWarning) { warningMessage = "Incorrect " + warningMessage + " value. Used defaults."; ShowWarning("Incorrect parameters", warningMessage); } return(new BackgroundSubtractorLSBP(cameraMotionCompensation, nSamples, LSBPRadius , tlower, tupper, tinc, tdec, rscale, rincdec, noiseRemovalThresholdFacBG , noiseRemovalThresholdFacFG, LSBPthreshold, minCount)); }