Example #1
0
 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);
     }
 }
Example #2
0
        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
        }
 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 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
        }