the following description is presented to enable any person skilled in the art to make and use embodiments of the invention , and is provided in the context of particular applications and their requirements . various modifications to the exemplary embodiments will be readily apparent to those skilled in the art , and the generic principles defined herein may be applied to other embodiments and applications without departing from the spirit and scope of the invention . thus , the present invention is not intended to be limited to the embodiments shown , but is to be accorded the widest scope consistent with the principles and features disclosed herein . fig1 is block diagram of an embodiment of a system for performing embodiments of methods of the present invention . system 100 includes a computer 110 and an image capturing device 120 . furthermore , as explained further below , system 100 includes computer executable code ( also referred to as a computer program or computer program code ), which when executed on a computer or computer system , cause the computer or computer system to perform embodiments of the methods of the present invention . in one embodiment , computer 110 includes monitor 111 , processor 112 , random access memory ( ram ) 113 , disk drive 114 , interface 115 , graphical input device 116 , keyboard 117 , and bus 118 . as can be seen in fig1 , bus 118 interconnects elements of computer 110 . in one embodiment , the graphical input device 116 includes a computer mouse , a trackball , a track pad , graphics tablet , touch screen , and / or other wired or wireless input devices that allow users to create or select graphics , objects , icons , and / or text appearing on the monitor 111 . in one embodiment , interface 115 is a universal serial bus ( usb ) interface . in one embodiment , interface 115 is a network interface . interface 115 may be a wired or wireless interface device . in one embodiment , interface 115 provides wired or wireless communication with an electronic communications network , such as a local area network , a wide area network ( for example , the internet ) and / or virtual networks ( for example a virtual private network ( vpn )). ram 113 and disk drive 114 are examples of tangible media ( e . g ., computer readable media ) for storage of data , audio / video files , computer programs , applet interpreters or compilers , and virtual machines . for example , ram 113 and / or disk drive 114 may store a computer program that when executed causes computer 110 to perform an embodiment of the method of the present invention . other types of tangible media include floppy disks , removable hard disks , optical storage media ( such as digital versatile disks read - only memory ( dvd - roms ), cd - roms , and barcodes ), non - volatile memory devices ( such as flash memories , roms , and battery - backed volatile memories ), and networked storage devices . these tangible media may store a computer program that when executed causes a computer to perform an embodiment of the method of the present invention . the computer readable medium can also be distributed over a network - coupled computer system so that the computer readable code is stored and executed in a distributed fashion . it is to be noted that any or all steps of the embodiments of the methods of the present invention can be computer implemented . it is also to be noted that the above examples of computer readable media are examples of non - transitory computer readable media . image capturing device 120 includes memory 121 , interface 122 , processor 123 , rgb camera 124 , depth image camera 125 , and bus 126 . as can be seen in fig1 , bus 126 interconnects elements of image capturing device 120 . in one embodiment , image capturing device 120 provides skeletal tracking information . in one embodiment , image capturing device 120 is a kinect ® device available from microsoft ® corporation of seattle , wash . in one embodiment , depth image camera 125 is an infrared ( ir ) camera . also , in one embodiment , interface 122 is a usb interface . in one embodiment , interface 122 is a network interface . interface 122 may be a wired or wireless interface device . in one embodiment , memory 121 may be ram , rom , or any other type of memory device suitable in the above context . in one embodiment , memory 121 may store computer executable code that when executed causes processor 123 to perform at least part of an embodiment of the method of the present invention . for example , memory 121 may store a computer executable code for causing processor 123 to provide skeletal tracking information . in one embodiment , one or more of memory 121 , ram 113 , and disk drive 114 , alone or in combination with the other memory elements , store ( s ) a computer executable code that when executed causes computer 110 ( either alone or in combination with processor 123 ) to perform an embodiment of the method of the present invention . it is to be noted that computer 110 and image capturing device 120 are only exemplary and a large variety of computer or image capturing device configurations may be suitable for implementing embodiments of the methods of the present invention . for example , in one embodiment , image capturing device 120 may essentially consist of an rgb camera , a depth image camera , and a suitable device for communicating with computer 110 . also , in one embodiment , the rgb camera and depth image camera may be part of the computer , in which case , there would not be an image capturing device separate from the computer . also , as the term computer is herein used broadly to encompass any processor or any device with a processor , image capturing device 120 may be considered a computer . furthermore , it is to be noted that computer 110 and image capturing device 120 illustrated in fig1 are simplified versions of a computer and an image capturing device , respectively . accordingly , some details of both computer 110 and image capturing device 120 that are known in the art have been left out of fig1 so as not to unduly overcomplicate the drawing . for example , in image capturing device 120 , when depth image camera 125 is an ir camera , image capturing device 120 would include an ir gun ( not shown ) for emitting ir signals for capturing ir depth images . fig2 is flowchart of an embodiment of a method of determining hand feature locations of the present invention . method 200 starts at 205 with frame on where images of an object are captured . the system will receive at least two streams of image frames , namely rgb image frame 210 and depth image frame 215 . the rgb image frame is a 2d image frame of the object , whereas the depth image frame is a 3d image frame of the object . as used herein the term object is used broadly to include more than one object . as such , for example , the object may include one or more people , a table , and / or chair . moreover , the captured image may include an image of a person , including an image of the different body parts of the person . in one embodiment , the rgb image frame is captured by a 2d camera , whereas the 3d image frame is captured by a depth image camera . in one embodiment , the depth image camera is an ir camera . the depth image frame 215 is used in the first depth scan process 225 . the first depth scan process 225 , details of which are shown in fig6 , generally involves ordering the sets of depth image frames and providing a set of clusters , such as set of clusters 635 ( shown in fig6 ). thereafter , data from the first depth scan process ( i . e ., the set of clusters 635 ) is used to perform the locate hand clusters process 230 . the locate hand clusters process 230 , details of which are shown in fig6 , generally involves selecting two hand clusters from the set of clusters 635 . in one embodiment , in addition to the rgb image frame 210 and depth image frame 215 , the system also provides skeletal tracking information 220 . availability of the skeletal tracking information 220 is based on whether the system can recognize the presence of a body and the relevant parts of the body . when skeletal tracking information 220 is available , it will be used to reduce the amount of processing needed to locate certain features of the body , e . g ., hands . the skeletal tracking information 220 , when available , is fed into the locate hand clusters process 230 . in such a case , the first depth scan process 225 is not performed . as the first depth scan process 225 is generally slower than the process of tracking skeletal information , using the skeletal tracking information option allows for speeding up the process . in one embodiment , prior to using a depth image frame corresponding to an rgb image frame , it is first determined whether the rgb image frame has corresponding skeletal tracking information . in one such embodiment , event handlers are used to determine whether an rgb image frame has a corresponding skeletal tracking information or depth image frame . in one such embodiment , an rgb image frame is detected first , i . e ., prior to any potential corresponding skeletal tracking information or depth image frame . in one embodiment , detection of the rgb image frame triggers a timer for detecting corresponding skeletal tracking information . if , within a predetermined time of triggering the timer , corresponding skeletal tracking information is detected , then the rgb image frame and its corresponding skeletal tracking information are used in method 200 . on the other hand , if , within a predetermined time of triggering the timer , corresponding skeletal tracking information is not detected , then the system concludes that skeletal tracking information corresponding to the rgb image frame is not available . in such a case , it is determined whether a depth image frame corresponding to the rgb image frame is available . if , within a predetermined time of triggering the timer , a corresponding depth image frame is detected , then the rgb image frame and its corresponding depth image frame are used in method 200 . on the other hand , if , within a predetermined time of triggering the timer , a corresponding depth image frame is not detected , then the system concludes that a depth image frame corresponding to the rgb image frame is not available . in such a case , the rgb image frame is disregarded . in one embodiment , in all of the above cases , the predetermined time can be any period of time greater than or equal to 100 milliseconds and less than or equal to 200 milliseconds . in one embodiment , the predetermined time for determining whether corresponding skeletal tracking information is available may be different from the predetermined time for determining whether a corresponding depth image frame is available . for example , the predetermined time for determining whether corresponding skeletal tracking information is available may be 200 milliseconds , whereas the predetermined time for determining whether a corresponding depth image frame is available may be 100 milliseconds . the locate hand clusters process 230 provides the hand clusters set coordinates in 3d ( i . e ., x , y , and z coordinates ) as part of the processed depth information 245 . the hand clusters set coordinates provided by the locate hand clusters process 230 is the original 3d coordinates of the hand clusters . the locate hand clusters process 230 also provides the hand clusters set coordinates in 3d to the scale and transform process 235 . the scale and transform process 235 scales and transforms the original 3d coordinates of the hand clusters set and provides scaled and transformed 3d coordinates of the hand clusters set . the scale and transform process 235 provides the scaled and transformed 3d coordinates of the hand clusters set as part of the processed depth information 245 . accordingly , the processed depth information 245 includes both the original and the scaled and transformed versions of the 3d coordinates of the hand clusters set . in addition to the hand clusters set coordinates in 3d received from the locate hand clusters process 230 , the scale and transform process 235 also receives the rgb image frame 210 . using the data from the locate hand clusters process 230 , the scale and transform process 235 scales and transforms the rgb image frame 210 . as a result of the scale and transform process 235 , the rgb image frame 210 is transformed into a normalized hand rgb image frame 240 . further details regarding the transformation and scaling are , for example , provided in fig7 and its corresponding description . in one embodiment , the scale and transform process 235 transforms , if necessary , each hand cluster set coordinates in 3d such that the plane defining the palm of the hand ( also herein referred to as the palm plane ) for that hand cluster is ( 1 ) parallel to the plane defining the surface of the lens of the rgb camera with which the 2d image frame is captured ( which is herein referred to as the lens plane ), with the palm facing the lens plane and ( 2 ) perpendicular to the plane defining the floor of the location where the image capturing device captured an image of the hand ( which is herein referred to as the floor plane ). the lens plane and the floor plane are those used at the time the 2d image frame is captured , which is substantially the same as the time that the 3d image frame is captured . furthermore , each hand cluster set coordinates in 3d is also transformed such that the image of the palm of the hand is directed vertically upwards ( i . e ., in the positive x direction in the coordinate system discussed below ). as a result , for each hand cluster , the transformed 3d image of the hand has a palm plane ( 1 ) parallel to the lens plane and ( 2 ) perpendicular to the floor plane , with the palm facing the lens plane and the palm directed vertically upwards . similarly , the scale and transform process 235 transforms , if necessary , the rgb image frame 210 such that the plane defining the palm of the hand will be ( 1 ) parallel to the lens plane and ( 2 ) perpendicular to the floor plane , with the palm facing the lens plane and the palm directed vertically upwards . for example , the images shown in fig4 a and 4b represent 2d images of a hand meeting the above conditions . as used in this context , perpendicular also encompasses substantially perpendicular . also , as used in this context , parallel also encompasses substantially parallel . furthermore , as used in this context , vertically upwards also encompasses substantially vertically upwards . furthermore , the scale and transform process 235 scales , if necessary , the image of the hand in the rgb image frame 210 such that the scaled 2d image of the hand fits within and corresponds to the size of a 2d frame of a predetermined size ( which in one embodiment is rectangular ). in one embodiment , the 2d image of the hand is scaled such that ( 1 ) the scaled 2d image of the hand fits within the rectangular 2d frame of predetermined size , ( 2 ) the width of the scaled 2d image of the hand fits within and is substantially equal to the width of the 2d frame of predetermined size , and ( 3 ) the height of the scaled 2d image of the hand fits within and is substantially equal to the height of the 2d frame of predetermined size . for example , in fig4 a , the 2d image 410 of a hand fits , as described above , in the rectangular 2d frame 412 . similarly , the scale and transform process 235 scales , if necessary , the image of the hand in the 3d image frame such that the scaled 3d image of the hand fits within and corresponds to the size of a 3d frame of a predetermined size ( which in one embodiment is rectangular box ). in other words , the 3d image of the hand is scaled such that ( 1 ) the scaled 3d image of the hand fits with the 3d frame of predetermined size , ( 2 ) the width of the scaled 3d image of the hand fits within and is substantially equal to the width of the 3d frame of predetermined size , ( 3 ) the height of the scaled 3d image of the hand fits within and is substantially equal to the height of the 3d frame of predetermined size , and ( 4 ) the depth ( or length ) of the scaled 3d image of the hand fits within and is substantially equal to the depth ( or length ) of the 3d frame of predetermined size . in one embodiment , the normalized hand rgb image frame 240 is a rectangular image frame of a predetermined size that is suitable for providing to a neural gas network 270 . as explained below , the normalized hand rgb image frame 240 is processed into a binary segmented image frame 250 , which is provided to the neural gas network 270 . in one embodiment , the size of the normalized hand rgb image frame 240 is the same as that of the binary segmented image frame 250 . the normalized hand rgb image frame 240 is used in the rgb to ycbcr process 255 to convert the normalized hand rgb image frame 240 to a ycbcr image frame 260 , where y represents luminance , and cb and cr are the chrominance components representing blue and red differences , respectively . thus , the rgb image frame is converted into luminance and chrominance information . in one embodiment , the rgb camera is prepared for ranges of skin colors . in one embodiment , this preparation is performed only once for each type of camera ( rather than for each individual camera ). in one embodiment , as part of the preparation , rgb images ( 50 or more ) of hands with different skin colors are captured under various lighting conditions . each of the rgb images is then converted into ycbcr color space and the average ranges for cb and cr ( i . e ., rcb and rcr , respectively ) are calculated . as explained below , these calculated ranges are later used to perform image segmentation . the ycbcr image frame 260 is provided to the binary segmentation process 265 . for each ycbcr image frame 260 the binary segmentation process 265 produces a binary segmented image frame 250 . in one embodiment , the binary segmentation process 265 operates as follows . for each pixel , only the cb and cr components are selected . the chrominance components of the ( i , j ) th pixel are represented as cb ( i , j ) and cr ( i , j ), where i and j represent integers equal to or greater than 0 . if cb ( i , j ) is within the range of rcb and cr ( i , j ) is within the range of rcr , then the pixel color is designated ( or assigned ) as black . otherwise , it is designated as white . after each of the pixels is so designated , the size of “ black ” clusters are checked . in one embodiment , smaller clusters ( such as those below 75 % of the maximum sized cluster ) are whited out . at the end of this process , the picture will contain segments that represent hands , which will be displayed in black , while the rest of the picture will be in white . such a picture is represented as binary segmented image frame 250 . fig3 shows a set of examples of different hand poses and their corresponding binary segmented image frames . more specifically , fig3 shows images 310 , 320 , and 330 ( which are in greyscale rather than color due to uspto restrictions regarding color drawings ) and their corresponding binary segmented image frames 311 , 321 , and 331 , respectively , that are produced by the binary segmentation process 265 . the binary segmented image frame 250 is provided to the neural gas network 270 . the neural gas network 270 processes the binary segmented image frame 250 to produce the hand topology data 275 ( which may also herein be referred to as hand mesh 275 ). more specifically , the neural gas network 270 processes the black pixels of the binary segmented image frame 250 and produces a grid of neuron points that represent the hand in the binary segmented image frame 250 . accordingly , the hand topology data 275 represents the neural network representing the hand that is output by the neural gas network 270 . it is to be noted that , in one embodiment , the hand topology data 275 represents a 2d neural network representing the hand . in one embodiment , the neural gas network utilized is the self - growing and organized neural gas ( sgong ). in another embodiment , a neural gas network other than sgong ( including one that is a variant of sgong ) may be utilized . sgong combines the advantages of kohonen self organizing feature map ( sofm ) and fritzke &# 39 ; s growing neural gas ( gng ) model . sgnog is an unsupervised neural network that is comprised of an input layer and an output layer . in sgnog , the presented input grid is classified into a grid of neurons where each neuron eventually addresses a feature . sgong has a number of features or characteristics , some of which are listed or explained below . first , the number of output neurons is not fixed . second , the neural network acts as a feature extractor . in this particular case , this concept is used to extract hand topology . third , the neural network in not supervised , i . e ., no a priori information is fed back to the network . fourth , each neuron acts to represent a feature in a feature set , with the initial assumption to have only two features that represent the topology . fifth , the learning process causes the number of output neurons to grow by adding a new neuron into system , when the existing neurons cannot represent a particular feature . sixth , when more than one neuron is capable of representing a particular feature , those neurons compete for the final representation . the losing neuron is removed from the system causing the number of output neurons to shrink . this tends to happen towards the end of the learning process and can be treated as a signal that the system is nearing its optimized state . seventh , the neurons are assigned to features by applying a competitive hebbian rule to a particular neuron with respect to its neighboring neurons . the winning neuron is assigned to represent the feature in question . eighth , another way to visualize the process is triangulation of the segment topology by applying delaunay triangulation . the neurons then are points that correspond to the center of gravity of each triangle . as noted above , the training procedure starts with two neurons with weights randomly assigned to those neurons . the weights of these two neurons are updated against the input and errors against vector quantization are calculated against the neuron being there as well as the case of the neuron not being there ( i . e ., the neuron being removed ). the values obtained are used to calculate distances between neighboring neurons . if a particular distance is larger than an allowed distance , the system creates another neuron and places it ( as a third neuron ) in between the original two neighboring neurons . therefore , the grid starts with two neurons and then neurons increase in numbers to fill in the shape presented in the input . this procedure is repeated until there is no need to create additional neurons in the output grid . to avoid having the procedure continue indefinitely , it is also allowed to take a maximum cut - off neuron number . as a result , the procedure is forced to finish even if the system has not reached stability . fig4 a illustrates various stages in applying a neural gas network process to a binary segmented image frame of an example of a hand posture . in fig4 a , where the hand is in an open position with the fingers completely open and extended , the result of the beginning of the process is illustrated with image 410 which has two neurons , the middle of the process is illustrated with image 420 ( where the number of neurons has grown to 48 ), and the final output of the process is illustrated with image 430 ( where the neuron grid contains 83 neurons ). in fig4 a , the neurons are shown as white dots , with one of the neurons in image 410 referenced as 411 , one of the neurons in image 420 referenced as 421 , and one of the neurons in image 430 referenced as 431 . in fig4 a , the locations of neurons 431 in image 430 may represent an example of the hand topology data 275 that is output by neural gas network 270 . fig4 b illustrates various stages in applying a neural gas network process to a binary segmented image frame of another example of a hand posture . in fig4 b , where the hand is in a closed first position , the result of the beginning of the process is illustrated with image 440 which has two neurons 441 , the middle of the process is illustrated with image 450 ( where the number of neurons has grown to 11 ), and the final output of the process is illustrated with image 460 ( where the neuron grid contains 25 neurons ). in fig4 b , the neurons are shown as white dots , with one of the neurons in image 440 referenced as 441 , one of the neurons in image 450 referenced as 451 , and one of the neurons in image 460 referenced as 461 . in fig4 b , the locations of neurons 461 in image 460 may represent an example of the hand topology data 275 that is output by neural gas network 270 . in one embodiment , the coordinates of the output neurons are centers of the classes they represent , and each neuron &# 39 ; s position can be mapped to the original coordinate of the image in 2d or 3d . in one embodiment , the neurons that have only one connection with a neighboring neuron can be tagged as potential fingertips . by following connections of potential fingertips , the rest of the finger neurons , the base of each finger , the palm of the hand and the base of the hand can be located . since the procedure deals with the neurons as elements of a coordinate system , differences between fully extended finger and closed finger can be detected . in other words , for example , it can be determined that a closed finger &# 39 ; s potential fingertip is not a fingertip , but the knuckle of that finger . referring back to fig2 , the hand topology data 275 is provided to the finger detection process 280 ( details of which are shown in fig8 ). the finger detection process 280 determines the hand features information in 2d 845 ( shown in fig8 ) and provides the hand features information in 2d 845 to the map 2d to 3d data process 285 . as used herein , hand features information may include information regarding the location of the hand and hand components ( e . g ., fingers , palm , and base ) as well as other information regarding the hand ( e . g ., left hand or right hand ), and hand components ( e . g ., index finger , length and orientation of the finger , posture of the finger ). in hand features information in 2d 845 , the location information is in 2d coordinates . the map 2d to 3d data process 285 also receives the processed depth information 245 . using the processed depth information 245 , the map 2d to 3d data process 285 maps the 2d hands data ( e . g ., fingers and palms location data ) to 3d hands data ( e . g ., fingers and palms location data ). in one embodiment , the 2d hands data , which may already be transformed and scaled relative to the original 2d data , is mapped to the 3d transformed data ( i . e ., the 3d data that may already be transformed and scaled relative to the 3d original data ). as used herein , the 3d original data refers to the data in 3d ( i . e ., x , y , and z coordinates ) captured by the depth image camera that has not been scaled or transformed . thereafter , the 3d transformed data is mapped to the 3d original data . in another embodiment , the 2d hands data may be mapped to the 3d original data without the intervening step of being mapped to the 3d transformed data . the output of the map 2d to 3d data process 285 is the hand features information in 3d 290 , where the location information is in 3d original data coordinates . fig5 is flowchart of an embodiment of a method of determining selected hand clusters . the method 500 of determining selected hand clusters begins at enable skeletal detection 505 , in case the system provides for skeletal detection . in one embodiment , skeletal readings are generated as part of the microsoft ® kinect ® software development kit ( sdk ) capabilities . at 510 , it is determined whether skeleton ( s ) ( i . e ., one or more skeletons ) are detected . if a body ( upright or seated ) is sensed in front of the image capturing device 120 ( shown in fig1 ) and the system provides skeletal detection , then the system will return skeletal information about each body detected in a structure comprised of body joints . in one embodiment of the present invention , the body joints of interest are those belonging to the palms of the hands . if the answer at 510 is yes , then the method 500 proceeds to 515 , where the system selects the skeleton closer to the image capturing device 120 ( shown in fig1 ). it is to be noted that when only one skeleton is detected , then that only skeleton is selected at 515 . from 515 , method 500 proceeds to 520 , where for the closer skeleton , the system captures the x , y , and z coordinates for the palms of the hands of the closer skeleton . it is to be noted that where the system has the skeletal detection feature , the skeletal detection provides the coordinates of the palms of the detected skeleton ( s ). from 520 , method 500 proceeds to 525 , where the system selects clusters of data point representing hands . from 525 , method 500 proceeds to 530 where the image representing the hand clusters is clipped such that each cluster representing a hand fits with an image frame of a predetermined size . if the answer at 510 is no , then the method 500 proceeds to the group z points process 560 . the answer at 510 may be no because ( 1 ) the system does not provide for skeletal detection or ( 2 ) the system provides for skeletal detection , but ( a ) there is no skeleton in the line of sight of the image capturing device 120 or ( b ) there is skeleton in the line of sight of the image capturing device 120 , but the system ( i ) fails to detect the skeleton or ( ii ) fails to indicate that a skeleton has been detected . at 540 , depth detection is enabled . with depth detection enabled , for each captured frame , the system provides a depth sensor frame set 545 which includes the x , y , and z coordinates of the data points of the captured frame . in one embodiment , the x and y coordinates , represent vertical and horizontal coordinates , respectively . also , in one embodiment , x coordinates below the horizontal plane defining the image capturing device horizon ( more specifically the horizontal plane defining the vertical midpoint of depth image camera 125 ) have negative values , whereas x coordinates above the horizontal plane defining the image capturing device horizon have positive values . also , in one embodiment , y coordinates to the right ( from the perspective of the image capturing device ) of the vertical plane defining the image capturing device ( i . e ., the vertical plane that is perpendicular to the horizontal plane defining the image capturing device horizon and that defines the horizontal midpoint of the depth image camera 125 ) have positive values , whereas y coordinates to the left of the vertical plane defining the image capturing device have negative values . it is to be noted that the above - mentioned horizontal plane is parallel to the previously - mentioned floor plane and perpendicular to the previously - mentioned plane of the lens plane . similarly , it is to be noted that the above - mentioned vertical plane is perpendicular to the previously - mentioned floor plane and parallel to the previously - mentioned lens plane . in one embodiment , height is represented as distances between maximum and minimum x values , whereas width is represented as distances between maximum and minimum y values . also , in one embodiment , the z coordinate value , which represents distance from the image capture device along the line resulting from the intersection of the horizontal plane defining the image capturing device and the vertical plane defining the image capturing device , is always positive . in such an embodiment , the point along the above - mentioned intersecting line where the depth image camera 125 lens is located has a z coordinate value of 0 and points along the line in front of the depth image camera 125 have positive values . in one embodiment , the x , y , and z coordinates are scanned separately , but in parallel . the depth sensor frame set 545 is provided to the order frame set process 550 . the order frame set process 550 orders the depth sensor frame set 545 as z - ordered frame points 555 ( which may also herein be referred to as a set of data points sorted by z 555 ), where the data points are ordered in increasing order of their z coordinates . in other words , the data points are ordered in order of increasing depth relative to the depth image camera 125 . in one embodiment , for each z coordinate with data points , the z coordinate reading is mapped to all points encountered in the other two ( x and y ) coordinates . accordingly , the z - ordered frame points 555 contains an ordered set where , for each z reading , data points are represented as a z reading that maps to a collection of x and y readings for that z . also , in one embodiment , in addition to ordering the depth sensor frame set 545 , the order frame set process also scans minimum and maximum values for x , y , and z readings and provides the minimum and maximum values for x , y , and z readings . in one embodiment , the scanning of the minimum and maximum values is done in parallel for the x , y , and z coordinates . in one embodiment , the scans performed on the x and y coordinates are simple scans to determine bounding geometry in terms of height and width , respectively . in one embodiment , the scans performed on the x and y coordinates also provide statistical calculations that provide information about distribution around these two coordinates within the workable depth - range ( which may also be referred to as the workable z range ). the workable z range refers to the z range within which data points may be of interest and are accordingly processed and outside of which the data points are not of interest and are accordingly discarded . the z - ordered fame points 555 is provided to the group z points process 560 , which is shown in detail in fig6 and described in further detail below . from the group z points process 560 , method 500 proceeds to the clip image process 530 . it is to be noted that , if a skeleton is not detected at 510 , then the clip image process 530 follows the group z points process 560 . on the other hand , if skeleton ( s ) are detected at 510 , then the clip image process 530 follows the select hand clusters process 525 . the clip image process 530 ( 1 ) clips the clusters it is provided ( e . g ., the final set of clusters 635 ( shown in fig6 )) such that the clipped clusters contain only hand clusters and ( 2 ) outputs the selected hand clusters 535 ( which may also be referred to as the clipped hand clusters 535 ). the selected hand clusters 535 are a set of coordinates that represent most likely clusters depicting hands . fig6 is a detailed flowchart of an embodiment of a method 600 of grouping z points shown in fig5 . generally speaking , in method 600 , sorted set of mappings for z coordinate readings will be used to determine clusters that represent hands detected by the image capturing device . in one embodiment , clustering is performed on depth ( i . e ., the z coordinate ) and follows similar steps related to the k - means non - hierarchical clustering algorithm . the points encountered in the frame readings are clustered in distinct ranges of depth . in one embodiment , these cluster ranges are not fixed in size , but are calculated based on performing a continuity analysis of the points over their z value ( depth ). in other words , the algorithm continues to include points within a cluster in increasing depth values as long as there is no discontinuity of more than a predetermined distance ( e . g ., 1 cm ) between two consecutive z values . the predetermined distance depends on the sensitivity of the image capture device 120 used . in method 600 , the set of data points sorted by z coordinate 555 are received . at 610 , for each z in the allowable z range for the set of data points sorted by z coordinates 555 , it is determined how z - z previous compares with a predetermined distance ( e . g ., 1 cm ). at 620 , it is determined whether z - z previous is less than the predetermined distance ( e . g ., 1 cm ). if the answer at 620 is yes , then method 600 proceeds to 625 , where data points at the z coordinate are added to the current cluster . if at 620 the answer is no , then method 600 proceeds to 630 , where the current cluster is saved . the saved current cluster is added to the set of clusters 635 . thereafter , the method resumes at 610 until all data points in the allowable z range ( i . e ., the workable z range ) for the set 555 have been tested for discontinuity and clustering . at the end of performing the comparisons at 610 for each z in the allowable z range , the last set of data in the current cluster 625 is at 615 saved as the last current cluster and added to the set of clusters 635 . thereafter method 600 continues at 640 . in one embodiment , the workable z range is 1 to 3 meters ( m ). in one embodiment , the workable z range is configurable by the user within the workable z range for the image capturing device used . in one such embodiment , if the workable z range is not configured by the user , the default workable z range for the image capturing device is used . for example , if the image capturing device is a kinect ® device , the default workable z range would be 80 centimeters ( cm ) to 4 m . in one embodiment , data points that fall outside of the workable z range will be discarded . in one embodiment , as part of the group z points process 560 ( shown in fig5 ), found data points or clusters will be evaluated against the workable z range and data points or clusters that fall outside the workable z range will be discarded . at 640 , edge analysis ( e . g ., convex hull algorithm ) is performed on the clusters in the set of clusters 635 . the edge analysis analyzes the data in the clusters to determine whether the cluster represents a convex feature . at 645 , a decision is made on whether the cluster is convex . if , based on the decision at 645 , it is determined that the cluster is not convex , then method 600 proceeds to the update set by removing process 650 . in other words , if the cluster is not convex , then it is removed from the set of clusters . if , based on the decision at 645 , it is determined that the cluster is convex , then method 600 proceeds to the check for hands process 655 . the check for hands process 655 determines whether the cluster represents a hand . at 660 , a decision is made whether the cluster represents a hand . if , based on the decision at 660 , it is determined that the cluster does not represent a hand , then the process proceeds to the update the set by removing process 650 . if , based on the decision at 660 , it is determined that the cluster does represent a hand , then the process returns to 640 to test the next cluster from the set of clusters 635 . at the end of testing all clusters in the set of clusters 635 for convexity and all convex clusters for being hands , the process proceeds to 665 . in other words , once all the clusters in the set of clusters 635 have been processed at 640 and all the applicable portions of method 600 that follow 640 , the clusters remaining in the set of clusters 635 are provided to the select at most two clusters at the center process 665 . the select at most two clusters at the center process 665 selects at most two clusters at the center of the frame from the set of clusters 635 . in one embodiment , center process 665 selects the two clusters that are closer to the center ( closest to zero for x and y values of each cluster &# 39 ; s center of gravity ). from 665 , the method 600 proceeds to the update the set by removing process 650 . the result of the update the set by removing process 650 is fed back to the set of clusters 635 , such that the set of clusters 635 reflects the updating performed by the update the set by removing process 650 . the final set of clusters 635 , after updating , would contain at most two clusters representing hands at the center of the frame . in one embodiment , if there are only two or less clusters in the set of clusters 635 , then neither edge analysis 640 nor select at most two clusters at the center 665 is performed . in an alternative embodiment , if there are only two or less clusters in the set of clusters 635 , then the select at most two clusters at the center 665 is not performed . however , edge analysis 640 and the remaining applicable portions of method 600 are performed to eliminate any cluster that does not represent a hand or a convex object . fig7 is a detailed flowchart of an embodiment of a method of determining the normalized hand rgb image frame shown in fig2 . the method 700 of determining the normalized hand rgb image begins at 705 , where the rgb frame corresponding to the depth image frame is located . in one embodiment , the rgb frames and depth image frames are time stamped . in such an embodiment , locating the rgb frame that corresponds to the depth image frame involves finding the rgb frame that is within an acceptable time frame of the corresponding depth image frame . the output of 705 is the rgb image frame 710 . the clip the rgb frame process 715 receives the rgb image frame 710 and its corresponding clipped depth image frame 720 . in one embodiment , the clipped depth image frame 720 is the selected hand clusters 535 ( shown in fig5 ), which is a depth image frame output by the clip image process 530 ( shown in fig5 ). the clip the rgb frame process 715 clips the rgb image frame 710 based on the information ( the x and y coordinates ) in the clipped depth image frame 720 such that the clipped rgb frame corresponds to the clipped depth image frame 720 . in other words , the rgb image frame 710 is clipped such that it also fits within a predetermined frame . more specifically , the rgb image frame 710 is clipped such that the clipped rgb image frame contains primarily an image of a hand . in one embodiment , this is done separately for each hand in the rgb image frame 710 . as a result , there may be more than one clipped rgb image frame that is output by the clip rgb image frame process 715 and is processed by other parts of method 700 . from the clip the rgb frame process 715 , the method 700 proceeds to the evaluate for posture process 725 . the evaluate for posture process 725 also receives the clipped depth image frame 720 . in one embodiment , the evaluate for posture process 725 computes the aspect ratio ( i . e ., width divided by height ) of the selected cluster against pre - defined range of expectations to estimate what posture the hand might have ( e . g ., whether it is facing flat towards the camera , somewhat orthogonal to camera , curled flat , curled orthogonal , or slanted ). in the above - described coordinate system , the width would be along the y coordinate , whereas the height would be in the x coordinate . in one embodiment , the evaluate for posture process 725 is not computationally heavy , since it is expected to generate only hints . in one embodiment , computation of aspect ratios is done for each of the x , y , and z planes of a 3d coordinate system . the x plane refers to a plane defined by the y and z axes or a plane parallel to a plane defined by the y and z axes . the y plane refers to a plane defined by the x and z axes or a plane parallel to a plane defined by the x and z axes . the z plane refers to a plane defined by the x and y axes or a plane parallel to a plane defined by the x and y axes . the x , y , and z axes refer to the x , y , and z axes in the above - mentioned 3d coordinate system . in one embodiment , the rough estimate from the evaluate for posture process 725 is used to determine the palm plane , i . e ., the plane defined by the palm of the hand . from the evaluate for posture process 725 , the method 700 proceeds to the construct the palm plane process 730 . in one embodiment , using z readings data collected earlier ( i . e ., the depth readings ) and the hint generated in the evaluate for posture process 725 , a plane is constructed by using the ordered set of z coordinate values encountered . the hint generated in the evaluate for posture process 725 is used to select the algorithm to apply to construct the plane . the difference among the algorithms is in how they start to place the center of mass within the cluster . for example , an open hand facing towards the camera ( i . e ., parallel to the lens plane and perpendicular to the floor plane ) will put less emphasis on the z coordinate in calculating the center of mass . on the other hand , a hand posture that is orthogonal to the lens plane will use the z coordinate with the most emphasis in calculating the center of mass . the algorithm will then use the coordinate ( or coordinates ) with less emphasis for posture hint to perform ray analysis by extending from the calculated center of mass to the edges of the cluster . circular representation of calculated rays will help determine the palm plane . it is to be noted that in one embodiment , the afore - mentioned generated hint is used to reduce the complexity of the calculations necessary for processing data . since it takes more time to calculate the center of mass for a true 3d shape than for a simplified 3d shape with negligible “ thickness ,” the hint allows for more quickly determining which dimension of 3d shape can safely be assumed to have negligible “ thickness .” with the benefit of the hint , the center of mass can be calculated more quickly . the center of mass represents the simplified location point for the structure of interest , e . g ., the detected palm of the hand . in one embodiment , each captured 3d cluster that represents a hand is reduced into its respective surface representation . in one embodiment , this can be done by detecting the edges of the 3d cluster . there are a number of well - known algorithms for detecting edges , such as contour tracking , opaque cubes , marching cubes , dividing cubes , marching tetrahedra . for example , the marching cubes algorithm starts to dissect the shape into unit cubes and analyzes the cubes that do not entirely contain the shape , since these cubes carry edge information for the shape . there are 8 vertices in a cube , therefore 2 8 ( i . e ., 256 ) possible ways that these vertices may come into play at the surface . in some cases , these 256 possible ways can further be reduced to 15 due to the fact that some possibilities are symmetric with each other . as a result , the surface information can be indexed into 15 different encodings that provide the surface representation of the 3d shape . the hints are also useful in locating the x , y , and z planes from the surface data . the x , y , and z planes , in turn , supply a visual cue for applying the transformations needed for orientating the image of the hand as desired . from the construct the palm plane process 730 , the method 700 proceeds to the apply transformations process 735 . in the apply transformations process 735 , the palm plane will be rotated and / or tilted as required to achieve the desired orientation . in one embodiment , in the desired orientation , palm plane will be ( 1 ) parallel to the lens plane ( which is described above ) and ( 2 ) perpendicular to the floor plane ( which is described above ), with the palm facing the lens plane and directed vertically upwards . in one embodiment , based on the orientation of the palm plane determined in the construct the palm plane process 730 , the angles ax , ay and az by which the palm plane is to be rotated or tilted about the x , y and z coordinates , respectively , in order for the palm plane to be in the above - described desired orientation will be determined . the angles ax , ay and az are used , in the apply transformation process 735 , to determine how the palm plane should be transformed ( e . g ., rotated or tilted ) with respect to the x , y , and z coordinates , respectively , such that the transformed palm plane will be ( 1 ) parallel to the lens plane ( which is described above ) and ( 2 ) perpendicular to the floor plane ( which is described above ), with the palm facing the lens plane and directed vertically upwards . in one embodiment , the angle ax determines the degree to which the palm plane will be rotated about the x coordinate in the x plane . the angle ay determines the degree to which the palm plane will be rotated about the y coordinate in the y plane . the angle az will determine the degree to which the palm plane will be rotated about the z coordinate in the z plane . from the apply transformations process 735 , the method 700 proceeds to the resize process 740 ( which may also herein be referred to as the scaling process 740 ). the transformed image output by the apply transformations process 735 is compared against a predetermined size range . if the transformed image fits within the range , the transformed image is not resized . on the other hand , if the transformed image does not fit within the predetermined size range , a scaling factor is calculated against the mean of the predetermined size range and the transformed image is resized accordingly so as to fit within the predetermined size range . the output of the resize process 740 is the normalized hand rgb image frame 240 , which is to be used to find topological features of the hand . fig8 is a detailed flowchart of an embodiment of a method of the finger detection process shown in fig2 . method 280 of determining hand features information generally involves applying graph walking techniques to the topology of the hand output by the neural gas network process 270 . graph walking essentially involves going from node to node in the hand mesh 275 and is used to help locate and label features of the hand . graph walking or walking the graph may also herein be referred to as analyzing the hand mesh 275 . in addition to the hand mesh 275 , method 280 also has access to data generated during processing depth image scanning ( e . g ., original and processed 3d data ). in method 280 , the locate nodes with single edges routine 810 receives the hand mesh 275 ( shown in fig2 ) output by the neural gas network 270 ( also shown in fig2 ). the locate nodes with single edges routine 810 analyzes the hand mesh 275 and finds distinct nodes ( in hand mesh 275 ) that have only one edge , where an edge refers to a connection between two nodes , as in the context of graph theory . as used herein , a distinct node refers to a node that shares the same edge with no more than one other node in the hand mesh 275 . for each distinct node , locate nodes with single edges routine 810 traces the edge of the distinct node to the next connected node . this next connected node is expected to have only one other edge in addition to the edge is shares with the distinct node . in the case of fully extended fingers , at least three distinct nodes connected in series should be encountered . the above process is repeated for the next node until encountering a node that has more than two edges . an ordered list of x and y coordinate readings for each node with a single edge is created . strings of such nodes are marked as potential fingers . each node that is connected to only one other node represents a potential fingertip . at 815 , it is determined whether there are five or fewer potential fingertips identified for a hand . if the answer at 815 is no , then the process continues at 820 . at 820 , nodes that are not fingertips are removed from the potential list of fingertips . in one embodiment , if more than five potential fingers are identified , the mean value for the y coordinate is determined for the more than five potential fingers . thereafter , the five potential finger representations that are clustered together around this mean value with respect to the y coordinate reading will be selected . the remaining potential finger representations will be discarded . from 820 , process 280 continues at 825 . if the answer at 815 is yes , i . e ., there are five or fewer potential fingers , the process continues at 825 . at 825 , the hand mesh 275 ( or node graph ) is walked to find or locate knuckles and finger bases of the hand . at 830 , the hand mesh 275 is walked to locate the palm of the hand . in one embodiment , the node that has the maximum number of edges is indicated as the palm of the hand . in case more than one such node is encountered , the one closest to the mean y coordinate ( i . e ., the mean value with respect to the y coordinate for the hand mesh 275 ) is picked and labeled as the palm . at 835 , the hand mesh 275 is walked to locate the base of the hand . in fig8 , steps 825 , 830 , and 835 are shown as occurring in series . in another embodiment , steps 825 , 830 , and 835 are performed in parallel . from steps 825 , 830 , and 835 , the process continues at 840 . at 840 , the hand and finger parts are labeled . for example , a hand is labeled as a right hand or a left hand and a finger is labeled as an index finger . in one embodiment , for each finger , the length , the orientation , and the posture ( whether it is straight , or curled or forming an arc ) are calculated . from these calculations , labels are assigned to each finger indicating the type of finger ( e . g ., index finger ). the output of the label hand and finger part 840 is hand features information in 2d 845 ( where the coordinates for the hand features are provided in 2d ). in one embodiment , hand features information in 2d 845 is a data structure that labels each hand , each finger , and the palm of the hand . in one embodiment , each finger is represented by an ordered list of 3d coordinates where the first item in the list refers to the fingertip and the last item indicates the base . although the list items have reference to 3d coordinates , at the end of this stage only 2d coordinate readings will be populated . the data structure will also contain posture information for each finger which will mark if there is indeed a fingertip or not , or how much the finger is curled based on how many items the finger list contains . the pose information affects the way the first item in the list is interpreted . for example , if the pose is extended , then the first item is indeed a fingertip . as another example , if there is only one item in the list , then it is the base knuckle . in one embodiment , the hand features information in 2d 845 is subjected to further processing , where the depth information is added from the original readings ( before the resize was applied ) and the x and y coordinates are converted to their original readings before the transformation to normalize tilting was applied . in other words , the 2d data is mapped to 3d as in step 285 ( shown in fig2 ). as used herein , specific sizes or ranges are intended to include approximations of those sizes or ranges . for example , 100 milliseconds and 1 m are respectively intended to include approximately 100 milliseconds and approximately 1 m . also , for example , 1 to 3 m is intended to include approximately 1 m to approximately 3 m . while the present invention has been particularly described with respect to the illustrated embodiments , it will be appreciated that various alterations , modifications and adaptations may be made based on the present disclosure , and are intended to be within the scope of the present invention . while the invention has been described in connection with what are presently considered to be the most practical and preferred embodiments , it is to be understood that the present invention is not limited to the disclosed embodiments but , on the contrary , is intended to cover various modifications and equivalent arrangements included within the scope of the appended claims .