public void AddWords(SegmentedWordCollection words) { if (words.Count > 0) { foreach (var item in words) { AddNewWord(item.Word, item.StartTime, item.EndTime); } AddLabel(Length - words.Last().EndTime, "end", Brushes.White); } }
private void DrawData() { //preprocess data double[] x = (from data in m_dataManager.DataModelList select data.position_right.X).ToArray(); // double[] x1 = new double[m_dataManager.DataModelList.Count]; double[] y = (from data in m_dataManager.DataModelList select data.position_right.Y).ToArray(); int[] time = (from data in m_dataManager.DataModelList select data.timeStamp).ToArray(); //draw data //processed data double[] x_filter = m_csDataProcessor.MeanFilter(x, time); // x_filter = m_csDataProcessor.MeanFilter(x_filter, time); //double[] y_filter = m_csDataProcessor.MeanFilter(y, time); double[] y_filter = m_csDataProcessor.GetSDs(y); // y_filter = m_csDataProcessor.MeanFilter(y_filter, time); double[] velo = m_csDataProcessor.CalVelocity(); double[] sd = m_csDataProcessor.GetPositionSDs(); double[] acc = m_csDataProcessor.CalAcceleration(y_filter, time); TwoDimensionViewPointCollection Y_filtered = new TwoDimensionViewPointCollection(y_filter, time); TwoDimensionViewPointCollection X_filtered = new TwoDimensionViewPointCollection(x_filter, time); TwoDimensionViewPointCollection V_Right_Points = new TwoDimensionViewPointCollection(velo, time); TwoDimensionViewPointCollection SD_Right_Points = new TwoDimensionViewPointCollection(sd, time); TwoDimensionViewPointCollection A_Right_Points = new TwoDimensionViewPointCollection(acc, time); TwoDimensionViewPointCollection X_Right_Points = new TwoDimensionViewPointCollection(x, time); TwoDimensionViewPointCollection Y_Right_Points = new TwoDimensionViewPointCollection(y, time); TwoDimensionViewPointCollection Angle_Right_Points = new TwoDimensionViewPointCollection(); //left TwoDimensionViewPointCollection V_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection A_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection Angle_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection Y_Left_Points = new TwoDimensionViewPointCollection(); foreach (DataModel item in m_dataManager.DataModelList) { V_Left_Points.Add(new TwoDimensionViewPoint(item.v_left, item.timeStamp)); A_Left_Points.Add(new TwoDimensionViewPoint(item.a_left, item.timeStamp)); Angle_Right_Points.Add(new TwoDimensionViewPoint(item.angle_right, item.timeStamp)); Angle_Left_Points.Add(new TwoDimensionViewPoint(item.angle_left, item.timeStamp)); Y_Left_Points.Add(new TwoDimensionViewPoint(item.position_left.Y, item.timeStamp)); } Pen veloPen = new Pen(Brushes.DarkBlue, 2); Pen accPen = new Pen(Brushes.Red, 2); Pen anglePen = new Pen(Brushes.ForestGreen, 2); Pen posPen = new Pen(Brushes.Purple, 2); Pen filter = new Pen(Brushes.Blue, 2); cht_right.AddLineGraph("SD", SD_Right_Points, veloPen, true); cht_right.AddLineGraph("acceleration", A_Right_Points, accPen, false); cht_right.AddLineGraph("angle", Angle_Right_Points, anglePen, false); cht_right.AddLineGraph("Y", Y_Right_Points, posPen, false); cht_right.AddLineGraph("Y filter", Y_filtered, filter, false); cht_right.AddLineGraph("X", X_Right_Points, filter, false); cht_right.AddLineGraph("X filter", X_filtered, filter, false); cht_left.AddLineGraph("velocity", V_Left_Points, veloPen, true); cht_left.AddLineGraph("acceleration", A_Left_Points, accPen, false); cht_left.AddLineGraph("angle", Angle_Left_Points, anglePen, false); cht_left.AddLineGraph("Y", Y_Left_Points, posPen, false); cht_big.AddLineGraph("r_velocity", V_Right_Points, veloPen, false); cht_big.AddLineGraph("r_acceleration", A_Right_Points, accPen, false); cht_big.AddLineGraph("r_angle", Angle_Right_Points, anglePen, false); cht_big.AddLineGraph("r_Y", Y_Right_Points, posPen, false); cht_big.AddLineGraph("l_velocity", V_Left_Points, veloPen, false); cht_big.AddLineGraph("l_acceleration", A_Left_Points, accPen, false); cht_big.AddLineGraph("l_angle", Angle_Left_Points, anglePen, false); cht_big.AddLineGraph("l_Y", Y_Left_Points, posPen, false); //add true word split line ssb_wordBox.Length = m_dataManager.DataModelList.Last().timeStamp; ssb_wordBox.AddWords(m_dataManager.True_Segmented_Words); tbk_words.Text = ""; //add true word rect foreach (var item in m_dataManager.True_Segmented_Words) { tbk_words.Text += item.Word; cht_right.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); cht_left.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); cht_big.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); } //segmentate word //principle: 1.static=>1 or more signs or margin // 2.dynamic=>ME or sub-sign or signs. m_segmentatedStaticClips = new SegmentedWordCollection(); m_segmentatedDynamicClips = new SegmentedWordCollection(); double threshold = 0.15; bool[] temp = sd.Select(d => d < threshold).ToArray(); bool[] bidata = new bool[temp.Length]; for (int i = 2; i < bidata.Length - 2; i++) { if (temp[i]) { bidata[i - 2] = true; bidata[i - 1] = true; bidata[i] = true; bidata[i + 1] = true; bidata[i + 2] = true; } } bool isInStatic = false; int index = -1; for (int i = 0; i < bidata.Length; i++) { if (!isInStatic && bidata[i]) { isInStatic = true; if (index != -1 && i - index - 1 > 0) { m_segmentatedDynamicClips.Add(new SegmentedWordModel("dc", index, i - 1)); } index = i; } if (isInStatic && !bidata[i]) { isInStatic = false; m_segmentatedStaticClips.Add(new SegmentedWordModel("sc", index, i - 1)); index = i; } } //split dynamic clips double[] angVelo = m_csDataProcessor.GetAngularVelo(); TwoDimensionViewPointCollection AngularVelo = new TwoDimensionViewPointCollection(angVelo, time); cht_right.AddLineGraph("av", AngularVelo, anglePen, false); double curveThreshold = 0.45; int offset = 3; temp = angVelo.Select(ang => ang > curveThreshold).ToArray(); SegmentedWordModel[] tempList = new SegmentedWordModel[m_segmentatedDynamicClips.Count]; m_segmentatedDynamicClips.CopyTo(tempList); foreach (var item in tempList) { int startFrame = item.StartTime; for (int i = item.StartTime + offset; i < item.EndTime - offset; i++) { if (temp[i]) { int seg = FindDynamicSegmentPoint(temp, i, item.EndTime); m_segmentatedDynamicClips.Add(new SegmentedWordModel("split dc", startFrame, seg)); startFrame = seg; i += offset - 1; } } } foreach (var item in m_segmentatedStaticClips) { cht_right.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); cht_left.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); cht_big.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); } foreach (var item in m_segmentatedDynamicClips) { cht_right.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); cht_left.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); cht_big.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); } #region segmentation data from file foreach (int item in m_dataManager.AcSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.AccSegment, Colors.DarkRed); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.AccSegment, Colors.DarkRed); ssb_wordBox.AddSplitLine(item, 2, SegmentType.AccSegment, Colors.DarkRed); } foreach (int item in m_dataManager.VeSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.VelSegment, Colors.DarkBlue); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.VelSegment, Colors.DarkBlue); ssb_wordBox.AddSplitLine(item, 2, SegmentType.VelSegment, Colors.DarkBlue); } foreach (int item in m_dataManager.AngSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.AngSegment, Colors.DarkGreen); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.AngSegment, Colors.DarkGreen); ssb_wordBox.AddSplitLine(item, 2, SegmentType.AngSegment, Colors.DarkGreen); } cb_show_rect.IsChecked = true; #endregion }
private void InitializeChartData() { ImageTimeStampList = new List<int>(); AcSegmentTimeStampList = new List<int>(); VeSegmentTimeStampList = new List<int>(); AngSegmentTimeStampList = new List<int>(); DataModelList = new List<DataModel>(); True_Segmented_Words = new SegmentedWordCollection(); }
private void DrawData() { //preprocess data double[] x = (from data in m_dataManager.DataModelList select data.position_right.X).ToArray(); // double[] x1 = new double[m_dataManager.DataModelList.Count]; double[] y = (from data in m_dataManager.DataModelList select data.position_right.Y).ToArray(); int[] time = (from data in m_dataManager.DataModelList select data.timeStamp).ToArray(); //draw data //processed data double[] x_filter = m_csDataProcessor.MeanFilter(x, time); // x_filter = m_csDataProcessor.MeanFilter(x_filter, time); //double[] y_filter = m_csDataProcessor.MeanFilter(y, time); double[] y_filter = m_csDataProcessor.GetSDs(y); // y_filter = m_csDataProcessor.MeanFilter(y_filter, time); double[] velo = m_csDataProcessor.CalVelocity(); double[] sd = m_csDataProcessor.GetPositionSDs(); double[] acc = m_csDataProcessor.CalAcceleration(y_filter, time); TwoDimensionViewPointCollection Y_filtered = new TwoDimensionViewPointCollection(y_filter, time); TwoDimensionViewPointCollection X_filtered = new TwoDimensionViewPointCollection(x_filter, time); TwoDimensionViewPointCollection V_Right_Points = new TwoDimensionViewPointCollection(velo, time); TwoDimensionViewPointCollection SD_Right_Points = new TwoDimensionViewPointCollection(sd, time); TwoDimensionViewPointCollection A_Right_Points = new TwoDimensionViewPointCollection(acc,time); TwoDimensionViewPointCollection X_Right_Points = new TwoDimensionViewPointCollection(x, time); TwoDimensionViewPointCollection Y_Right_Points = new TwoDimensionViewPointCollection(y, time); TwoDimensionViewPointCollection Angle_Right_Points = new TwoDimensionViewPointCollection(); //left TwoDimensionViewPointCollection V_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection A_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection Angle_Left_Points = new TwoDimensionViewPointCollection(); TwoDimensionViewPointCollection Y_Left_Points = new TwoDimensionViewPointCollection(); foreach (DataModel item in m_dataManager.DataModelList) { V_Left_Points.Add(new TwoDimensionViewPoint(item.v_left, item.timeStamp)); A_Left_Points.Add(new TwoDimensionViewPoint(item.a_left, item.timeStamp)); Angle_Right_Points.Add(new TwoDimensionViewPoint(item.angle_right, item.timeStamp)); Angle_Left_Points.Add(new TwoDimensionViewPoint(item.angle_left, item.timeStamp)); Y_Left_Points.Add(new TwoDimensionViewPoint(item.position_left.Y, item.timeStamp)); } Pen veloPen = new Pen(Brushes.DarkBlue, 2); Pen accPen = new Pen(Brushes.Red, 2); Pen anglePen = new Pen(Brushes.ForestGreen, 2); Pen posPen = new Pen(Brushes.Purple, 2); Pen filter = new Pen(Brushes.Blue, 2); cht_right.AddLineGraph("SD", SD_Right_Points, veloPen, true); cht_right.AddLineGraph("acceleration", A_Right_Points, accPen,false); cht_right.AddLineGraph("angle", Angle_Right_Points, anglePen, false); cht_right.AddLineGraph("Y", Y_Right_Points, posPen, false); cht_right.AddLineGraph("Y filter", Y_filtered, filter, false); cht_right.AddLineGraph("X", X_Right_Points, filter, false); cht_right.AddLineGraph("X filter", X_filtered, filter, false); cht_left.AddLineGraph("velocity", V_Left_Points, veloPen,true); cht_left.AddLineGraph("acceleration", A_Left_Points, accPen, false); cht_left.AddLineGraph("angle", Angle_Left_Points, anglePen, false); cht_left.AddLineGraph("Y", Y_Left_Points, posPen, false); cht_big.AddLineGraph("r_velocity", V_Right_Points, veloPen, false); cht_big.AddLineGraph("r_acceleration", A_Right_Points, accPen, false); cht_big.AddLineGraph("r_angle", Angle_Right_Points, anglePen, false); cht_big.AddLineGraph("r_Y", Y_Right_Points, posPen, false); cht_big.AddLineGraph("l_velocity", V_Left_Points, veloPen, false); cht_big.AddLineGraph("l_acceleration", A_Left_Points, accPen, false); cht_big.AddLineGraph("l_angle", Angle_Left_Points, anglePen, false); cht_big.AddLineGraph("l_Y", Y_Left_Points, posPen, false); //add true word split line ssb_wordBox.Length = m_dataManager.DataModelList.Last().timeStamp; ssb_wordBox.AddWords(m_dataManager.True_Segmented_Words); tbk_words.Text = ""; //add true word rect foreach (var item in m_dataManager.True_Segmented_Words) { tbk_words.Text += item.Word; cht_right.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); cht_left.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); cht_big.AddTruthRect(item.StartTime, item.EndTime, Brushes.LightPink); } //segmentate word //principle: 1.static=>1 or more signs or margin // 2.dynamic=>ME or sub-sign or signs. m_segmentatedStaticClips = new SegmentedWordCollection(); m_segmentatedDynamicClips = new SegmentedWordCollection(); double threshold = 0.15; bool[] temp = sd.Select(d => d < threshold).ToArray(); bool[] bidata = new bool[temp.Length]; for (int i = 2; i < bidata.Length - 2; i++) { if (temp[i]) { bidata[i - 2] = true; bidata[i - 1] = true; bidata[i] = true; bidata[i + 1] = true; bidata[i + 2] = true; } } bool isInStatic = false; int index = -1; for (int i = 0; i < bidata.Length; i++) { if (!isInStatic && bidata[i]) { isInStatic = true; if (index != -1 && i-index-1>0) { m_segmentatedDynamicClips.Add(new SegmentedWordModel("dc", index, i - 1)); } index = i; } if (isInStatic && !bidata[i]) { isInStatic = false; m_segmentatedStaticClips.Add(new SegmentedWordModel("sc", index, i - 1)); index = i; } } //split dynamic clips double[] angVelo = m_csDataProcessor.GetAngularVelo(); TwoDimensionViewPointCollection AngularVelo = new TwoDimensionViewPointCollection(angVelo, time); cht_right.AddLineGraph("av", AngularVelo, anglePen, false); double curveThreshold = 0.45; int offset = 3; temp = angVelo.Select(ang => ang > curveThreshold).ToArray(); SegmentedWordModel[] tempList = new SegmentedWordModel[m_segmentatedDynamicClips.Count]; m_segmentatedDynamicClips.CopyTo(tempList); foreach (var item in tempList) { int startFrame = item.StartTime; for (int i = item.StartTime + offset; i < item.EndTime - offset; i++) { if (temp[i]) { int seg = FindDynamicSegmentPoint(temp, i, item.EndTime); m_segmentatedDynamicClips.Add(new SegmentedWordModel("split dc", startFrame, seg)); startFrame = seg; i += offset - 1; } } } foreach (var item in m_segmentatedStaticClips) { cht_right.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); cht_left.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); cht_big.AddSegRect(item.StartTime, item.EndTime, Brushes.LightSkyBlue); } foreach (var item in m_segmentatedDynamicClips) { cht_right.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); cht_left.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); cht_big.AddSegRect(item.StartTime, item.EndTime, Brushes.LightYellow); } #region segmentation data from file foreach (int item in m_dataManager.AcSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.AccSegment, Colors.DarkRed); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.AccSegment, Colors.DarkRed); ssb_wordBox.AddSplitLine(item, 2, SegmentType.AccSegment, Colors.DarkRed); } foreach (int item in m_dataManager.VeSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.VelSegment, Colors.DarkBlue); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.VelSegment, Colors.DarkBlue); ssb_wordBox.AddSplitLine(item, 2, SegmentType.VelSegment, Colors.DarkBlue); } foreach (int item in m_dataManager.AngSegmentTimeStampList) { cht_right.AddSplitLine(item, 2, Min, Max, SegmentType.AngSegment, Colors.DarkGreen); cht_left.AddSplitLine(item, 2, Min, Max, SegmentType.AngSegment, Colors.DarkGreen); ssb_wordBox.AddSplitLine(item, 2, SegmentType.AngSegment, Colors.DarkGreen); } cb_show_rect.IsChecked = true; #endregion }