Sunday, February 13, 2011

Face Detection using PCA.

I have been working on my image processing library to support face detection. I started with basic method PCA ( Principal component analysis). Basically you need to have a set of images(20-50) with different lighting conditions etc. The next step is to create covariance matrix out of it and find the eigen vector. Then simply project the the image you need to check in to Eigen vectors and find the distance between them.Do some thresholding to classify it.One important thing is you don't have to take all eigen vectors,may be its better to sort (descending ) based on Eigen value and take only first 'N' vectors.

See the video

The difficult part in PCA may be to find the eigne vectors , QA algorithm seems a good choice. The current problem with running time.It takes almost 1 second to process 200X201 image. Roughly O(n^3) complexity. I am plan to implement it in CUDA,so that it can be used for real time detection.

Tuesday, December 14, 2010

Number Plate region extraction

After a long break I started writing about my image processing studies.This time KD came with a project to extract number plate region from an image. The advantage of my method over other methods are the following.
1. fast processing
2. It can give you multiple regions in image if more than one number plate present
3. It can handle image rotation up to a certain degree( +- 35 ) .I used Eigen vectors.
4. No third party libraries like openCV or aforge ( yes some times i like to reinvent the wheels again )


See the video to see the project in action.



Although the number plate extraction parts works pretty good , I don't have a good OCR module. So i am having troubles to extract numbers from image. I tried using a simple back propagation neural network, its quality of recognition is not that great.Now i am trying to develop a rotation,scale invariant  recognizer. It may take another 9 or eight months to do that. But if it works i think that would be a great achievement. I will try to post more updates here.. 


If you know any good optical character recognition library, please let me know. 

Saturday, June 12, 2010

Calculating the reflected ray/vector


In computer graphics applications its often needed to calculate the reflection ray for example if you are writing a ray tracer, a shader for some advanced lighting , or environment mapping etc.

If you are writing shaders , there are standard library function to do that . In cg shading language there is a function reflect(also its more efficient than writing our own).

In this post rather than just giving the vector formula for reflection ray , i am trying to explain the simple mathematics behind that.

See the following image, I is the original ray, and R is the reflected ray which we need to found.N is the normal of the incident plane. P is the line perpendicular from normal to both rays. it is obvious that at both ends the length of P will be same.


Dot product between two unit vectors gives the cosine of the angle between them. So using this idea we can find

R = DotProduct[ I, N ] * N + P . ---> Eq(1)

We don't know P now. But I + P = N * DotProduct[ I,N].

So by rearranging P = N * DotProduct[ I,N] - I. Substituting the value of P now in equation(1) gives the final equation.

Here it is the final equation R = 2 * N * ( DotProduct[ I,N] ) - I