Ejemplo n.º 1
0
        private void ProcessWithCirclesFinder()
        {
            string bmpFile = ImgProcess.FormatBmp(TB_Filepath.Text);

            CirclesFinder f = new CirclesFinder((Bitmap)Bitmap.FromFile(bmpFile));

            TB_OutputPath.Text = Utils.String.FilePostfix(TB_Filepath.Text, "-result").Replace(".jpg", ".bmp");

            int width  = PB_Result.Width;
            int height = PB_Result.Height;

            Bitmap b = f.Draw(TB_OutputPath.Text);

            b = new Bitmap(b, width, height);
            PB_Result.Image = b;

            ImgProcess.Count(f.Rounds);
            string txtFile = TB_OutputPath.Text.Replace(".bmp", ".txt");

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(txtFile, true))
            {
                file.Write(string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                         "ID", "X", "Y",
                                         "LengthOnX", "DeviationOnX",
                                         "LengthOnY", "DeviationOnY",
                                         "Weight", "DeviationOnWeight") + Environment.NewLine);

                foreach (var round in f.Rounds)
                {
                    file.Write(string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                             round.Id.ToString("D3"), round.CenterX, round.CenterY,
                                             round.MaxLenLine.Length, round.LenXDiff.ToString("F4"),
                                             round.EndY - round.StartY, round.LenYDiff.ToString("F4"),
                                             round.Weight.ToString(), round.WeightDiff.ToString("F4")));
                    file.Write(Environment.NewLine);
                }

                double radiusStdEv = Utils.Math.StdEv(f.Rounds.Select(x => (double)x.MaxLenLine.Length).ToList());
                file.Write(string.Format("StdEv of Radius: {0}", radiusStdEv));
                file.Write(Environment.NewLine);

                double weightStdEv = Utils.Math.StdEv(f.Rounds.Select(x => (double)x.Weight).ToList());
                file.Write(string.Format("StdEv of Weight: {0}", weightStdEv));
                file.Write(Environment.NewLine);
            }
        }
Ejemplo n.º 2
0
        public void CirclesFinderTest_SmoothIssue()
        {
            byte[][] array = new byte[][]
            {
                new byte[] { 1, 0, 1 },
                new byte[] { 1, 1, 1 },
            };

            CirclesFinder f = new CirclesFinder(array);

            Assert.IsTrue(f.Rounds.Count == 2);
            Assert.IsTrue(f.Rounds[0].Lines.Count == 2);
            Assert.IsTrue(f.Rounds[0].Bottom.Equals(new Line(0, 2)));
            Assert.IsTrue(f.Rounds[0].StartY == 0);
            Assert.IsTrue(f.Rounds[0].EndY == 1);
            Assert.IsTrue(f.Rounds[0].MaxLenY == 1);
            Assert.IsTrue(f.Rounds[0].MaxLenLine.Equals(new Line(0, 2)));

            Assert.IsTrue(f.Rounds[1].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[1].Bottom.Equals(new Line(2)));
            Assert.IsTrue(f.Rounds[1].StartY == 0);
            Assert.IsTrue(f.Rounds[1].EndY == 0);
            Assert.IsTrue(f.Rounds[1].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[1].MaxLenLine.Equals(new Line(2)));

            array = new byte[][]
            {
                new byte[] { 1, 1, 1 },
                new byte[] { 1, 0, 1 },
            };

            f = new CirclesFinder(array);

            Assert.IsTrue(f.Rounds.Count == 1);
            Assert.IsTrue(f.Rounds[0].Lines.Count == 2);
            Assert.IsTrue(f.Rounds[0].Bottom.Equals(new Line(0, 2)));
            Assert.IsTrue(f.Rounds[0].StartY == 0);
            Assert.IsTrue(f.Rounds[0].EndY == 1);
            Assert.IsTrue(f.Rounds[0].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenLine.Equals(new Line(0, 2)));
        }
