using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using Emgu.CV; using Emgu.CV.Structure; using bbiwarg.Utility; using bbiwarg.Detectors.Touch; namespace bbiwarg.Graphics { class KalmanDemo { private List points, kalmanPoints; private Kalman2DPositionFilter kalman; public KalmanDemo() { points = new List(); kalmanPoints = new List(); } public void addPoint(Point p) { if (points.Count == 0) kalman = new Kalman2DPositionFilter(new Vector2D(p)); Vector2D v = kalman.getCorrectedPosition(new Vector2D(p)); points.Add(p); kalmanPoints.Add(new Point(v.IntX, v.IntY)); } public void reset() { points.Clear(); kalmanPoints.Clear(); } public Int16[] getTextureData(int width, int height) { Image image = new Image(width, height); image.DrawPolyline(points.ToArray(), false, new Bgr(0, Int16.MaxValue, 0), 1); image.DrawPolyline(kalmanPoints.ToArray(), false, new Bgr(0, 0, Int16.MaxValue), 1); Int16[] textureData = new Int16[3 * width * height]; int index = 0; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { textureData[index + 0] = image.Data[y, x, 2]; textureData[index + 1] = image.Data[y, x, 1]; textureData[index + 2] = image.Data[y, x, 0]; index += 3; } } return textureData; } } }