示例#1
0
 /// <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;
 }
示例#2
0
 /// <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;
 }
示例#3
0
        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();
            }
        }
示例#4
0
 /// <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;
 }
示例#5
0
 /// <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;
 }
示例#6
0
        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;
        }
示例#7
0
        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;
        }
示例#8
0
 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();
     }
 }
示例#9
0
 /// <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;
 }
示例#10
0
 /// <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;
 }
示例#11
0
            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");
            }
示例#12
0
 /// <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;
 }
示例#13
0
 /// <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;
 }
示例#14
0
            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);
            }
示例#15
0
 /// <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;
 }
 /// <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;
 }
示例#19
0
 /// <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;
 }
示例#20
0
 /// <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;
 }