# Pupil or Eyeball Detection and Extraction by C# from eye image

By , 27 Dec 2010

## Introduction

Using C# code and Aforge library, we can easily detect and extract the pupil from an eye image.

## Algorithm

• Step 1 - First take the eye image.
• Step 2 - Make it invert.
• Step 3 - Convert it to gray scale.
• Step 4 - Use binary filter taking threshold value 220.
• Step 5 - Find the biggest object.
• Step 6 - Find that objects center point and height.
• Step 7 - Cut a circle from that point taking radius as 2.5 multiply of height.

## Using the Code

The code is quite easy, using the aforge library filters invert, grayscale and threshold filters. First see the full code and then I will describe it.

```System.Drawing.Bitmap aq = (Bitmap)pictureBox1.Image; //take the image
//////inverting the image
Invert a = new Invert();
aq=    a.Apply(aq);
AForge.Imaging.Image.FormatImage(ref aq);

/// apply grayscale
IFilter  filter =  Grayscale.CommonAlgorithms.BT709;
aq = filter.Apply(aq);

Threshold th = new Threshold(220);
aq = th.Apply(aq);

///find the biggest object
BlobCounter bl = new BlobCounter(aq);
int i = bl.ObjectsCount;
ExtractBiggestBlob fil2 = new ExtractBiggestBlob();```
``` /// find the eye pupils start position and height

int x = 0;
int y = 0;
int h = 0;
if (i > 0)
{
fil2.Apply(aq);
x  = fil2.BlobPosition.X;
y = fil2.BlobPosition.Y;

h = fil2.Apply(aq).Height;
}

System.Drawing.Bitmap Bitmapsource = (Bitmap)pictureBox1.Image;
Rectangle section = new Rectangle(new Point(x -  h, y - h), new Size(3 * h, 3 *h));

Bitmap CroppedImage = CropImage(Bitmapsource, section);
pictureBox6.Image = CroppedImage;//get the eye pupil image```

First, take the eye image:

`System.Drawing.Bitmap aq = (Bitmap)pictureBox1.Image;`

Then make it invert:

```Invert a = new Invert();
aq=    a.Apply(aq);
AForge.Imaging.Image.FormatImage(ref aq);```

Now we make it grayscale:

``` IFilter  filter =  Grayscale.CommonAlgorithms.BT709;
aq = filter.Apply(aq);```

Now we make it binary using threshold 220:

```Threshold th = new Threshold(220);
aq = th.Apply(aq);```

Now we have to find the biggest object in the binary image:

```BlobCounter bl = new BlobCounter(aq);
int i = bl.ObjectsCount;
ExtractBiggestBlob fil2 = new ExtractBiggestBlob();
fil2.Apply(aq);```

Now we will find the start position and height of the biggest object/eye pupil:

```int x = 0;
int y = 0;
int h = 0;
if (i > 0)
{
fil2.Apply(aq);
x  = fil2.BlobPosition.X;
y = fil2.BlobPosition.Y;

h = fil2.Apply(aq).Height;
}```

Now, we have to cut the pupil part from the image so we can find the image:

To cut the image, we use the following code:

```System.Drawing.Bitmap Bitmapsource = (Bitmap)pictureBox1.Image;
Rectangle section = new Rectangle(new Point(x -  h, y - h), new< Size(3 * h, 3 *h));
Bitmap CroppedImage = CropImage(Bitmapsource, section);```

The cropped image function code is:

```public Bitmap CropImage(Bitmap source, Rectangle section)  {
Bitmap bmp = new Bitmap(section.Width, section.Height);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);
return bmp;}```

Hope that will help for any eyeball or pupil extraction code.

## Points of Interest

For face recognition or detection, eye recognition can be helpful.

## History

• 22nd December, 2010: Initial post

Software Developer Rymes
Kishor is an undergraduate Computer Science and Engineering graduate from Khulna University Of Engineering and Technology. Currently working as a software developer in Rymes. Before joining Rymes Nascenia IT he worked as a software developer at Nascenia IT and as a trainee software developer at Technocrats BD, where he worked in .Net technologies. He developed few softwares in .Net framework. A few of the interesting ones were about face replacement, and GUI based requirement elicitation tool, image converter, image processing and LAN monitoring system.he worked on Ruby on Rails. Currently working on android
http://kishordgupta.wordpress.com/

Votes of 3 or less require a comment

Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
 Search this forum Profile popups    Spacing RelaxedCompactTight   Noise Very HighHighMediumLowVery Low   Layout Open AllThread ViewNo JavascriptPreview   Per page 102550
 First Prev Next
 My vote of 5 jfriedman 9-Jan-13 12:09
 Good article Nycdude777 5-Jan-13 8:19
 Vote 4 chayangkul 4-Mar-12 1:10
 question bessso 22-May-11 0:00
 My vote of 5 sajib52 2-Jan-11 6:30
 Some Questions Diamonddrake 28-Dec-10 3:34
 Re: Some Questions kdgupta87 28-Dec-10 4:07
 My vote of 4 Hiren Solanki 28-Dec-10 1:18
 My vote of 4 Libin Jose Chemperi 27-Dec-10 22:26
 My vote of 4 RaviRanjankr 27-Dec-10 17:53
 My vote of 2 pt1401 24-Dec-10 6:53
 Re: My vote of 2 kdgupta87 24-Dec-10 8:35
 Re: My vote of 2 RedDK 27-Dec-10 6:23
 Re: My vote of 2 kdgupta87 27-Dec-10 8:20
 5 out of 5 (nice article) Bikash_coder 23-Dec-10 9:24
 My vote of 5 muminbahar 22-Dec-10 20:41
 My vote of 4 Tony Richards 22-Dec-10 11:39
 Re: My vote of 4 kdgupta87 22-Dec-10 13:50
 My vote of 4 SledgeHammer01 22-Dec-10 9:58
 Threshold value? Trollslayer 22-Dec-10 5:03
 Re: Threshold value? kdgupta87 22-Dec-10 8:17
 My vote of 5 prasad02 22-Dec-10 4:23
 Re: My vote of 5 Member 8872384 2-Oct-12 11:55
 Last Visit: 31-Dec-99 18:00     Last Update: 19-Jun-13 18:17 Refresh 1