Beispiel #1
0
        private void FilterApplyButton_Click(object sender, EventArgs e)
        {
            Bitmap B;

            if (sourceBitmap == null)
            {
                return;
            }
            B = new Bitmap(sourceBitmap);
            ImageFilter imageFilter = new ImageFilter(B);

            if (meanRadio.Checked)
            {
                int maskWidth  = int.Parse(MeanSizeXBox.Text);
                int maskHeight = int.Parse(MeanSizeYBox.Text);
                int maskOrgX   = int.Parse(MeanOrgXBox.Text);
                int maskOrgY   = int.Parse(MeanOrgYBox.Text);
                imageFilter.meanFilter(maskHeight, maskWidth, maskOrgX, maskOrgY);
            }
            else if (gaussian1Radio.Checked)
            {
                int    maskSize = int.Parse(Gaussian1MaskBox.Text);
                double sigma    = double.Parse(Gaussian1SigmaBox.Text);
                imageFilter.gaussianFilter(maskSize, sigma);
            }

            else if (gaussian2Radio.Checked)
            {
                double sigma = double.Parse(Gaussian2SigmaBox.Text);
                imageFilter.gaussianFilter(sigma);
            }

            else if (laplaceRadio.Checked)
            {
                imageFilter.laplaceSharpen();
            }

            else if (highBoostRadio.Checked)
            {
                int    maskSize = int.Parse(HighBoostMaskBox.Text);
                double sigma    = double.Parse(HighBoostSigmaBox.Text);
                double k        = double.Parse(HighBoostKBox.Text);
                imageFilter.highBoost(maskSize, sigma, k);
            }

            else if (kirshRadio.Checked)
            {
                KirshEdgeDir dir = (KirshEdgeDir)KirshComboBox.SelectedIndex;
                imageFilter.kirshEdgeDetection(dir);
            }
            else
            {
                return;
            }
            sourceBitmap   = imageFilter.getImage(); // ensures cummulative ops
            AfterBox.Image = sourceBitmap;
        }
        public void kirshEdgeDetection(KirshEdgeDir dir)
        {
            int maskSize = 3;

            double[,] filter = new double[maskSize, maskSize];
            for (int i = 0; i < maskSize; i++)
            {
                for (int j = 0; j < maskSize; j++)
                {
                    filter[i, j] = -3;
                }
            }

            if (dir == KirshEdgeDir.Horizontal)
            {
                filter[0, 0] = filter[0, 1] = filter[0, 2] = 5;
                filter[1, 1] = 0;
                linearFilter(filter, maskSize / 2, maskSize / 2, PostProcessingType.Normalize);
            }
            else if (dir == KirshEdgeDir.Vertical)
            {
                filter[0, 0] = filter[1, 0] = filter[2, 0] = 5;
                filter[1, 1] = 0;
                linearFilter(filter, maskSize / 2, maskSize / 2, PostProcessingType.Normalize);
            }
            else if (dir == KirshEdgeDir.DiagonalNorthWest)
            {
                filter[0, 1] = filter[0, 2] = filter[1, 2] = 5;
                filter[1, 1] = 0;
                linearFilter(filter, maskSize / 2, maskSize / 2, PostProcessingType.Normalize);
            }
            else if (dir == KirshEdgeDir.DiagonalNorthEast)
            {
                filter[0, 0] = filter[0, 1] = filter[1, 0] = 5;
                filter[1, 1] = 0;
                linearFilter(filter, maskSize / 2, maskSize / 2, PostProcessingType.Normalize);
            }
        }