示例#1
0
        protected override float PerPixelOperation(Matrix input, int row, int column)
        {
            float signalMean;
            float signalVariance;
            float trimmedMean;

            //calculate signal mean 1 and signal variance 1
            SignalMeanInfo signalMeanInfo = new SignalMeanInfo();

            DoWindowPass(input, row, column, CalculateSignalMean, signalMeanInfo);
            signalMean = signalMeanInfo.sum / signalMeanInfo.count;

            SignalVarianceInfo signalVarianceInfo = new SignalVarianceInfo();

            signalVarianceInfo.signalMean = signalMean;
            DoWindowPass(input, row, column, CalculateSignalVariance, signalVarianceInfo);
            signalVariance = signalVarianceInfo.sum / (signalVarianceInfo.count - 1);

            //calculate z and eta and trimmed mean
            ZtmInfo ztmInfo = new ZtmInfo(WindowSize);

            ztmInfo.mean  = signalMean;
            ztmInfo.stdev = (float)Math.Sqrt(signalVariance);
            DoWindowPass(input, row, column, CalcTrimmedMean, ztmInfo);
            trimmedMean = ztmInfo.sum / ztmInfo.eta;

            return(trimmedMean);
        }
        protected virtual float CalculateSignalMean(Matrix input, int row, int column)
        {
            float          signalMean;
            SignalMeanInfo signalMeanInfo = new SignalMeanInfo();

            DoWindowPass(input, row, column, InternalCalcSignalMean, signalMeanInfo);

            //signalMean = sum / count;
            signalMean = signalMeanInfo.sum / signalMeanInfo.count;
            return(signalMean);
        }
        protected override float PerPixelOperation(Matrix input, int row, int column)
        {
            float signalMean1;
            float signalVariance1;
            float signalMean2;
            float signalVariance2;
            float noiseVariance;

            //calculate signal mean 1 and signal variance 1

            SignalMeanInfo signalMeanInfo = new SignalMeanInfo();

            DoWindowPass(input, row, column, InternalCalcSignalMean, signalMeanInfo);
            signalMean1 = signalMeanInfo.sum / signalMeanInfo.count;


            SignalVarianceInfo signalVarianceInfo = new SignalVarianceInfo();

            signalVarianceInfo.signalMean = signalMean1;
            DoWindowPass(input, row, column, InternalCalcSignalVariance, signalVarianceInfo);

            signalVariance1 = signalVarianceInfo.sum / (signalVarianceInfo.count - 1);

            //calculate z and eta and signal mean 2

            ZtmmseInfo info1 = new ZtmmseInfo(WindowSize);

            info1.mean  = signalMean1;
            info1.stdev = (float)Math.Sqrt(signalVariance1);
            DoWindowPass(input, row, column, CalcEta, info1);

            signalMean2 = info1.sum / info1.eta;

            //calculate signal variance 2
            info1.sum  = 0;
            info1.mean = signalMean2;
            DoWindowPass(input, row, column, CalcSignalVariance2, info1);

            signalVariance2 = info1.sum / (info1.eta - 1);

            //calculate noise variance

            noiseVariance = CalculateNoiseVariance();


            return(CalculateFinalValue(input, row, column, signalMean2, signalVariance2, noiseVariance));
        }
示例#4
0
        //protected virtual void CalcSignalVariance2(float value, int row, int column, int rowWithinWindow, int columnWithinWindow, ZtmmseInfo info)
        //{
        //    float z = info.z[rowWithinWindow, columnWithinWindow];
        //
        //    if (z <= Zeta)
        //    {
        //        value -= info.mean;
        //        value *= value;
        //        info.sum += value;
        //    }
        //}

        //protected virtual void AddValueToMeasures(float value, int row, int column, int rowWithinWindow, int columnWithinWindow, List<float> measures)
        //{
        //    measures.Add(value);
        //}

        //protected int Compare(float x, float y)
        //{
        //    return x.CompareTo(y);
        //}

        protected virtual void CalculateSignalMean(float value, int row, int column, int rowWithinWindow, int columnWithinWindow, SignalMeanInfo signalMeanInfo)
        {
            signalMeanInfo.sum += value;
            signalMeanInfo.count++;
        }