/// <summary>
        /// Mapping the point
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PenFound(object sender, PenFoundEventArgs e)
        {
            var point = _mapper.FromPresentation(e.Frame.Point.X, e.Frame.Point.Y);
            var frame = e.Frame.ApplyRebase(point);

            if (PenPositionChanged != null)
            {
                PenPositionChanged(this, new VirtualPenPositionEventArgs(frame, CalibratorGrid.Contains(point)));
            }
        }
        /// <summary>
        /// calculate the blob's position based on the grids position
        /// </summary>
        /// <param name="b"></param>
        /// <param name="offset"></param>
        private void ProcessBlobs(BlobCounter b, int offset)
        {
            double xOff = ((_calibrationStep - 3) % (int)Math.Sqrt(CalibrationFrames - 3)) * _sqrwidth /
                          (int)Math.Sqrt(CalibrationFrames - 3);
            double yOff = Math.Floor((_calibrationStep - 3) / Math.Sqrt(CalibrationFrames - 3)) * _sqrwidth /
                          (int)Math.Sqrt(CalibrationFrames - 3);

            foreach (var blob in b.GetObjectsInformation())
            {
                var pos = _mapper.FromPresentation(blob.CenterOfGravity);
                if (pos.X >= 0 && pos.X <= _vs.Width && pos.Y >= 0 && pos.Y <= _vs.Height)
                {
                    var xPos = (int)Math.Floor((pos.X - xOff) / _sqrwidth);
                    var yPos = (int)Math.Floor((pos.Y - yOff) / _sqrheight);
#if DEBUG
                    using (var g = Graphics.FromImage(actImg))
                    {
                        g.DrawString(yPos + "," + xPos, new Font(FontFamily.GenericSansSerif, 8.0f), new SolidBrush(Color.White),
                                     blob.CenterOfGravity.X, blob.CenterOfGravity.Y);
                        g.Flush();
                        //Debug.WriteLine("wrote to image");
                    }
#endif
                    if (xPos % 2 == offset && yPos % 2 == offset) // check if the position is plausible
                    {
                        var corners = PointsCloud.FindQuadrilateralCorners(b.GetBlobsEdgePoints(blob));
                        if (corners.Count == 4)
                        {
                            RecursiveAForgeCalibrator.GridBlobs.InPlaceSort(corners);
                            Grid.AddPoint((int)(xPos * _sqrwidth + xOff), (int)(yPos * _sqrheight + yOff), corners[0].X,
                                          corners[0].Y);
                            Grid.AddPoint((int)((xPos + 1) * _sqrwidth + xOff), (int)(yPos * _sqrheight + yOff),
                                          corners[1].X,
                                          corners[1].Y);
                            Grid.AddPoint((int)(xPos * _sqrwidth + xOff), (int)((yPos + 1) * _sqrheight + yOff),
                                          corners[2].X,
                                          corners[2].Y);
                            Grid.AddPoint((int)((xPos + 1) * _sqrwidth + xOff), (int)((yPos + 1) * _sqrheight + yOff),
                                          corners[3].X,
                                          corners[3].Y);
                        }
                    }
                }
            }
        }