Esempio n. 1
0
 private static ColorMapFloat ApplyCurve(ColorMap<ushort> map, float[][] curve)
 {
     var result = new ColorMapFloat(map.Width, map.Height);
     Parallel.For(0, result.Height, y =>
     {
         var input = map.GetRow(y);
         var output = result.GetRow(y);
         for (var x = 0; x < result.Width; x++)
         {
             output.SetAndMoveNext(curve[0][input.R], curve[1][input.G], curve[2][input.B]);
             input.MoveNext();
         }
     });
     return result;
 }
Esempio n. 2
0
        private static ColorMapFloat ApplyCurve(ColorMap <ushort> map, float[][] curve)
        {
            var result = new ColorMapFloat(map.Width, map.Height);

            Parallel.For(0, result.Height, y =>
            {
                var input  = map.GetRow(y);
                var output = result.GetRow(y);
                for (var x = 0; x < result.Width; x++)
                {
                    output.SetAndMoveNext(curve[0][input.R], curve[1][input.G], curve[2][input.B]);
                    input.MoveNext();
                }
            });
            return(result);
        }
Esempio n. 3
0
        public void AutoAdjust(ColorMapFloat map)
        {
            double maxbright  = 0;
            var    whiteColor = new float[] { 1, 1, 1 };

            map.ForEachPixel(color =>
            {
                var bright = color.Brightness();
                if (bright < maxbright || color.MaxComponent() >= 1f)
                {
                    return;
                }

                maxbright  = bright;
                whiteColor = color.GetCopy();
            });
            var maxComp = whiteColor.Max();

            WhiteColor = whiteColor.Select(v => v / maxComp).ToArray();
        }
Esempio n. 4
0
        public void AutoAdjust(ColorMapFloat map)
        {
            const int maxValue = 1023;
            var       h        = map.GetHistogram(maxValue);

            var wcenter  = h.FindWeightCenter((float[])null, (float[])null);
            var wcenterf = wcenter.Select((v, c) => (v - _minIn[c]) / (_maxIn[c] - _minIn[c]));

            _contrast = wcenterf.Select(v => (float)Math.Log(0.5, v)).ToArray();
            _contrast = Enumerable.Repeat(_contrast.Average(), 3).ToArray();

            //            h.Transform((index, value, comp) => (int)(1023 * Math.Pow(index / 1023f, _contrast[comp])));

            float[] max;
            float[] min;
            h.FindMinMax(out min, out max, 0.005f);
            //min = Enumerable.Repeat(min.Average(), 3).ToArray();
            //max = Enumerable.Repeat(max.Average(), 3).ToArray();

            _maxIn = max;
            _minIn = min;
            Recalculate();
        }