public Class1(IImageLoader loader) { _loader = loader; _statsGenerator = new StatsGenerator(loader); _matchFinder = new Lazy <MatchFinder>(() => new MatchFinder(new Alphabet(_statsGenerator.ImagesAndStats))); }
public BitmapAndSegments[] RefineMatches(AdvancedStats origStats, ImageSegments[] basicMatches, IImageLoader loader, StatsGenerator statsGenerator) { return(basicMatches.Select(m => new { Image = m.Image, Bitmap = loader.LoadImage(m.Image.ImagePath), ManipulationInfos = m.ManipulationInfos }) .SelectMany(m => m.ManipulationInfos.Select(r => new { ImagePath = m.Image, Image = m.Bitmap, Stats = statsGenerator.GetAdvancedStats(m.Bitmap, r.Rectangle), ManipulationInfo = r, })) .OrderBy(m => m.Stats.MidResR.Difference(origStats.MidResR) + 1.1 * m.Stats.MidResG.Difference(origStats.MidResG) + m.Stats.MidResB.Difference(origStats.MidResB) + 1.5 * m.Stats.MidResIntensity.Difference(origStats.MidResIntensity) ) // .Take(10) .Take(1) .GroupBy(m => m.ImagePath.ImagePath) .Select(group => new BitmapAndSegments(group.First().Image, group.Select(i => i.ManipulationInfo))) .ToArray()); }