12,503,198 members (57,153 online)
alternative version

67.9K views
81 bookmarked
Posted

# Pupil or eyeball detection and extraction from eye image using C#

, 27 Dec 2010 CPOL
 Rate this:
Pupil extraction from eye image using C#.

## Introduction

Using C# and the 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 object's 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 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);```

Next 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 cut the pupil part from 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.

## Share

 Software Developer Silicon Orchard Ltd Bangladesh
Kishor Datta Gupta
COO / CO-Founder of Silicon Orchard Ltd
Kishor started his career with Android app development. He has a vast knowledge on .NET framework and image processing. He served Samsung R&D Center in Bangladesh and also in South Korea as a Software Engineer. Currently he is serving Silicon Orchard LTD. as the COO of the Company
http://kishordgupta.com/

## You may also be interested in...

 Pro Pro

 First Prev Next
 to detect the eyes in android?? Member 114912183-Jun-15 21:05 Member 11491218 3-Jun-15 21:05
 Source code project Member 808473614-Sep-14 18:04 Member 8084736 14-Sep-14 18:04
 more question uyungfauziyah16-Apr-14 15:52 uyungfauziyah 16-Apr-14 15:52
 Type or namespace name not available laiza ramal14-Sep-13 1:26 laiza ramal 14-Sep-13 1:26
 My vote of 5 jfriedman9-Jan-13 12:09 jfriedman 9-Jan-13 12:09
 Good article Nycdude7775-Jan-13 8:19 Nycdude777 5-Jan-13 8:19
 Vote 4 chayangkul4-Mar-12 1:10 chayangkul 4-Mar-12 1:10
 question bessso22-May-11 0:00 bessso 22-May-11 0:00
 My vote of 5 sajib522-Jan-11 6:30 sajib52 2-Jan-11 6:30
 Some Questions Diamonddrake28-Dec-10 3:34 Diamonddrake 28-Dec-10 3:34
 Re: Some Questions kdgupta8728-Dec-10 4:07 kdgupta87 28-Dec-10 4:07
 My vote of 4 Hiren Solanki28-Dec-10 1:18 Hiren Solanki 28-Dec-10 1:18
 My vote of 4 Libin Jose Chemperi27-Dec-10 22:26 Libin Jose Chemperi 27-Dec-10 22:26
 My vote of 4 RaviRanjankr27-Dec-10 17:53 RaviRanjankr 27-Dec-10 17:53
 My vote of 2 pt140124-Dec-10 6:53 pt1401 24-Dec-10 6:53
 Re: My vote of 2 kdgupta8724-Dec-10 8:35 kdgupta87 24-Dec-10 8:35
 Re: My vote of 2 RedDK27-Dec-10 6:23 RedDK 27-Dec-10 6:23
 Re: My vote of 2 kdgupta8727-Dec-10 8:20 kdgupta87 27-Dec-10 8:20
 5 out of 5 (nice article) Bikash_coder23-Dec-10 9:24 Bikash_coder 23-Dec-10 9:24
 My vote of 5 muminbahar22-Dec-10 20:41 muminbahar 22-Dec-10 20:41
 My vote of 4 Tony Richards22-Dec-10 11:39 Tony Richards 22-Dec-10 11:39
 Re: My vote of 4 kdgupta8722-Dec-10 13:50 kdgupta87 22-Dec-10 13:50
 My vote of 4 SledgeHammer0122-Dec-10 9:58 SledgeHammer01 22-Dec-10 9:58
 Threshold value? Trollslayer22-Dec-10 5:03 Trollslayer 22-Dec-10 5:03
 Re: Threshold value? kdgupta8722-Dec-10 8:17 kdgupta87 22-Dec-10 8:17