Thursday, March 31, 2011

Clean Background removal with blob detection

Yes, am a little ahead in the background removal. I have now removed the background noise that escaped from my first layer background removal algorithm. I've added a second layer of background removal that removes smaller moving particles without hassle. Now the blob detection is more meaningful. I am also working on an advanced blob detection to solve some problem I am facing with the current one.

Am also wondering how I can detect overlapping blobs that lie in the same distance from the Kinect. Ofcourse, its easy to separate blobs that are at different distances, but when 2 users shake their hands, I am wondering if I can detect them as different blobs. 

Wednesday, March 30, 2011

Blob Detection in Kinect

After background removal, I've now completed the blob detection algorithm. After reading a bunch of blob detection papers, I ended up with my own (modified version of http://geekblog.nl/entry/24 ) method that is much faster and uses low CPU. The original code from the link was buggy and was only meant for multi touch detection. I've modified this idea to work with the kinect's depth data. However, I still have some problem where overlapped users/objects are tracked as single object in realtime.


See this image that shows the output. After blob detection, I've removed smaller blobs created by the noise escaped in the background removal code. It was much easier for me to filter the small ones out. In this image on the large objects (humans) are tracked.

My next step would be, to detect the nodes of each users. I might be using some clustering algorithms to detect nodes in the user's body. I've no clue if there is any straight forward algorithm for this.

Tuesday, March 29, 2011

Background Removal for Kinect Depth data

I am wondering if am atleast 10% towards completion of the skeletonization code. However, here is the best background detection and removal, I could do. This code is not based on any standard bg removal algorithm. I tried to implement more than 5 standard algorithms for background detection but they didn't work well for Kinect's output. They were all meant more for rgb data, so I started working on my own bg detection algorithm. And here is the output.


Yes, there is still some small portions that escape my bg removal code. I've decided to deal with them in blob detection. As it sounds much easier to remove smaller blobs. I am now working on a fast blob detection algorithm.

I am yet to test this bg removal code on realtime conditions like larger room and many moving objects.

Tuesday, March 15, 2011

Skeleton detection code for Kinect

As I promised earlier, I am now working on a Skeleton detection code that can work independently on any device. It will mostly be on c and c++ so it can be ported on to any platform. I have decided to split the code into different modules.
1) Background removal: I have an idea on background removal technique that will self learn during run time and does not require capturing empty background. This technique is simple and I've started working on implementing this now. Will soon post some videos on this.
2) Blob detection: I am planning to adopt some algorithm for blob detections. I've not decided on which one yet, but I am going to start from edge detection algorithm.
3) Skeleton tracking: This part, am still clueless right now. But I am sure I'll find some decent way to atleast detect hands and head. This is still a dream right now.

The whole objective of this project is to make a Skeleton detection program that uses Kinect's output and does not require any calibration posture like in OpenNI. Will post the progress here soon.