Ejemplo n.º 3
0
        /* to be obsoleted */
        private void ProcessWithCircleFinder()
        {
            //var rawData = mCamera.Execute(new Command("Read", new Dictionary<string, string> { { "Type", "Raw" } })).Param as Bitmap;

            string resultBmp = Utils.String.FilePostfix(_filePath, "-result");
            string resultTxt = resultBmp.Replace(".bmp", ".txt");

            Bitmap        bmpFile = ImgProcess.Binarize(_filePath);
            CirclesFinder f       = new CirclesFinder(bmpFile);

            LatestImage = f.Draw(resultBmp);

            ImgProcess.Count(f.Rounds);
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(resultTxt, true))
            {
                file.Write(string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                         "ID", "X", "Y",
                                         "LengthOnX", "DeviationOnX",
                                         "LengthOnY", "DeviationOnY",
                                         "Weight", "DeviationOnWeight") + Environment.NewLine);

                foreach (var round in f.Rounds)
                {
                    file.Write(string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                             round.Id.ToString("D3"), round.CenterX, round.CenterY,
                                             round.MaxLenLine.Length, round.LenXDiff.ToString("F4"),
                                             round.EndY - round.StartY, round.LenYDiff.ToString("F4"),
                                             round.Weight.ToString(), round.WeightDiff.ToString("F4")));
                    file.Write(Environment.NewLine);
                }

                double radiusStdEv = Utils.Math.StdEv(f.Rounds.Select(x => (double)x.MaxLenLine.Length).ToList());
                file.Write(string.Format("StdEv of Radius: {0}", radiusStdEv));
                file.Write(Environment.NewLine);

                double weightStdEv = Utils.Math.StdEv(f.Rounds.Select(x => (double)x.Weight).ToList());
                file.Write(string.Format("StdEv of Weight: {0}", weightStdEv));
                file.Write(Environment.NewLine);
            }
        }
Ejemplo n.º 4
0
        public void ProcessorTest_CirclesFinder()
        {
            CirclesFinder c = new CirclesFinder((Bitmap)Bitmap.FromFile(path + "Sample2-24b-bin.bmp"));

            c.Draw(path + "Sample2-result.bmp");
        }
