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; }
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); }
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(); }
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(); }