示例#1
0
 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);
        }
示例#3
0
 public YCbCrFiltering( RangeD yRange, RangeD cbRange, RangeD crRange )
 {
     this.yRange  = yRange;
     this.cbRange = cbRange;
     this.crRange = crRange;
 }
示例#4
0
        // 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);
        }
示例#5
0
        // 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;
        }
示例#6
0
        // 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;
        }