Ejemplo n.º 1
0
 /// <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));
        }