Friday, June 28, 2013

EmguCV binary image ( Thresholding )

For a grayscale image this is simple: 


OpenFileDialog open = new OpenFileDialog();
    open.Filter = "Image Files (*.tif; *.dcm; *.jpg; *.jpeg; *.bmp)|*.tif; *.dcm; *.jpg; *.jpeg; *.bmp";
    int threshold_value = 50; //0-255

    if (open.ShowDialog() == DialogResult.OK)
    {
        Image<Gray,Byte> img = new Image<Gray,Byte>(open.FileName);
        pictureBox1.Image = img.ToBitmap(); //Display if you want
        img = img.ThresholdBinary(new Gray(threshold_value), new Gray(255));
       //Image<Gray,Byte> Binary_Image = img.ThresholdBinary(new Gray(threshold_value), new Gray(255)); // to get it saved in seperate variable 
        pictureBox2.Image = img .ToBitmap(); //display results in different picturebox
    }


If you want to play with things a little you can add a trackbar to your form put the minimum to 0 and maximum to 255 and use this code.


    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        int trackbar = trackBar1.Value;
        label1.Text = trackbar.ToString(); //use a label to display trackbar value
        if (img != null)
        {
            using (Image<Gray,Byte> Gray = img.ThresholdBinary(new Gray(trackbar), new Gray(255)))
            {
                pictureBox2.Image = Gray.ToBitmap();
            }
        }
    }

For a colour image things are a little different:
   OpenFileDialog open = new OpenFileDialog();
    open.Filter = "Image Files (*.tif; *.dcm; *.jpg; *.jpeg; *.bmp)|*.tif; *.dcm; *.jpg; *.jpeg; *.bmp";
    int Blue_threshold = 50; //0-255
    int Green_threshold = 50; //0-255
    int Red_threshold = 50; //0-255

    if (open.ShowDialog() == DialogResult.OK)
    {
        Image<bgr,Byte> img_colour = new Image<bgr,Byte>(open.FileName);
        pictureBox1.Image = img_colour.ToBitmap(); //Display if you want
        img_colour = img_colour.ThresholdBinary(new Bgr(Blue_threshold, Green_threshold, Red_threshold), new Bgr(255, 255, 255));
        pictureBox2.Image = img_colour.ToBitmap();//display results in different picturebox
    }

No comments:

Post a Comment