예제 #1
0
        private void GenerateData()
        {
            string path = Directory.GetCurrentDirectory() + "\\";
            SegmentationData.MAX_SEGMENT_SIZE = 6;
            training = SegmentationData.GetTrainingData(path + "originals", path + "segments", path + "buildings", out originalImage, iteration++);
            trainingData = training.Vectors;
            idealData = training.Ideal;
            this.pictureBox1.Image = originalImage = training.OriginalImage;

            /*ImageForm imageForm = new ImageForm(training.OriginalImage);
            imageForm.Show();*/
            /*List<Bitmap> bitmaps = new List<Bitmap>();
            for (int i = 0; i < training.Vectors.Length; i++)
                if (idealData[i][0] == 1)
                    bitmaps.Add(SegmentationData.GetBitmapFromDoubleArray(training.Vectors[i]));
            SegmentsViewer segmentsViewer = new SegmentsViewer(bitmaps);
            segmentsViewer.ShowDialog();*/

            /*for (int i = 0; i < training.Segments.Length; i++)
            {
                for (int x = 0; x < training.Segments[i].Width; x++)
                {
                    for (int y = 0; y < training.Segments[i].Height; y++)
                    {
                        if (training.Segments[i].GetPixel(x,y).ToArgb() != Color.White.ToArgb())
                            originalImage.SetPixel(x + training.Positions[i].X, y + training.Positions[i].Y, training.Segments[i].GetPixel(x,y));
                    }
                }
            }
            ImageForm imageForm = new ImageForm(originalImage);
            imageForm.ShowDialog();*/

            for (int i = 0; i < training.Vectors.Length; i++)
            {
                for (int j = 0; j < training.Vectors[i].Length - 4; j++)
                {
                    if (training.Vectors[i][j] > 0)
                        training.Vectors[i][j] /= 255;
                }
            }
        }
        public static TrainingData GetTrainingData(string pathToOriginals, string pathToSegments, string pathToBuildings, out Bitmap originalImageRes, int iteration)
        {
            TrainingData trainingData = new TrainingData();
            originalImageRes = null;

            string[] originals = Directory.GetFiles(pathToOriginals);
            string[] segments = Directory.GetFiles(pathToSegments);
            string[] buildings = Directory.GetFiles(pathToBuildings);

            Array.Sort(originals, StringComparer.InvariantCulture);
            Array.Sort(segments, StringComparer.InvariantCulture);
            Array.Sort(buildings, StringComparer.InvariantCulture);

            List<double[]> segmentsList = new List<double[]>();
            List<double[]> idealList = new List<double[]>();

            if (originals.Length != segments.Length || originals.Length != buildings.Length)
                throw new NotImplementedException();

            for (int i = 0; i < originals.Length; i++)
            {
                if (i != iteration - 1)
                    continue;
                Dictionary<int, SegmentData> nrOfElementsInSegment = new Dictionary<int, SegmentData>();
                int[,] matrix = null;
                int average = int.MaxValue;

                Bitmap originalImage = originalImageRes = new Bitmap(originals[i]);
                Bitmap buildingsImage = new Bitmap(buildings[i]);
                Bitmap segmentsImage = LoadImage(segments[i], out matrix, out nrOfElementsInSegment, out average);

                /*Bitmap idealResult = new Bitmap(originalImage.Width, originalImage.Height);
                for (int x = 0; x < idealResult.Width; x++)
                    for (int y = 0; y < idealResult.Height; y++)
                        if (buildingsImage.GetPixel(x, y).ToArgb() != Color.White.ToArgb())
                            idealResult.SetPixel(x, y, originalImage.GetPixel(x, y));
                        else
                            idealResult.SetPixel(x, y, Color.White);
                ImageForm idealForm = new ImageForm(idealResult);
                idealForm.Text = "IDEAL RESULT";
                idealForm.ShowDialog();

                ImageForm segForm = new ImageForm(segmentsImage);
                segForm.ShowDialog();*/

                List<Point> points;
                List<Bitmap> segmentsImages;
                Tuple<List<double[]>, List<double[]>> result = LoadSegments(originalImage, buildingsImage, matrix, nrOfElementsInSegment, average, out points, out segmentsImages);
                trainingData.Positions = points.ToArray();
                trainingData.Segments = segmentsImages.ToArray();
                trainingData.OriginalImage = originalImage;
                trainingData.SegmentsImage = buildingsImage;
                segmentsList.AddRange(result.Item1);
                idealList.AddRange(result.Item2);
            }

            trainingData.Vectors = segmentsList.ToArray();
            trainingData.Ideal = idealList.ToArray();
            //int nrofbuildings = trainingData.Ideal.Where(x => x[0] == 1).Count();
            //Console.WriteLine(nrofbuildings);
            return trainingData;
        }