/// <summary> /// Builder constructor /// </summary> /// <param name="filterSize"></param> /// <param name="filterPower"></param> /// <param name="keepOption"></param> public DeblurBuilder(Size filterSize, double filterPower = 1, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterSize; _filterSize = filterSize; _filterPower = filterPower; _keepOption = keepOption; }
public static void AverageAndDelta(out double average, out double delta, double[] doubles, KeepOption keepOption = KeepOption.AverageAndDelta) { average = doubles.Average(); delta = Math.Sqrt(doubles.Average(x => x * x) - average * average); switch (keepOption) { case KeepOption.AverageAndDelta: break; case KeepOption.Sum: average = doubles.Sum(); break; case KeepOption.Square: average = Math.Sqrt(doubles.Sum(x => x * x)); break; case KeepOption.AverageSquare: average = Math.Sqrt(doubles.Average(x => x * x)); break; default: throw new NotImplementedException(); } }
/// <summary> /// Builder constructor /// </summary> /// <param name="filterKernel"></param> /// <param name="filterPower"></param> /// <param name="keepOption"></param> public FilterBuilder(Complex[,] filterKernel, double filterPower = 1, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterKernel; _filterKernel = filterKernel; _filterPower = filterPower; _keepOption = keepOption; }
private readonly KeepOption _keepOption; // energy save options #endregion Fields #region Constructors /// <summary> /// Builder constructor /// </summary> /// <param name="filterStep"></param> /// <param name="filterPower"></param> /// <param name="keepOption"></param> public DeblurBuilder(int filterStep = 1, double filterPower = 1, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterStep; _filterStep = filterStep; _filterPower = filterPower; _keepOption = keepOption; }
private readonly KeepOption _keepOption; // energy save options /// <summary> /// Builder constructor /// </summary> /// <param name="filterStep"></param> /// <param name="filterPower"></param> /// <param name="keepOption"></param> public DeblurBuilder(int filterStep = 1, double filterPower = 1, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterStep; _filterStep = filterStep; _filterPower = filterPower; _keepOption = keepOption; }
public static void AverageAndDelta(out double average, out double delta, double[] doubles, KeepOption keepOption = KeepOption.AverageAndDelta) { average = doubles.Average(); delta = Math.Sqrt(doubles.Average(x => x*x) - average*average); switch (keepOption) { case KeepOption.AverageAndDelta: break; case KeepOption.Sum: average = doubles.Sum(); break; case KeepOption.Square: average = Math.Sqrt(doubles.Sum(x => x*x)); break; case KeepOption.AverageSquare: average = Math.Sqrt(doubles.Average(x => x*x)); break; default: throw new NotImplementedException(); } }
/// <summary> /// Builder constructor /// </summary> /// <param name="blinderSize">Bitmap blur blinder size</param> /// <param name="keepOption"></param> public BlurBuilder(Size blinderSize, KeepOption keepOption = KeepOption.AverageAndDelta) { _mode = Mode.BlinderSize; _blinderSize = blinderSize; _keepOption = keepOption; }
/// <summary> /// Builder constructor /// </summary> /// <param>Bitmap blur blinder size</param> /// <param name="filterStep"></param> /// <param name="keepOption"></param> public BlurBuilder(int filterStep, KeepOption keepOption = KeepOption.AverageAndDelta) { _mode = Mode.FilterStep; _filterStep = filterStep; _keepOption = keepOption; }
private IEnumerable <FileBlob> ApplySort(IGrouping <string, FileBlob> hashGroup, KeepOption keepOption) { if (keepOption == KeepOption.Oldest) { return(hashGroup.OrderBy(b => b.OldestTime)); } if (keepOption == KeepOption.Newest) { return(hashGroup.OrderByDescending(b => b.OldestTime)); } throw new ArgumentException("Invalid keep option"); }
/// <summary> /// Builder constructor /// </summary> /// <param name="newSize">Bitmap new size</param> /// <param name="keepOption"></param> public StretchBuilder(Size newSize, KeepOption keepOption = KeepOption.AverageAndDelta) { _mode = Mode.NewSize; _newSize = newSize; _keepOption = keepOption; }
/// <summary> /// Builder constructor /// </summary> /// <param name="filterSize">Bitmap new size</param> /// <param name="keepOption"></param> public StretchBuilder(Size filterSize, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterSize; _filterSize = filterSize; _keepOption = keepOption; }
public List <FileBlob> GetDuplicates(List <FileBlob> blobs, KeepOption keepOption = KeepOption.Oldest) { _es.Talk("Getting duplicates"); var duplicateLengthBlobs = new List <FileBlob>(); _es.Talk("Grouping by length"); var lengthGrouping = blobs.GroupBy(b => b.Length).Where(g => g.Count() > 1); _es.Talk( $"Found {lengthGrouping.Count()} groups of matching lengths containing {lengthGrouping.SelectMany(g => g.OfType<FileBlob>()).Count()} files"); if (lengthGrouping.Count() == 0) { return(new List <FileBlob>()); } foreach (var group in lengthGrouping) { _es.Talk( $"Generating hashes within the {group.Key} length group ({group.Count()} candidates)"); //foreach (var fileBlob in group) // fileBlob.Hash = GetHash(fileBlob.FullName); Parallel.ForEach(group, fileBlob => { fileBlob.Hash = GetHash(fileBlob.FullName); }); duplicateLengthBlobs.AddRange(group); } _es.Talk("Grouping by hash"); var hashGrouping = duplicateLengthBlobs.GroupBy(b => b.Hash).Where(g => g.Count() > 1); _es.Talk( $"Found {hashGrouping.Count()} groups of matching hashes containing {hashGrouping.SelectMany(g => g.OfType<FileBlob>()).Count()} files"); if (hashGrouping.Count() == 0) { return(new List <FileBlob>()); } var duplicateMd5Blobs = new List <FileBlob>(); // look at the set of duplicates foreach (var hashGroup in hashGrouping) { _es.Talk("======================================"); _es.Talk( $"Sorting group {hashGroup.Key.Substring(0, 5)} and collecting all but the oldest of any file times, with shortest path prefered"); // execute functions on the group, this enables keep strategey var orderedHashGroup = ApplySort(hashGroup, keepOption); // .ThenBy(b => b.FullName.Split(Path.DirectorySeparatorChar).Length); // print the group contents foreach (var fileBlob in orderedHashGroup) { _es.Talk(fileBlob.ToString()); } // add all but the first to the duplicates group leaving the prefered original duplicateMd5Blobs.AddRange(orderedHashGroup.Skip(1)); } _es.Talk($"{duplicateMd5Blobs.Count} duplicates to be removed found"); return(duplicateMd5Blobs); }
/// <summary> /// Builder constructor /// </summary> /// <param name="filterStep"></param> /// <param name="keepOption"></param> public StretchBuilder(int filterStep, KeepOption keepOption = KeepOption.AverageAndDelta) { _filterMode = FilterMode.FilterStep; _filterStep = filterStep; _keepOption = keepOption; }
/// <summary> /// Builder constructor /// </summary> /// <param name="blinderSize">Bitmap sharp blinder size</param> /// <param name="keepOption"></param> public SharpBuilder(Size blinderSize, KeepOption keepOption = KeepOption.AverageAndDelta) { _mode = Mode.BlinderSize; _blinderSize = blinderSize; _keepOption = keepOption; }
/// <summary> /// Builder constructor /// </summary> /// <param name="filterStep"></param> /// <param name="keepOption"></param> public SharpBuilder(int filterStep, KeepOption keepOption = KeepOption.AverageAndDelta) { _mode = Mode.FilterStep; _filterStep = filterStep; _keepOption = keepOption; }