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)); }
//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++; }