Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        private PointsCoordSet CalcKalmanOpt(PointsCoordSet list, string strName, Kalc3Dim KallFil, bool iIsPredict,
                                             bool bNoA, bool bIsX)
        {
            var listKalman = new PointsCoordSet(strName);
            var Num        = list[0].NumFrame - 1;

            for (var jc = 0; jc < list.Count; jc++)
            {
                var pt  = new Point(list[jc].X, list[jc].Y);
                var ptC = list[jc] + pt;
                ptC.col = Color.Fuchsia;
                if (list[jc].X == -1)
                {
                    ptC.col = Color.Yellow;
                }
                if (bIsX == true)
                {
                    var x = KallFil.SetData(list[jc].X, list[jc].NumFrame, iIsPredict, bNoA);
                    ptC.X = (int)x;
                }
                else
                {
                    var y = KallFil.SetData(list[jc].Y, list[jc].NumFrame, iIsPredict, bNoA);
                    ptC.Y = (int)y;
                }


                listKalman.Add(ptC);
            }
            //PointsCoordSet.AddList(listKalman);
            return(listKalman);
        }
Пример #2
0
        private void запускToolStripMenuItem_Click(object sender, EventArgs e)
        {
            listKalmanPC = CalcKalman(listSourcePC);


            //KallFil.CalcEstimationScalar(;
        }
Пример #3
0
        /// <summary>
        /// Работаем со скоростью
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        private void CalcKalmanV(List <PointCoords> list, string strName, bool iIsPredict, bool bNoA)
        {
            var listKalman = new PointsCoordSet(strName);

            if (list.Count <= 0)
            {
                return;
            }
            var KallFilX = new Kalc3Dim("X", true);
            var KallFilY = new Kalc3Dim("Y", false);
            var Num      = list[0].NumFrame - 1;

            for (var jc = 0; jc < list.Count; jc++)
            {
                var pt  = new Point(list[jc].X, list[jc].Y);
                var ptC = list[jc] + pt;
                ptC.col = Color.Fuchsia;
                if (list[jc].X == -1)
                {
                    ptC.col = Color.Yellow;
                }
                var x = KallFilX.SetData(list[jc].X, list[jc].NumFrame, iIsPredict, bNoA);
                var y = KallFilY.SetData(list[jc].Y, list[jc].NumFrame, iIsPredict, bNoA);
                ptC.X = (int)x;
                ptC.Y = (int)y;
                //PointCoords ptC = KallFil.CalcEstimationPoint(pt, list[jc].NumFrame) + list[jc];

                listKalman.Add(ptC);
            }
            PointsCoordSet.AddList(listKalman);
        }
Пример #4
0
        public static PointsCoordSet GetListOnName(string Name)
        {
            int index = PointsCoordSet.GetIndex(Name);

            if (index == -1)
            {
                return(null);
            }
            return(PointsCoordSet.ListPointsSet[index]);
        }
Пример #5
0
        public static void DeletePointsList(string Name)
        {
            int index = PointsCoordSet.GetIndex(Name);

            if (index == -1)
            {
                return;
            }
            PointsCoordSet.ListPointsSet.RemoveAt(index);
        }
Пример #6
0
        private void graphicsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var fkd = new FormKalmanDraw();

            fkd.Show();
            fkd.Graph("Marked Estimate", PointsCoordSet.GetListOnName("Marked"), Color.Black);
            //PointsCoordSet.GetListOnIndex(1).RemoveAt(19);
            // PointsCoordSet.GetListOnIndex(1).RemoveAt(19);
            fkd.Graph("Kalman XY", PointsCoordSet.GetListOnName("3D"), Color.Red);
            fkd.ConfigureGraph();
        }
Пример #7
0
        //bool isInitPoint = false;


        private void директорияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sPictureDir = SelectDir();
            if (sPictureDir == "")
            {
                return;
            }
            var files = Directory.GetFiles(sPictureDir, "*.txt");

            if (files.Length > 1)
            {
                MessageBox.Show("Более одного лог файла в директории. Выберите файл отдельно");
                логФайлToolStripMenuItem.Enabled = true;
                return;
            }
            if (files.Length == 0)
            {
                MessageBox.Show("Лог файл в директории отсутствует. Выберите файл отдельно");
                логФайлToolStripMenuItem.Enabled = true;
                return;
            }

            NCurrentFile = -1;
            strLogName   = files[0];
            strMark      = strLogName.Substring(0, strLogName.Length - 3);
            strMark     += "mrk";
            listMarkedPC = new PointsCoordSet("Marked");
            if (File.Exists(strMark))
            {
                var strMarkRead = new StreamReader(strMark);
                FillCoordData(strMarkRead, listMarkedPC, false, Color.Green);
            }
            strLog       = new StreamReader(strLogName);
            listSourcePC = new PointsCoordSet("Source");
            FillCoordData(strLog, listSourcePC, true, Color.Red);


            ShowImages();
            отметитьОбъектыToolStripMenuItem.Enabled = true;
            фильтрКальманаToolStripMenuItem.Enabled  = true;
            матрицаToolStripMenuItem.Enabled         = true;
        }
