/// <summary> /// Data input yang dimasukkan dari array 0 - akhir itu nilai reflectance dari wave length: 2501.982414 sampe 1350.724346 /// </summary> /// <param name="DataReflectance"></param> /// <returns></returns> ModelInput PreProcessData(List <float> DataReflectance) { try { var item = new ModelInput(); //convert to absorbance for (int col = 0; col < DataReflectance.Count; col++) { DataReflectance[col] = (float)Math.Log(1 / DataReflectance[col]); } //sav gol filter SavitzkyGolayFilter filter = new SavitzkyGolayFilter(11, 2); List <double> rowDatas = new List <double>(); for (int col = 0; col < DataReflectance.Count; col++) { rowDatas.Add(DataReflectance[col]); } var filteredRow = filter.Process(rowDatas.ToArray()); for (int col = 0; col < DataReflectance.Count; col++) { DataReflectance[col] = (float)filteredRow[col]; } //SNV rowDatas = new List <double>(); for (int col = 0; col < DataReflectance.Count; col++) { rowDatas.Add(DataReflectance[col]); } var mean = rowDatas.Average(); var stdDev = MathExt.StdDev(rowDatas); for (int col = 0; col < DataReflectance.Count; col++) { DataReflectance[col] = (float)((DataReflectance[col] - mean) / stdDev); } item.FeatureVector = DataReflectance.ToArray(); return(item); } catch { return(null); } }
static void Main(string[] args) { FileInfo file = new FileInfo(@"C:\Users\micly\Downloads\Course_pied_en_soir_e.gpx"); var coord = GpxReader.ReadFile(file); //SavitzkyGolayFilter filter = new SavitzkyGolayFilter(50, 5); SavitzkyGolayFilter filter = new SavitzkyGolayFilter(30, 5); var lats = filter.Process(coord.Select(c => c.Item1).ToArray()); var longs = filter.Process(coord.Select(c => c.Item2).ToArray()); coord = lats.ToList().Zip(longs, (x, y) => new Tuple <double, double>(x, y)).ToList(); GpxReader.WriteFile(file, coord); Console.WriteLine("Hello World!"); }
void PreProcessed(string TargetFolder, string PreProcessFolder) { if (!Directory.Exists(PreProcessFolder)) { Directory.CreateDirectory(PreProcessFolder); } var fileCsvs = Directory.GetFiles(TargetFolder, "*.csv"); foreach (var file in fileCsvs) { var dt = ConvertCSVtoDataTable(file); //convert to absorbance foreach (DataRow dr in dt.Rows) { for (int col = 1; col < dt.Columns.Count; col++) { dr[col] = Math.Log(1 / double.Parse(dr[col].ToString())); } } dt.AcceptChanges(); //sav gol filter SavitzkyGolayFilter filter = new SavitzkyGolayFilter(11, 2); foreach (DataRow dr in dt.Rows) { List <double> rowDatas = new List <double>(); for (int col = 1; col < dt.Columns.Count; col++) { rowDatas.Add(double.Parse(dr[col].ToString())); } var filteredRow = filter.Process(rowDatas.ToArray()); for (int col = 1; col < dt.Columns.Count; col++) { dr[col] = filteredRow[col - 1]; } } dt.AcceptChanges(); //SNV foreach (DataRow dr in dt.Rows) { List <double> rowDatas = new List <double>(); for (int col = 1; col < dt.Columns.Count; col++) { rowDatas.Add(double.Parse(dr[col].ToString())); } var mean = rowDatas.Average(); var stdDev = MathExt.StdDev(rowDatas); for (int col = 1; col < dt.Columns.Count; col++) { dr[col] = (double.Parse(dr[col].ToString()) - mean) / stdDev; } } dt.AcceptChanges(); //save to file { var col = 0; StringBuilder sb = new StringBuilder(); //print column name sb.Append(dt.Columns[col].ColumnName); for (int x = 1; x < dt.Columns.Count; x++) { sb.Append("," + dt.Columns[x].ColumnName); } sb.Append(Environment.NewLine); //print data column foreach (DataRow dr in dt.Rows) { sb.Append(dr[col].ToString()); for (int x = 1; x < dt.Columns.Count; x++) { sb.Append("," + dr[x].ToString()); } sb.Append(Environment.NewLine); } var PathStr = PreProcessFolder + "\\" + dt.Columns[col].ColumnName + ".csv"; File.WriteAllText(PathStr, sb.ToString()); ConsoleHelper.Print($"{dt.Columns[col].ColumnName} - file generated."); } } }
//---------------------------------宜運函數(首)--------------------- private void displayRoiSensorView(Bitmap input_image)//育代 { //this.chart2.Series.Clear(); int W = input_image.Width, H = input_image.Height; //Bitmap image_roi_for_gray = new Bitmap(w, h); // Bitmap im1 = new Bitmap(w, h);//讀出原圖X軸 pixel Bitmap im1 = new Bitmap(W, H); //讀出原圖X軸 pixel int Pixel_x = 0; //正在被掃描的點 int Pixel_y = 0; double[] ARed = new double[W]; double[] AGreen = new double[W]; double[] ABlue = new double[W]; double[] AGray = new double[W]; double[] IntensityRed = new double[W]; double[] IntensityGreen = new double[W]; double[] IntensityBlue = new double[W]; double[] IntensityGray = new double[W]; var sgf = new SavitzkyGolayFilter(left_length, right_length, Polynomial); System.Windows.Forms.DataVisualization.Charting.Series seriesRed = new System.Windows.Forms.DataVisualization.Charting.Series("紅色", 1000); System.Windows.Forms.DataVisualization.Charting.Series seriesGreen = new System.Windows.Forms.DataVisualization.Charting.Series("綠色", 1000); System.Windows.Forms.DataVisualization.Charting.Series seriesBlue = new System.Windows.Forms.DataVisualization.Charting.Series("藍色", 1000); System.Windows.Forms.DataVisualization.Charting.Series seriesGray = new System.Windows.Forms.DataVisualization.Charting.Series("灰階", 1000); System.Windows.Forms.DataVisualization.Charting.Series seriesClb = new System.Windows.Forms.DataVisualization.Charting.Series("波長校正", 1000); System.Windows.Forms.DataVisualization.Charting.Series seriesSG1 = new System.Windows.Forms.DataVisualization.Charting.Series("SG", 1000); //Console.WriteLine("W:"+W); /* * for (k = 0; k < W; k++) * { * //theWL = parameter_buffer[4] * (Math.Pow(k, 4)) + parameter_buffer[3] * (Math.Pow(k, 3)) + parameter_buffer[2] * (Math.Pow(k, 2)) + parameter_buffer[1] * k + parameter_buffer[0]; * //seriesClb.Points.AddXY(Convert.ToDouble(k), theWL); * }*/ for (Pixel_x = 0; Pixel_x < W; Pixel_x++) { for (Pixel_y = 0; Pixel_y < H; Pixel_y++) { //int xx = Pixel_x + 1; //int yy = Pixel_y + 1; //先把圖變灰階 Color p0 = input_image.GetPixel(Pixel_x, Pixel_y);//太快會閃退,全世界都在用image_roi int R = p0.R, G = p0.G, B = p0.B; int gray = (R * 313524 + G * 615514 + B * 119538) >> 20; Color p1 = Color.FromArgb(gray, gray, gray); //im1.SetPixel(i, j, p1); ARed[Pixel_x] = ARed[Pixel_x] + R; AGreen[Pixel_x] = AGreen[Pixel_x] + G; ABlue[Pixel_x] = ABlue[Pixel_x] + B; AGray[Pixel_x] = AGray[Pixel_x] + gray; } IntensityRed[Pixel_x] = ARed[Pixel_x] / H; //平均 IntensityGreen[Pixel_x] = AGreen[Pixel_x] / H; //平均 IntensityBlue[Pixel_x] = ABlue[Pixel_x] / H; //平均 IntensityGray[Pixel_x] = AGray[Pixel_x] / H; //平均 } var sg = new DoubleVector(IntensityGray); var IntensitySG1 = sgf.Filter(sg); var IntensitySG = IntensitySG1.ToArray(); for (Pixel_x = 0; Pixel_x < W; Pixel_x++) { double WL_x = 0; double WL_x_max = 0; // int k = 0; WL_x_max = parameter_buffer[4] * (Math.Pow(W - 1, 4)) + parameter_buffer[3] * (Math.Pow(W - 1, 3)) + parameter_buffer[2] * (Math.Pow(W - 1, 2)) + parameter_buffer[1] * W - 1 + parameter_buffer[0]; //this.chart3.BackColor = Color.Black; //this.chart1.ChartAreas[0].AxisX.Interval = 5; this.chart3.ChartAreas[0].AxisY.Minimum = 0; //this.chart3.ChartAreas[0].AxisX.Minimum = 0; // this.chart3.ChartAreas[0].AxisX.Maximum = Math.Ceiling(WL_x_max); //<一定要改<-- //製作seriesClb seriesClb.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; seriesClb.Color = Color.Brown; WL_x = Math.Round(parameter_buffer[4] * (Math.Pow(Pixel_x, 4)) + parameter_buffer[3] * (Math.Pow(Pixel_x, 3)) + parameter_buffer[2] * (Math.Pow(Pixel_x, 2)) + parameter_buffer[1] * Pixel_x + parameter_buffer[0], 2); //設定座標大小 this.chart2.ChartAreas[0].AxisY.Minimum = 0; this.chart2.ChartAreas[0].AxisX.Minimum = 0; this.chart2.ChartAreas[0].AxisX.Maximum = W; //設定標題 this.chart2.Titles.Clear(); this.chart2.Titles.Add("S01"); this.chart2.Titles[0].Text = "Sensor View Point (Y軸灰度平均)"; this.chart2.Titles[0].ForeColor = Color.Black; this.chart2.Titles[0].Font = new System.Drawing.Font("標楷體", 16F); //給入數據畫圖 seriesRed.Color = Color.Red; seriesGreen.Color = Color.Green; seriesBlue.Color = Color.Blue; seriesGray.Color = Color.Gray; seriesSG1.Color = Color.Orange; seriesRed.Points.AddXY(Pixel_x, IntensityRed[Pixel_x]); seriesGreen.Points.AddXY(Pixel_x, IntensityGreen[Pixel_x]); seriesBlue.Points.AddXY(Pixel_x, IntensityBlue[Pixel_x]); seriesGray.Points.AddXY(Pixel_x, IntensityGray[Pixel_x]); seriesClb.Points.AddXY(WL_x, IntensitySG[Pixel_x]); seriesSG1.Points.AddXY(Pixel_x, IntensitySG[Pixel_x]); seriesRed.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; seriesGreen.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; seriesBlue.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; seriesGray.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; seriesSG1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; this.chart2.Series.Clear(); this.chart3.Series.Clear(); this.chart3.Series.Add(seriesClb); if (checkBox1.Checked) { this.chart2.Series.Add(seriesRed); } if (checkBox2.Checked) { this.chart2.Series.Add(seriesGreen); } if (checkBox3.Checked) { this.chart2.Series.Add(seriesBlue); } if (checkBox4.Checked) { this.chart2.Series.Add(seriesGray); } if (checkBox5.Checked) { this.chart2.Series.Add(seriesSG1); } } // im1.Save("gray.png"); //pictureBox2.Refresh(); //pictureBox2.Image = im1; }