private void UpdateDevice(BlobData blob, Marker marker = null)
        {
            var device = Devices.Single(d => d.BlobId == blob.Id);
            var center = new Point(blob.Center.X, blob.Center.Y);
            device.Key = blob.Key;
            //device.BlobId = blob.Id;
            device.Center = center;
            device.State = blob.State;
            device.Shape = blob.Polygon;
            device.Area = blob.Area;

            if (marker != null)
            {
                device.DeviceId = marker.Id;
                device.IsIdentified = true;
                device.Angle = marker.Angle;
                device.RgbImageToDisplayRatio = marker.RgbImageToDisplayRatio;
            }
            else
            {
                var deltaAngle = blob.Angle - device.LastBlobAngle;

                // this is a hack but it works pretty good
                //if (deltaAngle > 45)
                //{
                //    deltaAngle -= 90;
                //    //return;
                //}
                //else if (deltaAngle < -45)
                //{
                //    deltaAngle += 90;
                //}

                //Console.WriteLine("Delta Angle {0}", deltaAngle);

                device.LastBlobAngle = blob.Angle;
                device.Angle += deltaAngle;
            }
        }
Ejemplo n.º 2
0
        private Marker FindDisplayInImage(ref Image<Gray, byte> grayscaleImage, Rectangle roi, int width, int height, Marker marker, ref Image<Rgb, byte> debugImage)
        {
            var imageWidth = grayscaleImage.Width;
            var imageHeight = grayscaleImage.Height;

            var x = (int)(marker.RelativeCenter.X * imageWidth) - roi.X;
            var y = (int)(marker.RelativeCenter.Y * imageHeight) - roi.Y;

            var grayscaleImageRoi = grayscaleImage.ROI;
            grayscaleImage.ROI = roi;

            var enclosingRectangle = FindEnclosingRectangle(ref grayscaleImage, new Point(x, y), ref debugImage, roi);

            grayscaleImage.ROI = grayscaleImageRoi;

            if (enclosingRectangle == null) return null;

            return new Marker(this, "Display")
            {
                Id = marker.Id,
                Center = marker.Center,
                Angle = marker.Angle,
                RgbImageToDisplayRatio = new Ratio
                {
                    X = width / enclosingRectangle.LongEdge.Length,
                    Y = height / enclosingRectangle.ShortEdge.Length
                },
                EnclosingRectangle = enclosingRectangle
            };
        }