public HSLFiltering( Range hue, RangeD saturation, RangeD luminance ) { this.hue = hue; this.saturation = saturation; this.luminance = luminance; }
// Selection changed in component combo private void componentCombo_SelectedIndexChanged(object sender, System.EventArgs e) { AForge.Math.HistogramD h = null; RangeD input = new RangeD(0, 1); RangeD output = new RangeD(0, 1); double start = 0; switch (componentCombo.SelectedIndex) { case 0: // Y h = imgStat.Y; input = inY; output = outY; break; case 1: // Cb h = imgStat.Cb; input = inCb; output = outCb; start = -0.5; break; case 2: // Cr h = imgStat.Cr; input = inCr; output = outCr; start = -0.5; break; } histogram.Values = h.Values; inMinBox.Text = input.Min.ToString("F3"); inMaxBox.Text = input.Max.ToString("F3"); outMinBox.Text = output.Min.ToString("F3"); outMaxBox.Text = output.Max.ToString("F3"); // input slider inSlider.Min = (int) ((input.Min - start) * 255); inSlider.Max = (int) ((input.Max - start) * 255); // output slider outSlider.Min = (int) ((output.Min - start) * 255); outSlider.Max = (int) ((output.Max - start) * 255); }
public YCbCrFiltering( RangeD yRange, RangeD cbRange, RangeD crRange ) { this.yRange = yRange; this.cbRange = cbRange; this.crRange = crRange; }
// Selection changed in component combo private void componentCombo_SelectedIndexChanged(object sender, System.EventArgs e) { AForge.Math.HistogramD h = null; RangeD input = new RangeD(0, 1); RangeD output = new RangeD(0, 1); if (componentCombo.SelectedIndex == 0) { // satureation h = imgStat.Saturation; input = inSaturation; output = outSaturation; } else { // luminance h = imgStat.Luminance; input = inLuminance; output = outLuminance; } histogram.Values = h.Values; inMinBox.Text = input.Min.ToString("F3"); inMaxBox.Text = input.Max.ToString("F3"); outMinBox.Text = output.Min.ToString("F3"); outMaxBox.Text = output.Max.ToString("F3"); // input slider inSlider.Min = (int) (input.Min * 255); inSlider.Max = (int) (input.Max * 255); // output slider outSlider.Min = (int) (output.Min * 255); outSlider.Max = (int) (output.Max * 255); }
// Constructor public HistogramD( int[] values, RangeD range ) { this.values = values; this.range = range; int v, i, l = values.Length; int lM1 = l - 1; double d = range.Max - range.Min; max = 0; min = l; // calculate mean, min, max for ( i = 0; i < l; i++ ) { v = values[i]; if ( v != 0 ) { // max if ( i > max ) max = i; // min if ( i < min ) min = i; } // accumulate total value total += v; // accumulate mean value mean += ( ( (double) i / lM1 ) * d + range.Min ) * v; } mean /= total; min = ( min / lM1 ) * d + range.Min; max = ( max / lM1 ) * d + range.Min; // calculate stadard deviation for ( i = 0; i < l; i++ ) { v = values[i]; stdDev += Math.Pow( ( ( (double) i / lM1 ) * d + range.Min ) - mean, 2 ) * v; } stdDev = Math.Sqrt( stdDev / total ); // calculate median int m, h = total / 2; for ( m = 0, v = 0; median < l; m++ ) { v += values[m]; if ( v >= h ) break; } median = ( (double) m / lM1 ) * d + range.Min; }
// Constructor public HistogramD(int[] values, RangeD range) { this.values = values; this.range = range; int v, i, l = values.Length; int lM1 = l - 1; double d = range.Max - range.Min; max = 0; min = l; // calculate mean, min, max for (i = 0; i < l; i++) { v = values[i]; if (v != 0) { // max if (i > max) { max = i; } // min if (i < min) { min = i; } } // accumulate total value total += v; // accumulate mean value mean += (((double)i / lM1) * d + range.Min) * v; } mean /= total; min = (min / lM1) * d + range.Min; max = (max / lM1) * d + range.Min; // calculate stadard deviation for (i = 0; i < l; i++) { v = values[i]; stdDev += Math.Pow((((double)i / lM1) * d + range.Min) - mean, 2) * v; } stdDev = Math.Sqrt(stdDev / total); // calculate median int m, h = total / 2; for (m = 0, v = 0; median < l; m++) { v += values[m]; if (v >= h) { break; } } median = ((double)m / lM1) * d + range.Min; }