Beispiel #1
0
        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)
            });
        }
Beispiel #2
0
        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()
        {
            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)
            });
        }