Search This Blog

Monday, December 13, 2010

Edge Detection using C# and Aforge.NET

Edge Detection using C# and Aforge.NET

 

As I have told earlier, I am a newbie to image processing. I am posting things as I work on them. For the past few months I have been  busy with my PhD qualifiers.

Our topic for today is Edge Detection.

Edge Detection:

First step in our segmentation is edge detection. I will take a simple example to do this. Here is the picture where I am going to do the processing. Actually it is not an image. It is a video stream.

            image
Now I am going to do edge detection in it using Aforge. Before doing edge detection you should first convert into grayscale. There are mutliple ways to do edge detection [ Ref: http://www.aforgenet.com/framework/features/edge_detectors_filters.html]. Given below is the code snippet.

image                image

Bitmap image = (Bitmap)eventArgs.Frame.Clone();
Bitmap gsImage = Grayscale.CommonAlgorithms.BT709.Apply(image);
CannyEdgeDetector filter = new CannyEdgeDetector();
Bitmap edge = filter.Apply(gsImage);
pictureBox1.Image = (Bitmap)edge;

 


Actually I started this topic for image segmentation, but ended up as a Edge detection. I will come up with more topics. Also don’t forget to try other edge detection techniques given in Aforge.NET (link given below).


http://www.aforgenet.com/framework/features/edge_detectors_filters.html

Sunday, July 4, 2010

AForge.NET color filter C#

We are going to filter the colors of the video feed from a webcam. We will be using AForge.NET image processing framework for this and C#. You can check my previous posts for some basic video capture from webcam.

We have some steps as follows…

  1. Acquire image from webcam (check previous posts - click here )
  2. Create a color filter
  3. Apply filter

 

Step 1: Check previous posts - click here

Step 2: Create a color filter

First a little modification to the UI

image_thumb33

Then the code for the track bar.

image_thumb2

Now as we move the slider, the variable for the RGB has to change accordingly. We have given the incremental/decremental value of 3. So when we move the slider, the value of RGB will change +3 or –3. You can change to required value by changing the TickFrequency value.

image_thumb4

The main filter part. Please check this reference link/documentation ( http://www.aforgenet.com/framework/docs/html/35bd90e3-4e35-8f5f-e255-26c5d8d4b927.htm ). I have done the same with a  little UI.

image_thumb41

I am changing the value from 0 to the value in the track bar. You can add one more track bar for the lower value and can get a very good results.

Here is the reference and source for this step 2

Links : http://www.aforgenet.com/framework/docs/html/35bd90e3-4e35-8f5f-e255-26c5d8d4b927.htm

Step 3: Apply filter

image_thumb27

Now run it !!!!!!!!!!!!!!!!!!!!!!!

It works !!!

Here are my results

The Original Screen (Before Processing)

Note the trackbar at full. Move your trackbar to maximum initially. Else you will not see anything. Because all the filter will be at 0. Which means block everything.

image_thumb43

After applying value of red filter (look at the red trackbar)

image_thumb45

Wow, the red is completely removed.

Now lets try Blue. (bring back red trackbar to maximum)

image_thumb48

Light source is natural light (sun light) through window.

Same blue filter with indoor lightings. Yes. Lights do affect the result a lot.

image_thumb50

Green filter test..

image_thumb52
Ok, but not impressive. Because the lower limit of the filter is 0. If we move both upper and lower, we’ll get impressive results.

 

------------------------------------------- Using Lower Value for filter -----------------------------------------------------------------------

I just modified the UI so that I can change the lower value of the filter too. And I started playing to do some object isolation. Pretty nice. Here are some screen shots. Note the slide bar too.

image_thumb55

Isolated the orange cup !!!!!!!!!!!!!!!1 success

image_thumb58



Note :

  • Lightings play a major part in image processing. We need to add more things in the future to make it work under any lightings.
  • Camera also plays a major role. Due to some reasons, my camera shows green color in the background. Using good quality cameras, you can do miracles.

have a good day.
~Prem


Webcam using AForge.NET (Part II)

 

Now to use webcam and I will go with the USB camera. I know the name of the camera (from the tutorial Part I, pop up box) as “USB2.0 Camera” and it is index as number 4 (from 0). You need to draw a picture box and a button to start the camera in the design view like this

image_thumb5

Double click on the “Start Camera” button and we go to the code side. I am posting the code with comments. This will probably help you if you read the code.

image_thumb10

And it works !!!!!!!!!!!!!!!!!!!!!!!!!

 Ok, here is another video from a different site. I am not the author. But just a crash programming.

C# Tutorial - Getting Images from Webcam using Aforge from shivam on Vimeo.

Here is the link to the source of this video and author http://vimeo.com/7526663

 

Up coming tutorials will be on image processing. I will be posting as I am learning.

 

~Prem

Webcam using AForge.NET (Part I)

 

Last tutorial we saw about setting up the environment to use AForge.NET. That was not a necessary tutorial, but it was my first post to see how to use windows live writer tool. And also that will give a sense satisfaction for people who have used OpenCV and trying AForge for the first time.

So now we have a window look like this. ( you can refer the previous tutorial to see how we set this environment).

image_thumb6

 

Now the fun part. Programming !!!!!!!!!!!!!!!!!!!!!!!!!!

I am an Electrical guy, therefore according to records I am not a good programmer.

Press the “F7” function key to go the see the code of this form.

[or] right click on the form and select “View Code”

image_thumb11 

             It is the same.

We will see a page like this

image_thumb17

This is called the “code behind”. The previous one is called the “design view”. These are non standard terminologies used in programming environment. Just keep yourself updated because we’ll be using this in the upcoming tutorials.

Add these two namespaces

image_thumb28

Before we use the webcam the code has to see the webcam (or ) the program has to know that there is a web cam attached to the computer. So here is our first aim

Aim : To list the USB camera attached to my computer

 

Put a button in the form. So when we click on the button, it is going to popup box for each camera.

image_thumb35


Double click on the button and it will create a function. They call it the event handler. So when the applications is running and we click on the button, it will go to this function.

image_thumb41

Now we are going to add code into this function so when we click the button it should list the USB camera attached to this computer (or laptop in my case). I will add the code and then explain the code with inline comments. I don’t want to add more screenshots and make this boring. So look at the following screenshot and try to read and understand the inline comments which will explain what is what.

image_thumb51

Now lets compile the code using the shortcut key (im sorry, im used to it. Sort of fun) [ Ctrl + Shift + b ] or you can directly run it by pressing the function key “F5”. But “F5” will properly execute only if the code has no errors.

Lets see what result I got when I ran this program. I got 2 Camera’s in my laptop. So lets see if it lists them all. The following screenshots are my outputs.

I got 2 outputs !!!

1st Camera - HP Webcam

image_thumb57

 

2nd Camera – USB camera

image_thumb64

 

Awesome!!!!!!!!!!!!!!!!!!! AForge.NET got the list of camera’s connected to my computer.

 Next tutorial is how to read video from a USB camera (a webcam in my case).

 

~Prem

AForge.NET <> Visual Studio 2010 Setup (Tutorial)

 

First we have to download AForge.NET from here ---> AForge.NET library Download. Assuming we are using a Windows OS, download the latest .exe. After downloading install it.

Once installed we will be able to see the binaries in here

C:\Program Files (x86)\AForge.NET\Framework\Release   - For 64 bit OS

C:\Program Files\AForge.NET\Framework\Release  - For 32 bit OS

image


Now I assume we already have Visual studio installed in you computer. I will be demoing with VS2010 (even 2008 is compatible).

File –> New –> Project

Select “Windows Forms Application”

image

 

Then we get a window like this

 

image

Add AForge.NET libraries as reference. To do this right click on Reference (in Solution explorer).

 

image

The browse to the folder where we installed the AForge.NET libraries

C:\Program Files (x86)\AForge.NET\Framework\Release   - For 64 bit OS

C:\Program Files\AForge.NET\Framework\Release  - For 32 bit OS

image

 

Since our next tutorial is going to be on using AForge.NET with Webcam, we are going to add only the required binaries (.dll) namely Aforge.Video.dll and Aforge.DirectShow.dll.

image

On click “OK” we should be able to see the binaries (.dll) listed in the solution explorer under the reference folder like this

image

 

Done !!!! Now we have our environment ready to do some basic webcam stuff.

See you in next tutorial.

 

~Prem