public override AlgorithmResult ProcessData() { byte[,] pixels = Input.Image.GetPixels(); CalculateLocalValues(pixels); var memberships = new double[pixels.GetLength(0), pixels.GetLength(1)]; Parallel.For(0, pixels.GetLength(0), i => Parallel.For(0, pixels.GetLength(1), j => { Tuple <byte, byte> minMax = localValues[i, j]; memberships[i, j] = MembershipFunction( pixels[i, j], minMax.Item1, minMax.Item2); } )); double[,] modifiedMembership = memberships.ApplyTransform(MembershipModification); byte[,] newValues = modifiedMembership.ApplyTransform(Defuzzyfication).NarrowToBytes(); Input.Measure = FuzzyMeasures.Fuzz(memberships); return(new AlgorithmResult(newValues) { Measure = FuzzyMeasures.Fuzz(modifiedMembership) }); }
public override AlgorithmResult ProcessData() { byte[,] pixels = Input.Image.GetPixels(); double[,] membershipValues = Fuzzify(pixels); Input.Measure = FuzzyMeasures.Fuzz(membershipValues); double[,] modifiedMembershipValues = membershipValues; if (desiredFuzziness != -1D) { iterations = 200; } for (int i = 0; i < iterations; i++) { modifiedMembershipValues = modifiedMembershipValues.ApplyTransform(IntOperator); if (desiredFuzziness != -1D) { double measure = FuzzyMeasures.Fuzz(modifiedMembershipValues); if (measure <= desiredFuzziness) { break; } } } byte[,] defuzzifiedPixels = Defuzzfy(modifiedMembershipValues); return(new AlgorithmResult(defuzzifiedPixels) { Measure = FuzzyMeasures.Fuzz(modifiedMembershipValues) }); }
public override AlgorithmResult ProcessData() { var stats = new ImageStatistics(Input.Image); int minGray = stats.Gray.Min; int maxGray = stats.Gray.Max; byte[,] pixels = Input.Image.GetPixels(); double[,] memberships = pixels.ApplyTransform(x => MembershipFunction(x, minGray, maxGray)); double[,] modifiedMembership = memberships.ApplyTransform(MembershipModification); byte[,] newValues = modifiedMembership.ApplyTransform(Defuzzyfication).NarrowToBytes(); Input.Measure = FuzzyMeasures.Fuzz(memberships); return(new AlgorithmResult(newValues) { Measure = FuzzyMeasures.Fuzz(modifiedMembership) }); }
private byte[,] Defuzzfy(double[,] membershipValues) { double[,] defuzzifiedDoubles = membershipValues.ApplyTransform(InversedMembershipFunction); byte[,] defuzzifiedBytes = defuzzifiedDoubles.NarrowToBytes(); return(defuzzifiedBytes); }