Пример #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void отметитьОбъектыToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (sPictureDir == "")
     {
         MessageBox.Show("Не задана директория");
         return;
     }
     if (strLog == null)
     {
         MessageBox.Show("Не задан файл координат");
         return;
     }
     listMarkedPC = new PointsCoordSet("Marked");
     PointsCoordSet.AddList(listMarkedPC);
     //
     //FillCoordData();
     отметитьОбъектыToolStripMenuItem.Enabled = false;
     bMark = true;
     buttonright.Enabled = false;
     buttonLeft.Enabled  = false;
 }
Пример #9
0
        private void выбратьОтображениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var FC = new FormSelectCompare();

            FC.Set1Select();
            if (FC.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            bool bRes;
            var  iRez = FC.ReturnRes(out bRes);

            if (bRes == false)
            {
                return;
            }
            listKalman1XY = PointsCoordSet.GetListOnIndex(iRez[0]);

            /*for (int i = 0; i < iRez.Length; i++)
             *  listKalmans[i] = PointsCoordSet.GetListOnIndex(iRez[i]);*/
            bDrawKalmanXY = true;
            //pictureBoxTrack.Refresh();
        }
Пример #10
0
        private PointsCoordSet CalcKalman(PointsCoordSet list)
        {
            var listKalman = new PointsCoordSet("Kalman");

            if (list.Count <= 0)
            {
                return(listKalman);
            }
            var KallFil = new KalmanFilter();
            var Num     = list[0].NumFrame - 1;

            for (var jc = 0; jc < list.Count; jc++)
            {
                var pt = new Point(list[jc].X, list[jc].Y);
                if (list[jc].X == -1)
                {
                    list[jc].Y = -1;
                }
                var ptC = KallFil.CalcEstimationPoint(pt, list[jc].NumFrame) + list[jc];
                ptC.col = Color.Fuchsia;
                listKalman.Add(ptC);
            }
            return(listKalman);
        }
Пример #11
0
 public static void AddList(PointsCoordSet list)
 {
     PointsCoordSet.DeletePointsList(list.strName);
     PointsCoordSet.ListPointsSet.Add(list);
 }
Пример #12
0
        private void сравнитьКалмановToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var FC = new FormSelectCompare();

            if (FC.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            bool bRes;
            var  iRez = FC.ReturnRes(out bRes);

            if (bRes == false)
            {
                return;
            }
            var pEtalon = PointsCoordSet.GetListOnIndex(iRez[0]);
            var p1      = PointsCoordSet.GetListOnIndex(iRez[1]);
            var p2      = PointsCoordSet.GetListOnIndex(iRez[2]);

            if ((pEtalon == null) || (pEtalon == null) || (pEtalon == null))
            {
                return;
            }
            var iMax    = pEtalon.Count;
            var sHeader = "Records " + pEtalon[0].NumFrame.ToString() + "-" + pEtalon[iMax - 1].NumFrame.ToString();

            LogFile.WriteLog(sHeader);
            sHeader = "Et= " + pEtalon.strName + " E1=" + p1.strName + " E2= " + p2.strName + " dl=" + "E1-E2";
            LogFile.WriteLog(sHeader);
            var sLog = "Et" + "\t" + "E1" + "\t" + "E2" + "\t" + "dl";

            LogFile.WriteLog(sLog);
            int iE;
            int iE12;

            LogFile.WriteLog("X");
            double M1X;
            double SD1X;
            double M2X;
            double SD2X;
            int    MMax1;
            int    MMax2;
            var    iE1X = CalcCompareParams(pEtalon, p1, true, out M1X, out SD1X, out MMax1);
            var    iE2X = CalcCompareParams(pEtalon, p2, true, out M2X, out SD2X, out MMax2);

            for (var jc = 0; jc < iMax; jc++)
            {
                iE   = pEtalon[jc].X;
                iE12 = iE1X[jc] - iE2X[jc];
                var sLog1 = iE.ToString() + "\t" + p1[jc].X.ToString() + "(" + iE1X[jc].ToString() + ")" + "\t" +
                            p2[jc].X.ToString() + "(" + iE2X[jc].ToString() + ")" + "\t" + iE12.ToString();
                LogFile.WriteLog(sLog1);
            }
            sLog = "M1X = " + M1X.ToString() + " SD1X = " + SD1X.ToString() + " M2X = " + M2X.ToString() + " SD2X = " +
                   SD2X.ToString();
            LogFile.WriteLog(sLog);
            double M1Y;
            double SD1Y;
            double M2Y;
            double SD2Y;
            var    iE1Y = CalcCompareParams(pEtalon, p1, false, out M1Y, out SD1Y, out MMax1);
            var    iE2Y = CalcCompareParams(pEtalon, p2, false, out M2Y, out SD2Y, out MMax2);

            LogFile.WriteLog("Y");
            for (var jc = 0; jc < iMax; jc++)
            {
                iE   = pEtalon[jc].Y;
                iE12 = iE1Y[jc] - iE2Y[jc];
                var sLog1 = iE.ToString() + "\t" + p1[jc].Y.ToString() + "(" + iE1Y[jc].ToString() + ")" + "\t" +
                            p2[jc].Y.ToString() + "(" + iE2Y[jc].ToString() + ")" + "\t" + iE12.ToString();
                LogFile.WriteLog(sLog1);
            }

            sLog = "M1Y = " + M1Y.ToString() + " SD1Y = " + SD1Y.ToString() + " M2Y = " + M2Y.ToString() + " SD2Y = " +
                   SD2Y.ToString();
            LogFile.WriteLog(sLog);
        }
