public LasPoint.ClassificationType[] Classify(LasFile file)
        {
            Stopwatch           sw     = Stopwatch.StartNew();
            LasPointDataRecords points = file.LasPointDataRecords;

            LasPoint.ClassificationType[] output = new LasPoint.ClassificationType[points.Count];
            Statistics stats = new Statistics();

            stats.Count = points.Count;
            for (int i = 0; i < points.Count; i++)
            {
                LasPoint3Short point   = (LasPoint3Short)points[i];
                double         green   = point.Green - (point.Red + point.Blue) / 2;
                IMLData        classed = Network.Compute(
                    new BasicMLData(new double[] { file.LasHeader.ScaleZ(point.Z), point.Intensity, green }));
                output[i] = Utills.QuickClassess[classed.IndexOfMax()];
                if (output[i] != points[i].Classification)
                {
                    stats.ClassErrors[(int)points[i].Classification]++;
                }
                stats.PredictionMatrix[(int)points[i].Classification, (int)output[i]]++;
                stats.ClassCount[(int)output[i]]++;
                stats.ClassRealCount[(int)points[i].Classification]++;
                if (i % 1000 == 0)
                {
                    Console.WriteLine(i);
                }
            }
            Console.Write(stats.ToString());
            sw.Stop();
            Console.WriteLine("Czas trwania [" + sw.Elapsed.TotalSeconds.ToString() + "s]");
            stats.SaveMatrixAsCSV();
            return(output);
        }
Exemple #2
0
        public LasPoint.ClassificationType[] Classify(LasFile file, int count = 0)
        {
            var sw = Stopwatch.StartNew();
            LasPointDataRecords points = file.LasPointDataRecords;

            if (count == 0 || count > points.Count)
            {
                count = points.Count;
            }
            LasPoint.ClassificationType[] output = new LasPoint.ClassificationType[count];
            Statistics stats = new Statistics();

            stats.Count = count;
            OpenTK.Vector3[] abc = new OpenTK.Vector3[count];
            Parallel.For(0, count, (i) =>
            {
                abc[i] = LinearRegression.ComputeRegressionPoint(file, points[i], regressionCount, regressionRange);
                if (i % 1000 == 0)
                {
                    Console.WriteLine(i);
                }
            });
            for (int i = 0; i < count; i++)
            {
                //double[] regression = LinearRegression.ComputeRegressionNumerics(file, points[i], regressionCount, regressionRange);
                LasPoint3Short point = (LasPoint3Short)points[i];
                //OpenTK.Vector3 abc = LinearRegression.ComputeRegressionPoint(file, points[i], regressionCount, regressionRange);
                double  distanceFromPlane = Utills.DistanceFromPlane(point, abc[i]);
                double  green             = point.Green - (point.Red + point.Blue) / 2;
                IMLData classed           = Network.Compute(new BasicMLData(new double[] { green, file.LasHeader.ScaleZ(point.Z), point.Intensity,
                                                                                           abc[i].X, abc[i].Y, abc[i].Z, distanceFromPlane }));
                output[i] = Utills.QuickClassess[classed.IndexOfMax()];
                if (output[i] != points[i].Classification)
                {
                    stats.ClassErrors[(int)points[i].Classification]++;
                }
                stats.ClassCount[(int)output[i]]++;
                stats.ClassRealCount[(int)points[i].Classification]++;
                stats.PredictionMatrix[(int)points[i].Classification, (int)output[i]]++;
                if (i % 1000 == 0)
                {
                    Console.WriteLine(i);
                }
            }
            Console.Write(stats.ToString());
            sw.Stop();
            Console.WriteLine("Czas trwania [" + sw.Elapsed.TotalSeconds.ToString() + "s]");
            stats.SaveMatrixAsCSV();
            return(output);
        }
Exemple #3
0
        public ClassificationType[,] Classify(LasFile file)
        {
            var sw = Stopwatch.StartNew();

            ClassificationType[,] output = new ClassificationType[_divisionCountX, _divisionCountY];
            SubgroupOfPoints[,] values   = Utills.GroupPoints(file, _divisionCountX, _divisionCountY);
            Statistics stats = new Statistics();

            stats.Count = _divisionCountX * _divisionCountY;
            for (int i = 0; i < _divisionCountX; i++)
            {
                for (int j = 0; j < _divisionCountY; j++)
                {
                    double         avgHeight    = values[i, j].avgHeight;
                    double         avgIntensity = values[i, j].avgIntensity;
                    double         avgDistance  = values[i, j].avgDistance;
                    OpenTK.Vector3 slopeVector  = values[i, j].slopeVector;
                    IMLData        classed      = Network.Compute(new BasicMLData(
                                                                      new double[] { avgDistance, avgHeight, avgIntensity, slopeVector[0], slopeVector[1], slopeVector[2] }));
                    output[i, j] = Utills.QuickClassess[classed.IndexOfMax()];
                    ClassificationType ct;
                    if (!Utills.QuickClassess.TryGetValue(values[i, j].classIndex, out ct))
                    {
                        continue;
                    }
                    if (output[i, j] != ct)
                    {
                        stats.ClassErrors[(int)ct]++;
                    }
                    stats.PredictionMatrix[(int)output[i, j], (int)ct]++;
                    stats.PredictionMatrix[(int)ct, (int)output[i, j]]++;
                    stats.ClassCount[(int)output[i, j]]++;
                    stats.ClassRealCount[(int)ct]++;
                }
                Console.WriteLine(i);
            }
            Console.Write(stats.ToString());
            sw.Stop();
            Console.WriteLine("Czas trwania [" + sw.Elapsed.TotalSeconds.ToString() + "s]");
            stats.SaveMatrixAsCSV();
            return(output);
        }