public void LoadCalibrationParameters(string parametersPath, List <Tuple <int, int> > badPixels = null)
        {
            CalibrationParameters calibrationParameters = new CalibrationParameters();

            /*string parametersFile = Path.Combine(parametersPath, "Parameters.xml");
             * string parametersString = "";
             * if (File.Exists(parametersFile))
             * {
             *  parametersString = File.ReadAllText(parametersFile);
             * }
             * if (!string.IsNullOrEmpty(parametersString))
             * {
             *  calibrationParameters = XmlSerializationUtil.FromXml<CalibrationParameters>(parametersString);
             * }
             * else
             * {
             *  //System.Windows.MessageBox.Show(
             *  //    string.Format("Could not load calibration for device serial number {0}", _Camera.SerialNumber));
             * }*/

            calibrationParameters.badPixels = new List <Tuple <int, int> >();
            string badPixelsFile = Path.Combine(parametersPath, "BadPixels.csv");

            if (File.Exists(badPixelsFile))
            {
                var badPixelsStrings = File.ReadAllLines(badPixelsFile);

                foreach (var badPixelsString in badPixelsStrings)
                {
                    var values = badPixelsString.Split(new char[] { ';' });
                    if (values.GetLength(0) > 1)
                    {
                        int item1 = int.Parse(values[0], System.Globalization.CultureInfo.InvariantCulture);
                        int item2 = int.Parse(values[1], System.Globalization.CultureInfo.InvariantCulture);

                        calibrationParameters.badPixels.Add(new Tuple <int, int>(item1, item2));
                    }
                }
            }

            /*string exposuresFile = Path.Combine(parametersPath, "ExpusBadPixelsuresDark.csv");
             * if (File.Exists(exposuresFile))
             * {
             *  var exposuresStrings = File.ReadAllLines(exposuresFile);
             *
             *  foreach (var exposuresString in exposuresStrings)
             *  {
             *      var values = exposuresString.Split(new char[] { ';' });
             *      if (values.GetLength(0) > 2)
             *      {
             *          double exposure = double.Parse(values[0], System.Globalization.CultureInfo.InvariantCulture);
             *          double temperature = double.Parse(values[1], System.Globalization.CultureInfo.InvariantCulture);
             *          double imageAvg = double.Parse(values[2], System.Globalization.CultureInfo.InvariantCulture);
             *          DateTimeOffset datetime = DateTimeOffset.Parse(values[3], System.Globalization.CultureInfo.InvariantCulture);
             *
             *          calibrationParameters.AddTemp(exposure, temperature, imageAvg, datetime);
             *      }
             *  }
             * }*/

            {
                //string fileName = "008000-440-009"; // "004000-440-008";
                //calibrationParameters.badPixels = LoadCalibrationBadPixels(logDirectory, fileName, 16700);

                /*fileName = "000250-470-004";// "004000-440-008";
                 * var image = LoadDoubleArrToBinary(Path.Combine(
                 *  Path.GetDirectoryName(logDirectory), "CalibrationParameters",
                 *  "Bin", fileName + ".bin"));
                 * image = ImageMedianFilterPoints(image, calibrationParameters.badPixels);
                 * //image = ImageRollingBallFilter(400, image);
                 * Imaging.Png16SaveImageData(image,
                 *  Path.Combine(
                 *  Path.GetDirectoryName(logDirectory), "CalibrationParameters",
                 *  "Png"), fileName + "-f.png");*/
            }

            var binDirectory = Path.Combine(parametersPath, "Bin");

            if (Directory.Exists(binDirectory))
            {
                var imagesFileNames = Directory.EnumerateFiles(
                    binDirectory,
                    "*.bin", SearchOption.TopDirectoryOnly);

                foreach (var imagesFileName in imagesFileNames)
                {
                    var image = LoadDoubleArrToBinary(imagesFileName, badPixels);
                    //TODO should be uncommented
                    //image = Centice.Util.ImageUtils.ImageMedianFilterPoints(image, calibrationParameters.badPixels);
                    var    values      = Path.GetFileNameWithoutExtension(imagesFileName).Split(new char[] { '-' });
                    double exposure    = int.Parse(values[0]) / 1000d;
                    double temperature = int.Parse(values[1]) / 10d;
                    int    weight      = int.Parse(values[2]);
                    calibrationParameters.AddImage(exposure, temperature, image, weight);
                }
            }

            //return calibrationParameters;
        }
        public static void SaveCalibrationParameters(string parametersPath, CalibrationParameters calibrationParameters)
        {
            string parametersFile = Path.Combine(parametersPath, "Parameters.xml");
            //string parametersString = "";
            //parametersString = XmlSerializationUtil.ToXml(calibrationParameters);
            ///File.WriteAllText(parametersFile, parametersString);

            string badPixelsFile   = Path.Combine(parametersPath, "BadPixels.csv");
            string badPixelsString = "";

            foreach (var p in calibrationParameters.badPixels)
            {
                badPixelsString += string.Format(
                    System.Globalization.CultureInfo.InvariantCulture,
                    "{0};{1}",         // exposure, temperature, avg, date
                    p.Item1.ToString(System.Globalization.CultureInfo.InvariantCulture),
                    p.Item2.ToString(System.Globalization.CultureInfo.InvariantCulture)
                    ) + Environment.NewLine;
            }
            File.WriteAllText(badPixelsFile, badPixelsString);

            if (calibrationParameters.tempCalib != null)
            {
                string exposuresFile   = Path.Combine(parametersPath, "ExpusuresDark.csv");
                string exposuresString = "";
                foreach (var p in calibrationParameters.tempCalib)
                {
                    foreach (var q in p.Value)
                    {
                        foreach (var r in q.Value)
                        {
                            exposuresString += string.Format(
                                System.Globalization.CultureInfo.InvariantCulture,
                                "{0};{1};{2};{3}", // exposure, temperature, avg, date
                                p.Key.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                q.Key.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                r.Item1.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                r.Item2.ToString("o", System.Globalization.CultureInfo.InvariantCulture)
                                ) + Environment.NewLine;
                        }
                    }
                }
                File.WriteAllText(exposuresFile, exposuresString);
            }

            var pngDirectory = Path.Combine(parametersPath, "Png");
            var binDirectory = Path.Combine(parametersPath, "Bin");

            if (Directory.Exists(pngDirectory))
            {
                Directory.Delete(pngDirectory, true);
            }
            if (Directory.Exists(binDirectory))
            {
                Directory.Delete(binDirectory, true);
            }
            foreach (var dic in calibrationParameters.tempImages)
            {
                foreach (var img in dic.Value)
                {
                    var    exposure    = dic.Key;
                    var    temperature = img.Key;
                    var    image       = img.Value.Item1;
                    var    weight      = img.Value.Item2;
                    string exposureStr = exposure.ToString("000.000",
                                                           System.Globalization.CultureInfo.InvariantCulture).Replace(".", "");
                    string temperatureStr = temperature.ToString("00.0",
                                                                 System.Globalization.CultureInfo.InvariantCulture).Replace(".", "");
                    string weightStr = weight.ToString("000",
                                                       System.Globalization.CultureInfo.InvariantCulture).Replace(".", "");
                    var fileNameWithoutExtension = exposureStr + "-" + temperatureStr + "-" + weightStr;
                    //TODO should be uncommented
                    //Imaging.Png16SaveImageData(image,
                    //    pngDirectory,
                    //    fileNameWithoutExtension + ".png"
                    //);
                    SaveDoubleArrToBinary(
                        Path.Combine(binDirectory, fileNameWithoutExtension + ".bin"),
                        image);
                }
            }
        }
예제 #3
0
        public System.Collections.Generic.List <Tuple <int, int> > GetBadPixels()
        {
            var calibrationParameters = new CalibrationParameters();

            return(calibrationParameters.badPixels);
        }