Пример #13
0
        /// <summary>
        /// Calc difference mean and deviation
        /// </summary>
        /// <param name="pEt"></param>
        /// <param name="p1"></param>
        /// <param name="M">Meaning</param>
        /// <param name="SD">deviation</param>
        /// <returns>difference[]</returns>
        private int[] CalcCompareParams(PointsCoordSet pEt, PointsCoordSet p1, bool bIsX, out double M, out double SD,
                                        out int MMax)
        {
            var iMax = pEt.Count;
            int iE;
            int i1;
            var iE1 = new int[iMax];

            M    = 0;
            SD   = 0;
            MMax = 0;
            int jc;
            var iEmpty = 0;


            for (jc = 0; jc < iMax; jc++)
            {
                if (bIsX == true)
                {
                    iE = pEt[jc].X;
                    i1 = p1[jc].X;
                }
                else
                {
                    iE = pEt[jc].Y;
                    i1 = p1[jc].Y;
                }
                if (listSourcePC[jc].X == -1)
                {
                    continue;
                }
                iEmpty++;
                //                i2 = p2[jc].X;
                iE1[jc] = Math.Abs(iE - i1);
                M      += iE1[jc];
                if (MMax < iE1[jc])
                {
                    MMax = iE1[jc];
                }
                //iE2 = Math.Abs(iE - i2);
                //iE12 = Math.Abs(iE1 - iE2);
                //iE12 = iE1 - iE2;
                //string sLog1 = iE.ToString() + "\t" + iE1.ToString() + "\t" + iE2.ToString() + "\t" + iE12.ToString();
                //LogFile.WriteLog(sLog1);
            }
            double dPow = 0;

            if (iEmpty == 0)
            {
                return(iE1);
            }
            M /= iEmpty;
            for (jc = 0; jc < iMax; jc++)
            {
                if (listSourcePC[jc].X == -1)
                {
                    continue;
                }
                dPow += Math.Pow(iE1[jc] - M, 2);
                //iE2 = Math.Abs(iE - i2);
                //iE12 = Math.Abs(iE1 - iE2);
                //iE12 = iE1 - iE2;
                //string sLog1 = iE.ToString() + "\t" + iE1.ToString() + "\t" + iE2.ToString() + "\t" + iE12.ToString();
                //LogFile.WriteLog(sLog1);
            }
            SD = Math.Sqrt(dPow / iEmpty);
            return(iE1);
        }
Пример #14
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        //private bool FillCoordData(StreamReader sr, List<PointCoords> list,bool bIsNeed,Color col)
        private bool FillCoordData(StreamReader sr, PointsCoordSet list, bool bIsNeed, Color col)
        {
            if (sr == null)
            {
                if (bIsNeed)
                {
                    MessageBox.Show("Не задан файл координат");
                }
                return(false);
            }
            //list = new List<PointCoords>();
            string strTemp;
            var    iNum = -1;

            while (true)
            {
                strTemp = sr.ReadLine();
                if (strTemp == null)
                {
                    break;
                }

                var pC = new PointCoords();
                if (pC.SetDataFromFile(strTemp, col) == false)
                {
                    continue;
                }
                if (iNum == -1)
                {
                    iNum = pC.NumFrame;
                }
                else
                {
                    iNum++;
                    if (pC.NumFrame > iNum)
                    {
                        var iNumDel = pC.NumFrame;
                        while (iNumDel != iNum)
                        {
                            var pC1 = new PointCoords();
                            pC1.NumFrame = iNum;
                            pC1.col      = pC.col;
                            pC1.Width    = pC.Width;
                            list.Add(pC1);
                            iNum++;
                        }
                    }
                }
                list.Add(pC);
            }
            if (NCurrentFile == -1)
            {
                NCurrentFile = NFirstFile = list[0].NumFrame;
                NLastFile    = list[list.Count - 1].NumFrame;
            }
            var iReminder = NLastFile - NFirstFile + 1 - list.Count;

            iNum++;
            for (var jc = 0; jc < iReminder; jc++)
            {
                var pC1 = new PointCoords();
                pC1.NumFrame = iNum;
                pC1.col      = Color.AntiqueWhite;
                pC1.Width    = 40;
                list.Add(pC1);
                iNum++;
            }
            PointsCoordSet.AddList(list);
            return(true);
        }