Пример #1
0
        public IEnumerable<EyeTrackingInfo> GetFilteredPoints()
        {
            LookPoint.Filters.WeightOOTriangular filter = new LookPoint.Filters.WeightOOTriangular();
            int filterCount = 0;

            foreach (var eyeTracking in this.EyeTrackingInfo)
            {
                var x = (eyeTracking.LeftEye.X + eyeTracking.RightEye.X) / 2;
                var y = (eyeTracking.LeftEye.Y + eyeTracking.RightEye.Y) / 2;
                var fp = filter.feed(++filterCount * 20, new PointF((float)x, (float)y));
                var point = new Point((int)fp.X, (int)fp.Y);
                yield return new EyeTrackingInfo(point, point, eyeTracking.Timestamp);
            }
        }
Пример #2
0
        public void GenerateHeatMap(string subject)
        {
            var path = "maps\\" + subject.Replace(".volke", "");
            if (!Directory.Exists("maps")) Directory.CreateDirectory("maps");
            if (!Directory.Exists(path)) Directory.CreateDirectory(path);

            int maskSize = 150;
            var mask = GetMask(maskSize);
            int[,] exposure = new int[850, 850];

            LookPoint.Filters.WeightOOTriangular filter = new LookPoint.Filters.WeightOOTriangular();
            int filterCount = 0;

            foreach (var eyeTracking in this.GetFixations().SelectMany(i => i))
            {
                var mx = (eyeTracking.LeftEye.X + eyeTracking.RightEye.X) / 2;
                var my = (eyeTracking.LeftEye.Y + eyeTracking.RightEye.Y) / 2;
                var fp = filter.feed(++filterCount * 20, new PointF((float)mx, (float)my));
                var point = new Point((int)fp.X, (int)fp.Y);

                if (point.X < 0 || point.Y < 0 || point.X >= 850 || point.Y >= 850)
                    continue;

                int exposureValue = 10;
                for (int x = 0; x < maskSize; x++)
                {
                    int targetX = point.X - (maskSize / 2) + x;
                    if (targetX < 0 || targetX >= 850) continue;

                    for (int y = 0; y < maskSize; y++)
                    {
                        int targetY = point.Y - (maskSize / 2) + y;
                        if (targetY < 0 || targetY >= 850 || mask[x, y] == 0) continue;

                        exposure[targetX, targetY] += exposureValue * mask[x, y];
                    }
                }
            }

            float max = exposure.Cast<int>().Max();

            for (int x = 0; x < 850; x++)
                for (int y = 0; y < 850; y++)
                    this.BoardImage.SetPixel(x, y, GetColor(this.BoardImage.GetPixel(x, y), exposure[x, y], max));

            var bmp = new Bitmap(850, 900);

            using (var g = bmp.GetGraphics())
            {
                g.Graphics.DrawString(this.Test.Question, new Font("Calibri", 12), Brushes.Black, 5, 5);
                g.Graphics.DrawString(this.Test.IsCorrect ? "SIM" : "NÃO", new Font("Calibri", 12, FontStyle.Bold), Brushes.Black, 5, 22);
                g.Graphics.DrawImageUnscaled(this.BoardImage, 0, 80);
            }

            bmp.Save(path + "\\" + this.Test.Id + ".png");
        }