Click here to Skip to main content
11,645,087 members (65,970 online)
Click here to Skip to main content

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

, 27 Dec 2010 CPOL 56.7K 5.7K 79
Rate this:
Please Sign up or sign in to vote.
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.

eyeaaaaaaaaaaaa1.jpg - Click to enlarge image

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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

kdgupta87
Software Developer Silicon Orchard Ltd
Bangladesh 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...

Comments and Discussions

 
Questionto detect the eyes in android?? Pin
Member 114912183-Jun-15 21:05
memberMember 114912183-Jun-15 21:05 
GeneralSource code project Pin
Member 808473614-Sep-14 18:04
memberMember 808473614-Sep-14 18:04 
Questionmore question Pin
uyungfauziyah16-Apr-14 15:52
memberuyungfauziyah16-Apr-14 15:52 
QuestionType or namespace name not available Pin
laiza ramal14-Sep-13 1:26
memberlaiza ramal14-Sep-13 1:26 
GeneralMy vote of 5 Pin
jfriedman9-Jan-13 12:09
memberjfriedman9-Jan-13 12:09 
QuestionGood article Pin
Nycdude7775-Jan-13 8:19
memberNycdude7775-Jan-13 8:19 
QuestionVote 4 Pin
chayangkul4-Mar-12 1:10
memberchayangkul4-Mar-12 1:10 
Generalquestion Pin
bessso22-May-11 0:00
memberbessso22-May-11 0:00 
GeneralMy vote of 5 Pin
sajib522-Jan-11 6:30
membersajib522-Jan-11 6:30 
GeneralSome Questions Pin
Diamonddrake28-Dec-10 3:34
memberDiamonddrake28-Dec-10 3:34 
GeneralRe: Some Questions Pin
kdgupta8728-Dec-10 4:07
memberkdgupta8728-Dec-10 4:07 
GeneralMy vote of 4 Pin
Hiren Solanki28-Dec-10 1:18
memberHiren Solanki28-Dec-10 1:18 
GeneralMy vote of 4 Pin
Libin Jose Chemperi27-Dec-10 22:26
memberLibin Jose Chemperi27-Dec-10 22:26 
GeneralMy vote of 4 Pin
RaviRanjankr27-Dec-10 17:53
memberRaviRanjankr27-Dec-10 17:53 
GeneralMy vote of 2 Pin
pt140124-Dec-10 6:53
memberpt140124-Dec-10 6:53 
GeneralRe: My vote of 2 Pin
kdgupta8724-Dec-10 8:35
memberkdgupta8724-Dec-10 8:35 
GeneralRe: My vote of 2 Pin
RedDK27-Dec-10 6:23
memberRedDK27-Dec-10 6:23 
GeneralRe: My vote of 2 Pin
kdgupta8727-Dec-10 8:20
memberkdgupta8727-Dec-10 8:20 
General5 out of 5 (nice article) Pin
Bikash_coder23-Dec-10 9:24
memberBikash_coder23-Dec-10 9:24 
GeneralMy vote of 5 Pin
muminbahar22-Dec-10 20:41
membermuminbahar22-Dec-10 20:41 
GeneralMy vote of 4 Pin
Tony Richards22-Dec-10 11:39
memberTony Richards22-Dec-10 11:39 
GeneralRe: My vote of 4 Pin
kdgupta8722-Dec-10 13:50
memberkdgupta8722-Dec-10 13:50 
GeneralMy vote of 4 Pin
SledgeHammer0122-Dec-10 9:58
memberSledgeHammer0122-Dec-10 9:58 
QuestionThreshold value? Pin
Trollslayer22-Dec-10 5:03
mentorTrollslayer22-Dec-10 5:03 
AnswerRe: Threshold value? Pin
kdgupta8722-Dec-10 8:17
memberkdgupta8722-Dec-10 8:17 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150731.1 | Last Updated 27 Dec 2010
Article Copyright 2010 by kdgupta87
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid