// Turn int[,] containing pixel grey color values and cluster bounding boxes' contour into bitmap pixel colours

        private void Draw(int[,] marked)
        {
            Bitmap bmp = new Bitmap(marked.GetLength(0), marked.GetLength(1));

            for (int y = 0; y < marked.GetLength(1); y++)
            {
                for (int x = 0; x < marked.GetLength(0); x++)
                {
                    if (marked[x, y] == -1)
                    {
                        bmp.SetPixel(x, y, System.Drawing.Color.Green);
                    }
                    else
                    {
                        bmp.SetPixel(x, y, DifferenceComputation.getGrey(255 - marked[x, y]));
                    }
                }
            }

            bmp.Save(@"Resources\Result.bmp");
        }
        private void startTracking()
        {
            Bitmap[] images = new Bitmap[11];

            images[0]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C1.png"));
            images[1]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C2.png"));
            images[2]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\MergingTest.png"));
            images[3]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C4.png"));
            images[4]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C5.png"));
            images[5]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C6.png"));
            images[6]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C7.png"));
            images[7]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C8.png"));
            images[8]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C9.png"));
            images[9]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C10.png"));
            images[10] = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C11.png"));

            Tracking t = new Tracking();

            for (int i = 1; i < 11; i++)
            {
                // Repositioning finding and executing difference between the two images

                int[] positions = Matching_Robinson.RobinsonRepositioning(images[0], images[i]);

                Map resultDifference = DifferenceComputation.getManhattan(images[0], images[i], positions);

                List <Cluster> frameBlobs = FindObjects(resultDifference);

                Console.WriteLine("Tracking " + i + ": " + frameBlobs.Count + " blobs encountered");

                if (t.isEmpty())
                {
                    t.firstScan(frameBlobs, i);
                }
                else
                {
                    t.assignBlobs(frameBlobs, i);
                }

                Console.WriteLine();
            }

            List <List <Cluster> > results = t.getTracking();

            // Tracking results siso

            Console.WriteLine();
            Console.WriteLine(results.Count + " different blobs being tracked");

            List <double> numberOfColonies = new List <double>();

            ChartHandler ch = new ChartHandler();
            string       p, dir;

            string[] title;

            for (int i = 0; i < results.Count; i++)
            {
                double[] data = new double[results.ElementAt(i).Count];

                dir = (System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "CharTest", "ClusterN" + i));
                Directory.CreateDirectory(dir);

                p = "ClusterTrack_" + i.ToString() + ".txt";

                FileStream f = File.Create(System.IO.Path.Combine(dir, p));

                f.Close();
                File.AppendAllText(System.IO.Path.Combine(dir, p), "Blob " + i + ": " + results.ElementAt(i).Count + " steps tracked" + Environment.NewLine);
                File.AppendAllText(System.IO.Path.Combine(dir, p), Environment.NewLine);

                for (int j = 0; j < results.ElementAt(i).Count; j++)
                {
                    data[j] = results.ElementAt(i).ElementAt(j).getSize();

                    File.AppendAllText(System.IO.Path.Combine(dir, p), "Track " + j + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    ID = " + results.ElementAt(i).ElementAt(j).getId() + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    Size = " + results.ElementAt(i).ElementAt(j).getSize() + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    Encounter step = " + results.ElementAt(i).ElementAt(j).getStep() + Environment.NewLine);

                    if (results.ElementAt(i).ElementAt(j).getFather() != -1)
                    {
                        File.AppendAllText(System.IO.Path.Combine(dir, p), "    Merged to branch : " + results.ElementAt(i).ElementAt(j).getFather() + Environment.NewLine);
                    }
                    if (results.ElementAt(i).ElementAt(j).getBranches().Count > 0)
                    {
                        for (int n = 0; n < results.ElementAt(i).ElementAt(j).getBranches().Count; n++)
                        {
                            File.AppendAllText(System.IO.Path.Combine(dir, p), "    Branch with ID: " + results.ElementAt(i).ElementAt(j).getBranches().ElementAt(n).Last().getId() + " added");

                            if (results.ElementAt(i).ElementAt(j).getBranches().ElementAt(n).Last().hasMergedWithDifferent())
                            {
                                File.AppendAllText(System.IO.Path.Combine(dir, p), " from a different colony." + Environment.NewLine);
                            }
                            else
                            {
                                File.AppendAllText(System.IO.Path.Combine(dir, p), " from the same colony." + Environment.NewLine);
                            }
                        }
                    }

                    File.AppendAllText(System.IO.Path.Combine(dir, p), Environment.NewLine);

                    if (numberOfColonies.Count <= results.ElementAt(i).ElementAt(j).getStep())
                    {
                        for (int n = numberOfColonies.Count; n < results.ElementAt(i).ElementAt(j).getStep() - 1; n++)
                        {
                            numberOfColonies.Add(0);
                        }

                        numberOfColonies.Add(1);
                    }
                    else
                    {
                        numberOfColonies[results.ElementAt(i).ElementAt(j).getStep() - 1]++;
                    }
                }

                title = new string[] { "Colony " + results.ElementAt(i).ElementAt(0).getId() + " Size evolution over time", " Size (pixels) ", " Capture " };
                p     = "SizeChart.png";
                ch.barCharConstruct(data, System.IO.Path.Combine(dir, p), title);
            }

            p     = "ColonyChart.png";
            dir   = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "CharTest");
            title = new string[] { "Population evolution", " Number of colonies", " Capture " };
            ch.barCharConstruct(numberOfColonies.ToArray(), System.IO.Path.Combine(dir, p), title);

            this.Hide();
        }
Example #3
0
        private void startTracking()
        {
            Bitmap[] images = new Bitmap[11];

            images[0]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C1.png"));
            images[1]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C2.png"));
            images[2]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\MergingTest.png"));
            images[3]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C4.png"));
            images[4]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C5.png"));
            images[5]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C6.png"));
            images[6]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C7.png"));
            images[7]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C8.png"));
            images[8]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C9.png"));
            images[9]  = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C10.png"));
            images[10] = new Bitmap(System.Drawing.Image.FromFile(@"Resources\Captures\C11.png"));

            Tracking t = new Tracking();

            for (int i = 1; i < 11; i++)
            {
                // Repositioning finding and executing difference between the two images

                int[] positions = Matching_Robinson.RobinsonRepositioning(images[0], images[i]);

                int[,] resultDifference = DifferenceComputation.getManhattan(images[0], images[i], positions);

                List <Cluster> frameBlobs = FindObjects(resultDifference);

                Console.WriteLine("Tracking " + i + ": " + frameBlobs.Count + " blobs encountered");

                if (t.isEmpty())
                {
                    t.firstScan(frameBlobs, i);
                }
                else
                {
                    t.assignBlobs(frameBlobs, i);
                }

                Console.WriteLine();
            }

            List <List <Cluster> > results = t.getTracking();

            // Tracking results siso

            Console.WriteLine();
            Console.WriteLine(results.Count + " different blobs being tracked");

            for (int i = 0; i < results.Count; i++)
            {
                double[] data = new double[results.ElementAt(i).Count];

                string dir = (System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "CharTest", "ClusterN" + i));
                Directory.CreateDirectory(dir);

                string p = "ClusterTrack_" + i.ToString() + ".txt";

                FileStream f = File.Create(System.IO.Path.Combine(dir, p));

                f.Close();
                File.AppendAllText(System.IO.Path.Combine(dir, p), "Blob " + i + ": " + results.ElementAt(i).Count + " steps tracked" + Environment.NewLine);
                File.AppendAllText(System.IO.Path.Combine(dir, p), Environment.NewLine);

                for (int j = 0; j < results.ElementAt(i).Count; j++)
                {
                    data[j] = results.ElementAt(i).ElementAt(j).getSize();

                    File.AppendAllText(System.IO.Path.Combine(dir, p), "Track " + j + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    ID = " + results.ElementAt(i).ElementAt(j).getId() + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    Size = " + results.ElementAt(i).ElementAt(j).getSize() + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), "    Encounter step = " + results.ElementAt(i).ElementAt(j).getStep() + Environment.NewLine);
                    File.AppendAllText(System.IO.Path.Combine(dir, p), Environment.NewLine);
                }

                ChartHandler ch = new ChartHandler();
                ch.barCharConstruct(data, i, dir);
            }

            this.Hide();
        }