コード例 #1
0
        /// <summary>
        /// Obsoleto, per fortuna
        /// </summary>
        /// <param name="args"></param>
        public static void FitPeak(string[] args)
        {
            var fileName      = args.Length < 2 ? "data/calibrating" : args[1];
            var peaksFileName = args.Length < 3 ? "data/calibrating_peaks" : args[2];
            var index         = args.Length < 4 ? 0 : Int32.Parse(args[3]);
            var window        = args.Length < 5 ? 10 : Int32.Parse(args[4]);

            string[] lines = File.ReadAllLines(String.Format("{0}.txt", fileName));
            var      data  = lines.Aggregate(new List <int>(), (p, c) =>
            {
                var value = Int32.Parse(c.Split(' ')[1]);
                p.Add(value);
                return(p);
            }).ToArray();

            string[] peakLines = File.ReadAllLines(String.Format("{0}.txt", peaksFileName));
            var      peakData  = peakLines.Aggregate(new List <int>(), (p, c) =>
            {
                var value = Int32.Parse(c.Split(' ')[0]);
                p.Add(value);
                return(p);
            }).ToArray();

            GaussianFit.FitGaussian(data, peakData, index, window, fileName);
        }
コード例 #2
0
    public double GaussianFit()
    {
        double[]    GuessParameterArray = new double[4];
        GaussianFit fit    = new GaussianFit();
        int         m      = 0;
        int         xrange = 20;

        double[] arrayX = new double[xrange + 1];
        double[] arrayB = new double[xrange + 1];

        double brightness = 0;
        int    xstart     = BrightestXpos - xrange / 2;
        int    xend       = BrightestXpos + xrange / 2;

        //Feeding in array X and array Y data points (Y: brightness)
        for (int i = xstart; i <= xend; i++)
        {
            Color pixel = pic.GetPixel(i, BrightestYpos);
            brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
            arrayX[m]  = i;
            arrayB[m]  = brightness;//arrayB = raw data
            m++;
        }

        double[] arrayparameters = new double[4];
        GuessParameterArray = fit.SuggestParameters(arrayX, arrayB);
        return(GuessParameterArray[3] * 2);
    }
コード例 #3
0
        private void DrawDistribution(Dictionary <int, int> dic, Brush brush)
        {
            GaussianFit fit = new GaussianFit();

            foreach (int key in dic.Keys)
            {
                if (dic[key] != 0)
                {
                    fit.AddPoint(key, dic[key]);
                }
            }
            fit.Solve();

            int maxY = dic.Values.Max();
            int minX = dic.Keys.Min();
            int maxX = dic.Keys.Max();
            int x0   = 10;
            int y0   = 10;

            float scaleX = (pictureBox.Width - 2 * x0) * 1.0f / (maxX - minX);
            float scaleY = (pictureBox.Height - 2 * y0) * 1.0f / maxY;

            if (maxY != 0 && maxX != minX)
            {
                using (Graphics g = Graphics.FromImage(pictureBox.Image))
                {
                    g.Clear(m_BackgroundColor);

                    float halfBarWidth = (pictureBox.Width - 2 * x0) / (2.0f * dic.Keys.Count);

                    foreach (int x in dic.Keys)
                    {
                        int   y  = dic[x];
                        float xx = x0 + (x - minX) * scaleX;
                        float yy = pictureBox.Height - y0 - y * scaleY;

                        g.FillRectangle(brush, xx - halfBarWidth, yy + 1, 2 * halfBarWidth, pictureBox.Height - y0 - yy);
                    }

                    g.Save();
                }
            }

            pictureBox.Refresh();
        }
