예제 #1
0
        /// <summary>
        /// Executes classification algorithm, after running the method you will have
        /// a collection containing classified blobs.
        /// </summary>
        /// <param name="blobs">The blobs to classify.</param>
        /// <returns>
        /// A collection containing classified blobs.Collection size will be equal to blobs argument.
        /// </returns>
        public ICollection <ExtendedBlob> execute(ICollection <ExtendedBlob> blobs)
        {
            // Iterate over blobs and apply criteria.
            foreach (ExtendedBlob singleBlob in blobs)
            {
                Rectangle r      = singleBlob.Rectangle;
                float     ration = r.Height / r.Width;
                int       size   = r.Height * r.Width;

                if (size <= 25)
                {
                    singleBlob.Class = Junk.GetInstance();
                }
                else if (size < 500)                 // Size criteria.
                {
                    singleBlob.Class = Unknown.GetInstance();
                }
//				else if (ration > 5 && ration < 4) // Ratio criteria.
//				{
//					singleBlob.Class = ExtendedBlob.BlobClass.Unknown;
//				}
                else
                {
                    singleBlob.Class = Person.GetInstance();
                }
            }

            return(blobs);
        }
예제 #2
0
        /// <summary>
        /// Merges blobs that are close to each other.
        /// </summary>
        /// <param name="value">The blobs found after running connected componenets algorithm.</param>
        /// <returns></returns>
//		private ArrayList<ExtendedBlob> mergeBlobs(ArrayList<ExtendedBlob> value)
//		{
//			/*
//			 * Using a very simple methology of merging.
//			 * Search all blobs that in close proximity of x pixels.
//			 */
//			ICollection<ExtendedBlob> intermediateValues =
//				new ArrayList<ExtendedBlob>(value.Count);
//			int x = 10;
//			ExtendedBlob closeToMe = value.RemoveAt(0);
//			while(!value.IsEmpty)
//			{
//				for (int i = 0; i < value.Count; i++)
//				{
//					Rectangle mergeRectangle = closeToMe.Rectangle;
//					mergeRectangle.Width += x;
//					mergeRectangle.Height += x;
//					if (mergeRectangle.IntersectsWith(value[i].Rectangle))
//					{
//
//						closeToMe
//						intermediateValues.Add(value[i]);
//					}
//				}
//			}
//
//		}

        /// <summary>
        /// Runs the conected components algorithm.
        /// </summary>
        /// <param name="image">The image on which to run the algorithms.</param>
        /// <returns></returns>
        private List <ExtendedBlob> runConectedComponentsAlgorithm(Bitmap image)
        {
            blobCounter = new BlobCounter(image);
            Blob[]              blobs       = blobCounter.GetObjects(image);
            Rectangle[]         rects       = blobCounter.GetObjectRectangles();
            List <ExtendedBlob> returnValue = new List <ExtendedBlob>(blobs.Length);

            for (int i = 0; i < blobs.Length; i++)
            {
                // Use adapter method and convert blobs to extended blobs.
                returnValue.Add(new ExtendedBlob(blobs[i], null, Unknown.GetInstance(), rects[i]));
            }

            return(returnValue);
        }