/// <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); }
private void запускToolStripMenuItem_Click(object sender, EventArgs e) { listKalmanPC = CalcKalman(listSourcePC); //KallFil.CalcEstimationScalar(; }
/// <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); }
public static PointsCoordSet GetListOnName(string Name) { int index = PointsCoordSet.GetIndex(Name); if (index == -1) { return(null); } return(PointsCoordSet.ListPointsSet[index]); }
public static void DeletePointsList(string Name) { int index = PointsCoordSet.GetIndex(Name); if (index == -1) { return; } PointsCoordSet.ListPointsSet.RemoveAt(index); }
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(); }
//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; }
/// <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; }
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(); }
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); }
public static void AddList(PointsCoordSet list) { PointsCoordSet.DeletePointsList(list.strName); PointsCoordSet.ListPointsSet.Add(list); }
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); }
/// <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); }
/// <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); }