コード例 #4
0
        private double plotGaussianX()
        {
            double[]    GuessParameterArray = new double[4];
            GaussianFit fit = new GaussianFit();
            int         m   = 0;
            int         xrange;

            SetDefault(out xrange);
            double[] arrayX = new double[xrange + 1];
            double[] arrayB = new double[xrange + 1];


            double brightness = 0;
            int    xstart     = HelperClass.brightest_x - xrange / 2;
            int    xend       = HelperClass.brightest_x + xrange / 2;
            Bitmap mybitmap   = new Bitmap(ImagePanel.Image);

            //Feeding in array X and array Y data points (Y: brightness)
            for (int i = xstart; i <= xend; i++)
            {
                Color pixel = mybitmap.GetPixel(i, HelperClass.brightest_y);
                brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
                arrayX[m]  = i;
                arrayB[m]  = brightness;
                m++;
            }

            double[] arrayparameters = new double[4];
            GuessParameterArray = fit.SuggestParameters(arrayX, arrayB);
            arrayparameters[0]  = GuessParameterArray[0];
            arrayparameters[1]  = GuessParameterArray[1];
            arrayparameters[2]  = GuessParameterArray[2];
            arrayparameters[3]  = GuessParameterArray[3];

            fit.Fit(arrayX, arrayB, arrayparameters);
            double[] fittedY = fit.FittedValues;
            //Y HERE REFERS TO BRIGHTNESS
            for (int j = 0; j < m; j++)
            {
                PlotXYAppend(this.chart1, this.chart1.Series[0], arrayX[j], fittedY[j]);
                PlotXYAppend(this.chart1, this.chart1.Series[1], arrayX[j], arrayB[j]);
            }
            return(fit.FittedParameters[3]);
        }
コード例 #5
0
        private double plotGaussianY()
        {
            double[]    GuessParameterArray = new double[4];
            GaussianFit fit = new GaussianFit();
            int         m   = 0;
            int         yrange;

            SetDefault(out yrange);
            double[] arrayY = new double[yrange + 1];
            double[] arrayB = new double[yrange + 1];


            double brightness = 0;
            int    ystart     = HelperClass.brightest_y - yrange / 2;
            int    yend       = HelperClass.brightest_y + yrange / 2;
            Bitmap mybitmap   = new Bitmap(ImagePanel.Image);

            //Feeding in array X and array Y data points (Y: brightness)
            for (int i = ystart; i <= yend; i++)
            {
                Color pixel = mybitmap.GetPixel(HelperClass.brightest_x, i);
                brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
                arrayY[m]  = i;
                arrayB[m]  = brightness;
                m++;
            }

            double[] arrayparameters = new double[4];
            GuessParameterArray = fit.SuggestParameters(arrayY, arrayB);
            arrayparameters[0]  = GuessParameterArray[0];
            arrayparameters[1]  = GuessParameterArray[1];
            arrayparameters[2]  = GuessParameterArray[2];
            arrayparameters[3]  = GuessParameterArray[3];

            fit.Fit(arrayY, arrayB, arrayparameters);
            double[] fittedB = fit.FittedValues;

            for (int j = 0; j < m; j++)
            {
                PlotXYAppend(this.chart2, this.chart2.Series[0], arrayY[j], fittedB[j]);
                PlotXYAppend(this.chart2, this.chart2.Series[1], arrayY[j], arrayB[j]);
            }
            return(fit.FittedParameters[3]);
        }
コード例 #6
0
ファイル: Form1.cs プロジェクト: JamesNgai/WebcamProfiler
    public double GaussianFit()
    {
        double[] GuessParameterArray = new double[4];
        GaussianFit fit = new GaussianFit();
        int m = 0;
        int xrange = 20;
        double[] arrayX = new double[xrange + 1];
        double[] arrayB = new double[xrange + 1];

        double brightness = 0;
        int xstart = BrightestXpos - xrange / 2;
        int xend = BrightestXpos + xrange / 2;
        //Feeding in array X and array Y data points (Y: brightness)
        for (int i = xstart; i <= xend; i++)
        {
            Color pixel = pic.GetPixel(i, BrightestYpos);
            brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
            arrayX[m] = i;
            arrayB[m] = brightness;//arrayB = raw data
            m++;
        }

        double[] arrayparameters = new double[4];
        GuessParameterArray = fit.SuggestParameters(arrayX, arrayB);
        return GuessParameterArray[3] * 2;
    }
