ALGORITHM
1. Pick up an image from the pool of hand gesture images [taken by my camera].
2. Localize hand-like regions based on learned skin color statistics. Convert the image to black and white, such that black is 0 and white is 1 (binary image), so now we have a matrix of 0's and 1's. Perform region based segmentation to extract the hand[Done on the GPU]. The process is described in detail here [2].The resulting matrix is written to a text file which is fed to MATLAB.
3. Use the matrix obtained in step 2 to train the neural network(on CPU using MATLAB).
4. Once the network is trained , we test it on GPU (by caching in Kohonen Layer weights from text file, generated by MATLAB) .
5. GPU implementation :-
a. Load the image into GPU global memory
b. Process it as in step 2, output will be matrix of size
(262144 x1).
c. Pad the matrix with 0's - output will be a matrix of size(262144 x1).
(262144 x16) - Inputs matrix.
d. This is all done on the GPU. Now pass the kohonen
weights matrix ( which has also been padded with 0's
so that it has a size = ( 16 x 262144) ), to the GPU.
e. Multiply kohonen_weights matrix by Inputs matrix - which
will give a 16 x 16 matrix. Extract the first five values from
it. The index of the value which has maximum value + 1
gives us the count.