public SpeciesIdentityResult GetMostLikelyIdentity(Image sourceImage, GeographyPoint coordinates, Boolean geoContextMode, Boolean multisample) { var formattedSourceImage = ImageConversion.ConvertTo24BitColorBitmap(sourceImage); ValidateImage(formattedSourceImage); var candidates = new ConcurrentBag <SpeciesIdentityResult>(); var imageRectangle = new Rectangle(0, 0, formattedSourceImage.Width, formattedSourceImage.Height); var cropAreas = GetCrops(imageRectangle, multisample); var sourceImageClones = new ConcurrentStack <Bitmap>(cropAreas.Select(cropArea => (Bitmap)formattedSourceImage.Clone()).ToList()); Parallel.ForEach(cropAreas, cropArea => { Bitmap imageClone; if (sourceImageClones.TryPop(out imageClone)) { var speciesInfo = GetTopCandidateSpeciesInfoForImage(imageClone, coordinates, geoContextMode, cropArea); var candidate = SpeciesIdentityResult.GetInstance(imageClone, cropArea, speciesInfo); candidates.Add(candidate); } }); var candidatesList = candidates.ToList(); if (!multisample) { return(candidatesList.FirstOrDefault() ?? SpeciesIdentityResult.NULL); } var metaFilterFactory = new MetaFilterFactory(); var metaFilters = metaFilterFactory.GetOrderedFilters(); candidatesList = metaFilters.Aggregate(candidatesList, (current, metaFilter) => metaFilter.Filter(current)); return(candidatesList.FirstOrDefault() ?? SpeciesIdentityResult.NULL); }