Ejemplo n.º 5
0
        public void CirclesFinderTest_Basic()
        {
            byte[][] array = new byte[][]
            {
                new byte[] { 0, 1, 0 },
                new byte[] { 1, 0, 1 },
            };

            CirclesFinder f = new CirclesFinder(array);

            Assert.IsTrue(f.Rounds.Count == 3);
            Assert.IsTrue(f.Rounds[0].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[0].Bottom.Equals(new Line(1)));
            Assert.IsTrue(f.Rounds[0].StartY == 0);
            Assert.IsTrue(f.Rounds[0].EndY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenLine.Equals(new Line(1)));

            Assert.IsTrue(f.Rounds[1].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[1].Bottom.Equals(new Line(0)));
            Assert.IsTrue(f.Rounds[1].StartY == 1);
            Assert.IsTrue(f.Rounds[1].EndY == 1);
            Assert.IsTrue(f.Rounds[1].MaxLenY == 1);
            Assert.IsTrue(f.Rounds[1].MaxLenLine.Equals(new Line(0)));

            Assert.IsTrue(f.Rounds[2].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[2].Bottom.Equals(new Line(2)));
            Assert.IsTrue(f.Rounds[2].StartY == 1);
            Assert.IsTrue(f.Rounds[2].EndY == 1);
            Assert.IsTrue(f.Rounds[2].MaxLenY == 1);
            Assert.IsTrue(f.Rounds[2].MaxLenLine.Equals(new Line(2)));

            array = new byte[][]
            {
                new byte[] { 1, 1, 0 },
                new byte[] { 1, 0, 1 },
            };

            f = new CirclesFinder(array);

            Assert.IsTrue(f.Rounds.Count == 2);
            Assert.IsTrue(f.Rounds[0].Lines.Count == 2);
            Assert.IsTrue(f.Rounds[0].Bottom.Equals(new Line(0)));
            Assert.IsTrue(f.Rounds[0].StartY == 0);
            Assert.IsTrue(f.Rounds[0].EndY == 1);
            Assert.IsTrue(f.Rounds[0].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenLine.Equals(new Line(0, 1)));

            Assert.IsTrue(f.Rounds[1].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[1].Bottom.Equals(new Line(2)));
            Assert.IsTrue(f.Rounds[1].StartY == 1);
            Assert.IsTrue(f.Rounds[1].EndY == 1);
            Assert.IsTrue(f.Rounds[1].MaxLenY == 1);
            Assert.IsTrue(f.Rounds[1].MaxLenLine.Equals(new Line(2)));

            array = new byte[][]
            {
                new byte[] { 1, 1, 0, 1, 1, 1, 0, 0 },
                new byte[] { 0, 0, 0, 1, 1, 1, 0, 0 },
                new byte[] { 1, 1, 0, 1, 1, 1, 0, 0 },
                new byte[] { 1, 1, 0, 0, 0, 0, 0, 0 },
                new byte[] { 0, 0, 0, 1, 1, 1, 0, 0 },
                new byte[] { 1, 1, 0, 0, 1, 0, 0, 1 },
            };

            f = new CirclesFinder(array);

            Assert.IsTrue(f.Rounds.Count == 6);
            Assert.IsTrue(f.Rounds[0].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[0].Bottom.Equals(new Line(0, 1)));
            Assert.IsTrue(f.Rounds[0].StartY == 0);
            Assert.IsTrue(f.Rounds[0].EndY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[0].MaxLenLine.Equals(new Line(0, 1)));

            Assert.IsTrue(f.Rounds[1].Lines.Count == 3);
            Assert.IsTrue(f.Rounds[1].Bottom.Equals(new Line(3, 5)));
            Assert.IsTrue(f.Rounds[1].StartY == 0);
            Assert.IsTrue(f.Rounds[1].EndY == 2);
            Assert.IsTrue(f.Rounds[1].MaxLenY == 0);
            Assert.IsTrue(f.Rounds[1].MaxLenLine.Equals(new Line(3, 5)));

            Assert.IsTrue(f.Rounds[2].Lines.Count == 2);
            Assert.IsTrue(f.Rounds[2].Bottom.Equals(new Line(0, 1)));
            Assert.IsTrue(f.Rounds[2].StartY == 2);
            Assert.IsTrue(f.Rounds[2].EndY == 3);
            Assert.IsTrue(f.Rounds[2].MaxLenY == 2);
            Assert.IsTrue(f.Rounds[2].MaxLenLine.Equals(new Line(0, 1)));

            Assert.IsTrue(f.Rounds[3].Lines.Count == 2);
            Assert.IsTrue(f.Rounds[3].Bottom.Equals(new Line(4)));
            Assert.IsTrue(f.Rounds[3].StartY == 4);
            Assert.IsTrue(f.Rounds[3].EndY == 5);
            Assert.IsTrue(f.Rounds[3].MaxLenY == 4);
            Assert.IsTrue(f.Rounds[3].MaxLenLine.Equals(new Line(3, 5)));

            Assert.IsTrue(f.Rounds[4].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[4].Bottom.Equals(new Line(0, 1)));
            Assert.IsTrue(f.Rounds[4].StartY == 5);
            Assert.IsTrue(f.Rounds[4].EndY == 5);
            Assert.IsTrue(f.Rounds[4].MaxLenY == 5);
            Assert.IsTrue(f.Rounds[4].MaxLenLine.Equals(new Line(0, 1)));

            Assert.IsTrue(f.Rounds[5].Lines.Count == 1);
            Assert.IsTrue(f.Rounds[5].Bottom.Equals(new Line(7)));
            Assert.IsTrue(f.Rounds[5].StartY == 5);
            Assert.IsTrue(f.Rounds[5].EndY == 5);
            Assert.IsTrue(f.Rounds[5].MaxLenY == 5);
            Assert.IsTrue(f.Rounds[5].MaxLenLine.Equals(new Line(7)));
        }