Ejemplo n.º 1
0
        /// <summary>
        /// Updates an object if it finds an object from last frame at a max restore distance.
        /// </summary>
        /// <param name="occluded"></param>
        /// <param name="maxRestoreDistance"></param>
        /// <param name="boundingRectangle"></param>
        /// <param name="minAreaRect"></param>
        /// <param name="polygon"></param>
        /// <param name="points"></param>
        /// <param name="updateTime"></param>
        /// <param name="objects"></param>
        /// <returns></returns>
        private static bool UpdateObject(bool occluded, double maxRestoreDistance, Rectangle boundingRectangle, MCvBox2D minAreaRect, Polygon polygon, DPoint[] points, DateTime updateTime, IEnumerable <RectangularObject> objects)
        {
            var cCenter = minAreaRect.center;

            RectangularObject candidate = null;
            var leastDistance           = double.MaxValue;

            foreach (var obj in objects)
            {
                var oCenter  = obj.Shape.center;
                var distance = Math.Sqrt(Math.Pow(oCenter.X - cCenter.X, 2) + Math.Pow(oCenter.Y - cCenter.Y, 2));

                if (!(leastDistance > distance))
                {
                    continue;
                }

                candidate     = obj;
                leastDistance = distance;
            }

            if (leastDistance > maxRestoreDistance || candidate == null)
            {
                return(false);
            }

            candidate.State      = occluded ? TrackingState.Occluded : TrackingState.Tracked;
            candidate.LastUpdate = updateTime;
            candidate.Center     = new WPoint(cCenter.X, cCenter.Y);
            candidate.Bounds     = boundingRectangle;
            candidate.Shape      = minAreaRect;
            candidate.Polygon    = polygon;
            candidate.Points     = points;

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Find an object by blanking out known objects except for the parameter object in the
        /// source image. If obj == null it will blank out all objects.
        /// </summary>
        /// <param name="occlusionTracking"></param>
        /// <param name="image"></param>
        /// <param name="outputImage"></param>
        /// <param name="objects"></param>
        /// <param name="obj"></param>
        /// <param name="updateTime"></param>
        private RectangularObject[] FindObjectByBlankingKnownObjects(bool occlusionTracking, Image <Rgb, byte> image, ref Image <Rgb, byte> outputImage, DateTime updateTime, RectangularObject[] objects, RectangularObject obj = null)
        {
            var objectsToBlank = obj != null?objects.Where(o => o != obj) : objects;

            // Blank previous objects from previous frame
            var blankedImage = image.Copy();

            foreach (var otherObject in objectsToBlank)
            {
                blankedImage.Draw(otherObject.Shape, Rgbs.Black, -1);
            }

            var blankedImageGray = blankedImage.Convert <Gray, Byte>();

            var newObjects = FindRectangles(occlusionTracking, blankedImageGray, ref outputImage, updateTime, objects);

            blankedImageGray.Dispose();

            return(newObjects);
        }
Ejemplo n.º 3
0
 protected RectangularObject(RectangularObject other)
     : base(other)
 {
     Height = other.Height;
     Width  = other.Width;
 }