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