コード例 #7
0
ファイル: Form1.cs プロジェクト: JamesNgai/WebcamProfiler
        private double plotGaussianY()
        {
            double[] GuessParameterArray = new double[4];
            GaussianFit fit = new GaussianFit();
            int m = 0;
            int yrange;
            SetDefault(out yrange);
            double[] arrayY = new double[yrange + 1];
            double[] arrayB = new double[yrange + 1];

            double brightness = 0;
            int ystart = HelperClass.brightest_y - yrange / 2;
            int yend = HelperClass.brightest_y + yrange / 2;
            Bitmap mybitmap = new Bitmap(ImagePanel.Image);
            //Feeding in array X and array Y data points (Y: brightness)
            for (int i = ystart; i <= yend; i++)
            {
                Color pixel = mybitmap.GetPixel(HelperClass.brightest_x, i);
                brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
                arrayY[m] = i;
                arrayB[m] = brightness;
                m++;
            }

            double[] arrayparameters = new double[4];
            GuessParameterArray = fit.SuggestParameters(arrayY, arrayB);
            arrayparameters[0] = GuessParameterArray[0];
            arrayparameters[1] = GuessParameterArray[1];
            arrayparameters[2] = GuessParameterArray[2];
            arrayparameters[3] = GuessParameterArray[3];

            fit.Fit(arrayY, arrayB, arrayparameters);
            double[] fittedB = fit.FittedValues;

            for (int j = 0; j < m; j++)
            {
                PlotXYAppend(this.chart2, this.chart2.Series[0], arrayY[j], fittedB[j]);
                PlotXYAppend(this.chart2, this.chart2.Series[1], arrayY[j], arrayB[j]);
            }
            return fit.FittedParameters[3];
        }
コード例 #8
0
ファイル: Form1.cs プロジェクト: JamesNgai/WebcamProfiler
        private double plotGaussianX()
        {
            double[] GuessParameterArray = new double[4];
            GaussianFit fit = new GaussianFit();
            int m = 0;
            int xrange;
            SetDefault(out xrange);
            double[] arrayX = new double[xrange + 1];
            double[] arrayB = new double[xrange + 1];

            double brightness = 0;
            int xstart = HelperClass.brightest_x - xrange / 2;
            int xend = HelperClass.brightest_x + xrange / 2;
            Bitmap mybitmap = new Bitmap(ImagePanel.Image);
            //Feeding in array X and array Y data points (Y: brightness)
            for (int i = xstart; i <= xend; i++)
            {
                Color pixel = mybitmap.GetPixel(i, HelperClass.brightest_y);
                brightness = (double)pixel.B * 0.33 + pixel.G * 0.33 + pixel.R * (1 - 0.33 * 2);
                arrayX[m] = i;
                arrayB[m] = brightness;
                m++;
            }

            double[] arrayparameters = new double[4];
            GuessParameterArray = fit.SuggestParameters(arrayX, arrayB);
            arrayparameters[0] = GuessParameterArray[0];
            arrayparameters[1] = GuessParameterArray[1];
            arrayparameters[2] = GuessParameterArray[2];
            arrayparameters[3] = GuessParameterArray[3];

            fit.Fit(arrayX, arrayB, arrayparameters);
            double[] fittedY = fit.FittedValues;
            //Y HERE REFERS TO BRIGHTNESS
            for (int j = 0; j < m; j++)
            {
                PlotXYAppend(this.chart1, this.chart1.Series[0], arrayX[j], fittedY[j]);
                PlotXYAppend(this.chart1, this.chart1.Series[1], arrayX[j], arrayB[j]);

            }
            return fit.FittedParameters[3];
        }