Abstract:
A method for color conversion includes calculating distances between color coordinates in a conversion palette and a color coordinate for a pixel and assigning the pixel a color coordinate of the closest color coordinates in the conversion palette. The color coordinates in the conversion palette include a first point and a second point in an RGB color cube on a neutral axis of said RGB color cube and on opposite surfaces of a first sphere, a third point and a fourth point on the neutral axis and on opposite surfaces of a second sphere and on the neutral axis, and a plurality of other points distributed over a surface of the first sphere and around the neutral axis, where a volume of the second sphere is twice the volume of the first sphere, and a center of the first and second spheres is a center of the RGB color cube.

Description:
FIELD OF THE INVENTION 
       [0001]    The present invention is related to the field of color conversion and more particularly, to systems and methods for converting images using RGB color palettes. 
       BACKGROUND OF THE INVENTION 
       [0002]    In general, when images are presented on a display or stored in a memory element of a computing device, the total number of colors used for the image may be reduced to account for display device, the processing device, the memory element, or transmission limitations. Typically, this is accomplished by converting the color of each pixel in an image to one of a limited number of colors. Generally this limited number of colors is referred to as a palette. Any number of colors can be included in a palette, but generally the number of colors in a palette is limited to a subset of all possible colors. However, color conversion of some images using such palettes, can result in converted images that are unrealistically colored or aesthetically displeasing. 
       SUMMARY OF THE INVENTION 
       [0003]    This Summary is provided to comply with 37 C.F.R. §1.73, requiring a summary of the invention briefly indicating the nature and substance of the invention. It is submitted with the understanding that it will not be used with to interpret or limit the scope or meaning of the claims. 
         [0004]    In a first embodiment of the invention, a method for color conversion in RGB color space includes calculating a distance between each one of a plurality of color coordinates in a conversion palette and a color coordinate for a pixel in an image and assigning a new color coordinate to the pixel. The new color coordinate comprises a closest one of the plurality of color coordinates in the conversion palette, where the plurality of color coordinates in the conversion palette includes a first point and a second point on a neutral axis of an RGB color cube and on opposite surfaces of a first sphere, a third point and a fourth point on the neutral axis of the RGB color cube and on opposite surfaces of a second sphere, and a plurality of other points evenly distributed over a surface of the first sphere and symmetrically distributed around the neutral axis, where a volume of the second sphere is twice the volume of the first sphere, and where a center of the first sphere and a center of the second sphere is a center of the RGB color cube. 
         [0005]    In a second embodiment of the invention, a system for color conversion includes a mass storage element for storing a conversion palette, where the conversion palette comprises a plurality of colors in RGB color space. The plurality of color coordinates in the conversion palette includes a first point and a second point on a neutral axis of an RGB color cube and on opposite surfaces of a first sphere, a third point and a fourth point on the neutral axis of the RGB color cube and on opposite surfaces of a second sphere, and a plurality of other points evenly distributed over a surface of the first sphere and symmetrically distributed around the neutral axis, where a volume of the second sphere is twice the volume of the first sphere, and where a center of the first sphere and a center of the second sphere is a center of the RGB color cube. The system also includes a processing element for assigning a new color coordinate to a pixel in an image from the plurality of colors in the conversion palette, where the new color coordinate comprises one of the plurality of color coordinates in the conversion palette closest in the RGB color space to an original color coordinate for the pixel. 
         [0006]    In a third embodiment of the invention, a computer-readable storage medium is provided, having stored thereon, a computer program having a plurality of code sections, the code sections executable by a computer for causing the computer to perform the steps of calculating a distance in RGB color space between each one of a plurality of color coordinates in a conversion palette and a color coordinate for a pixel in an image and assigning a new color coordinate to the pixel, where the new color coordinate comprises a closest one of the plurality of color coordinates in the conversion palette. The plurality of color coordinates in the conversion palette includes a first point and a second point on a neutral axis of an RGB color cube and on opposite surfaces of a first sphere, a third point and a fourth point on the neutral axis of the RGB color cube and on opposite surfaces of a second sphere, and a plurality of other points evenly distributed over a surface of the first sphere and symmetrically distributed around the neutral axis, where a volume of the second sphere is twice the volume of the first sphere, and where a center of the first sphere and a center of the second sphere is a center of the RGB color cube. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0007]      FIG. 1  is a schematic view of an RGB color cube for defining a color palette in RGB space according to an embodiment of the present invention. 
           [0008]      FIG. 2  is a schematic view of an exemplary arrangement for determining color coordinates in a conversion palette according to an embodiment of the present invention. 
           [0009]      FIG. 3  is a schematic view of an exemplary arrangement of non-neutral color coordinates in an RGB color cube according to an embodiment of the present invention. 
           [0010]      FIG. 4  is a flowchart of exemplary steps of a method for color conversion according to an embodiment of the present invention. 
           [0011]      FIG. 5  is a schematic view of a computer system within which a set of instructions operate according to an embodiment of the invention. 
       
    
    
     DETAILED DESCRIPTION 
       [0012]    The present invention is described with reference to the attached figures, wherein like reference numerals are used throughout the figures to designate similar or equivalent elements. The figures are not drawn to scale and are provided merely to illustrate the instant invention. Several aspects of the invention are described below with reference to example applications for illustration. It should be understood that numerous specific details, relationships, and methods are set forth to provide a full understanding of the invention. One having ordinary skill in the relevant arts, however, will readily recognize that the invention can be practiced without one or more of the specific details or with other methods. In other instances, well-known structures or operations are not shown in detail to avoid obscuring the invention. The present invention is not limited by the illustrated ordering of acts or events, as some acts may occur in different orders and/or concurrently with other acts or events. Furthermore, not all illustrated acts or events are required to implement a methodology in accordance with the present invention. 
         [0013]      FIG. 1  depicts an RGB color cube  100 . As commonly used in the art, an RGB color cube  100  is used to provide a mapping scheme to represent RGB color space as a three-dimensional (3D) space. Each coordinate axis R, G, B for the color cube  100  represents values of red, green, or blue, i.e. the primary colors in an RGB color space. Furthermore, because colors in the RGB color space are based on the addition of intensities of red, green, and blue, the colors act like vectors. That is, primary colors can be combined by addition and subtraction to obtain all the other colors in the RGB color cube  100 . 
         [0014]    Thus, as shown in  FIG. 1 , the origin BLK of the cube  100  represents black, or the total absence of color. The far corner W of the cube  100  from the origin is the sum of the highest intensities of red, green, and blue. This produces the color white at the far corner W, as shown in  FIG. 1 . The other corners of the cube C, M, Y represent the various secondary colors. In RGB color space, as previously described, the primary colors include red, green, and blue. The combination of any two of these primary colors results in the secondary colors in the RGB color space, cyan (C), magenta (M), and yellow (Y), the other corners of the color cube  100 . 
         [0015]    The main diagonal or neutral axis  102  of the RGB cube  100  is illustrated as a line drawn between the origin BLK and far corner W. This line represents all the colors in the RGB cube that include equal intensities of red, green, and blue. Thus, all the points on the neutral axis  102  include all possible shades of gray, ranging from black to white. Consequently, the closer a color coordinate on the neutral axis  102  is to the origin BLK of the cube  100 , the darker the gray. Similarly, the closer the color coordinate on the neutral axis  102  is to the far corner W, the lighter the gray. 
         [0016]    Therefore, using a coordinate system for the RGB color cube bounded by (0, 0, 0) and (255, 255, 255), it is generally possible to define over 1.6 million colors in the RGB color space using coordinates (n, n, n), wherein n=0, 1, 2, . . . 255. Generally, this number of colors is sufficient to display a realistically colored image to the human eye using a computer display. However, in some instances, it is not desirable or possible to define such a large number of colors. For example, a computing system can have a limited amount of resources to display or store the image. As generally known in the art, an increased number of colors results in an increased amount of data that needs to be stored and processed for storing and displaying the image. Additionally, the increased amount of data imposes a larger bandwidth requirement for transmitting the image in a timely fashion. As a result, the number of colors in some applications needs to be reduced in order to reduce display, storage, and/or bandwidth requirements. 
         [0017]    One method of reducing the number of colors in images is to reduce the number of coordinates to be used in the RGB color cube by using an indexed color conversion palette that defines a subset of all possible colors to be used in coloring an image. Although a color conversion palette that includes hundreds of colors can still provide a pleasing image to the human eye, as the number of colors is further reduced, a converted image can appear aesthetically unpleasing or be unrealistically colored. 
         [0018]    However, typical methods for generating a color conversion palette provide unsatisfactory results, especially in the case of photographic images. For example, if the color coordinates for the conversion palette are limited to those defined by (85n, 85n, 85n), where n=0, 1, 2, or 3, the conversion palette still spans the entire RGB color space, but defines only a total of 64 colors. In another example, if the color coordinates for the conversion palette are limited to those defined by (255n, 255n, 255n), where n=0 or 1, the conversion palette still spans the entire RGB color space, but defines only a total of 16 colors. This enables the amount of memory needed in the index for storing color information for a single pixel to be reduced from 24 bits to 6 or 4 bits. However, this type of conversion method that limits the total number of colors by limiting color coordinates generally provides unrealistic or aesthetically displeasing coloring. As a result, such methods are typically limited to applications in which it is not necessary to render realistic-looking images. 
         [0019]    In the embodiments of the invention, alternate methods for selecting the color coordinates in the RGB cube  100  to include in an RGB conversion palette are provided. In particular, the present invention provides for selection of colors based on a mathematical relationship to the center  108  of the RGB color cube  100 . 
         [0020]    The center  108  of the RGB color cube  100  lies upon the cube diagonal  102 . As previously described, the cube diagonal  102  is comprised of all the possible shades of gray, that is, the neutral colors. Therefore, at the center  108 , the intensities of red, green, and blue are not only equal to each other, but also the brightness of the colors lies between a minimum amount (BLK) and a maximum amount (W). Thus, one aspect of the invention is a color conversion palette that includes color coordinates selected based on a common mathematical relationship to the center  108  of the color cube  100 , which can provide an improved color conversion palette. Another aspect is that the color conversion palette of the present invention can provide images that are typically more realistic and/or aesthetically pleasing. 
         [0021]    In embodiments of the invention, color coordinates for the color conversion palette can be selected from color coordinates in the RGB color cube  100  lying on the surfaces of one or more spheres  104 ,  106  projecting from the center  108  of the RGB cube  100 . By selecting color coordinates on the surface of a sphere projected in the RGB color cube  100 , differences in hue, brightness, and saturation between the colors on the surface of the sphere can provide a more accurate color conversion than is achieved with color coordinates selected using conventional methods. 
         [0022]    Accordingly, such a selection method can be used to define a color conversion palette including color coordinates for a light gray color, a dark gray color, a white color, a black color, and non-neutral colors. In some embodiments, pure white or black is not provided in the color conversion palette. Rather, the color is approximated using a nearby color coordinate to preserve the mathematical relationship between the color coordinates in the conversion palette. Furthermore, the color coordinates for non-neutral colors can be selected from color coordinates evenly distributed over the surface of the sphere  104  and symmetrically about the neutral axis  102 . 
         [0023]    In an exemplary embodiment, in order to provide white, black, and grey colors, the color coordinates to be included in the conversion palette can be selected from the intersections of the neutral axis  102  with the surface of a small sphere  104  and a larger sphere  106  projecting from the cube center  108 . For example, the intersections of a smaller sphere  104  with neutral axis  102  can be used to define a dark gray color and a light gray color. Thus, a color coordinate for a dark gray color can be defined by the intersection  110  closest to the origin BLK of the cube  100  and a color coordinate for a light gray color can be defined by the intersection  112  farthest from the origin BLK of the color cube  100 . Similarly, a sphere  106  having a larger radius than sphere  104  can be used to define black and white. Thus, color coordinates for black can be defined by the intersection  114  closest to the origin BLK of the cube  100  and a color coordinate for white can be defined by the intersection  116  farthest from the origin BLK of the cube  100 . Although the difference between the radii of the spheres can vary, as the difference between the spheres  104 ,  106  is increased, the greater the contrast will be between the resulting colors defined as dark grey and light grey and the resulting colors defined as black and white, respectively. In one embodiment of the present invention, the larger sphere  106  encloses a volume twice that of the small sphere  104  and provides sufficient contrast. 
         [0024]    Further, in order to provide color coordinates for non-neutral colors, the color coordinates to be included in the conversion palette can be selected from other points on the surface of the spheres  104 ,  106  within the RGB color cube  100 . In certain embodiments, the non-neutral color coordinates can be selected from any number of points evenly distributed over the surface of the spheres  104 ,  106  and symmetrically distributed around the neutral axis  102 . For example, the color coordinates selected for the conversion palette can be selected from a grid of evenly spaced points projected along a surface of the sphere  104 . However, the color coordinates can also be selected based on a mathematical relationship between the color coordinates and the center  108  of the color cube  100 . 
         [0025]    In accordance with the present invention, one possible mathematical relationship for defining the color coordinates for non-neutral colors can be based on the vertices of a symmetric polyhedron. Therefore, by example and not by way of limitation, the color coordinates can be defined by the vertices of symmetric polyhedrons such as a cube, an octahedron, a dodecahedron, or an icosahedron. As commonly known in the art, the spatial relationship between the vertices of a symmetric polyhedron provides for an even distribution of points over the surface of a sphere and about one or more axes of symmetry. Therefore, such a polyhedron can be used to define the color coordinates on the surface of a sphere and still provide a symmetric and even arrangement of color coordinates about the neutral axis  102 . 
         [0026]      FIG. 2  depicts an exemplary embodiment of the present invention in which a polyhedron, an icosahedron, can be used to define the color coordinates for non-neutral colors according to the present invention. As shown in  FIG. 2 , the vertices of an icosahedron can define a 4 bit color conversion palette (16 colors). As previously described, dark grey [8], light grey [7], black [0], and white [15] color coordinates can be defined by the intersection of the neutral axis  102  with the spheres  104 ,  106  projecting from the center  108  of the cube  100 . The color coordinates for the remaining twelve (12) non-neutral colors, [1]-[6] and [9]-[14], can be defined by the twelve (12) vertices of the icosahedron, where the neutral axis  102  defines the axis of symmetry for the icosahedron. 
         [0027]    As previously described, the sphere  104  can have a radius of any size. However, as the size of the sphere  104  is reduced, the differences between the color coordinates in the conversion palette are reduced and the contrast between the resulting colors is also reduced. Therefore, one method of increasing contrast between colors is to position the polyhedron so that the number of vertices intersecting the sides or edges of the RGB cube  100  is maximized. Accordingly, the mathematical relationship between the vertices can be defined in terms of the golden ratio, ( 2 √5+1)/2, scaled for the RGB cube  100 . Accordingly, the vertices can define the sphere  104  which can be used with the neutral axis  102  to define color coordinates for intersections  110 ,  112  defining dark gray and light gray color coordinates. As previously described, the sphere  106  can have a volume twice that of sphere  104  and can be used with the cube diagonal  102  to define color coordinates for intersections  114 ,  116  defining black and white color coordinates. As a result, the color coordinates for the 16 colors, as shown in  FIG. 2 , can be mathematically related to the center of the color cube  100 , as shown in Table 1. 
         [0000]    
       
         
               
             
               
               
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Color coordinates for 4 bit color conversion palette using icosahedron 
               
             
          
           
               
                 Id 
                 Color 
                 Red Coordinate 
                 Green Coordinate 
                 Blue Coordinate 
               
               
                   
               
               
                 [0] 
                 Black 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
               
               
                 [1] 
                 Dark Red (DR) 
                 256/2 
                  0 
                 256/2[1 − {acute over (φ)}] 
               
               
                 [2] 
                 Dark Green (DG) 
                 256/2[1 − {acute over (φ)}] 
                 256/2 
                  0 
               
               
                 [3] 
                 Dark Yellow (DY) 
                 256/2[1 + {acute over (φ)}] 
                 256/2 
                  0 
               
               
                 [4] 
                 Dark Blue (DB) 
                  0 
                 256/2[1 − {acute over (φ)}] 
                 256/2 
               
               
                 [5] 
                 Dark Magenta (DM) 
                 256/2 
                  0 
                 256/2[1 + {acute over (φ)}] 
               
               
                 [6] 
                 Dark Cyan (DC) 
                  0 
                 256/2[1 + {acute over (φ)}] 
                 256/2 
               
               
                 [7] 
                 Light Gray (LG) 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
               
               
                 [8] 
                 Dark Gray (DG) 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
                 256/2[1 − ( 2 √(2 − {acute over (φ)})/ 2 √3)] 
               
               
                 [9] 
                 Light Red (LR) 
                 256 
                 256/2[1 − {acute over (φ)}] 
                 256/2 
               
               
                 [10]  
                 Light Green (LG) 
                 256/2 
                 256 
                 256/2[1 − {acute over (φ)}] 
               
               
                 [11]  
                 Light Yellow (LY) 
                 256 
                 256/2[1 + {acute over (φ)}] 
                 256/2 
               
               
                 [12]  
                 Light Blue (LB) 
                 256/2[1 − {acute over (φ)}] 
                 256/2 
                 256 
               
               
                 [13]  
                 Light Magenta (LM) 
                 256/2[1 + {acute over (φ)}] 
                 256/2 
                 256 
               
               
                 [14]  
                 Light Cyan (LC) 
                 256/2 
                 256 
                 256/2[1 + {acute over (φ)}] 
               
               
                 [15]  
                 White 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
                 256/2[1 + ( 2 √(2 − {acute over (φ)})* 3 √2/ 2 √3)] 
               
               
                   
               
             
          
         
       
     
         [0028]    Where: 
         [0029]    ø=( 2 √5+1)/2 (Golden ratio) 
         [0030]    {acute over (ø)}=( 2 √5−1)/2 
         [0031]    ø*{acute over (ø)}=[( 2 √5+1)/2]*[( 2 √5−1)/2]=1 
         [0032]    ø−{acute over (ø)}=[( 2 √5+1)/2]−[( 2 √5−1)/2]= 1   
         [0033]    ø−1={acute over (ø)} 
         [0034]    {acute over (ø)} 2 +1={acute over (ø)}*{acute over (ø)}+1={acute over (ø)}(ø−1)+1={acute over (ø)}*ø−{acute over (ø)}+1=1−{acute over (ø)}+1=2−{acute over (ø)}(Radius Squared) 
         [0035]    For the coordinates in Table 1, the  2 √3 divisor generates projections of cube diagonal onto the R, G or B coordinate axes. Similarly, the  3 √2 multiplier defines coordinates on sphere  106  having double the volume of sphere  104 . Accordingly, the color coordinates in Table 1 can result in the non-neutral colors defining the golden rectangles of the icosahedron within the RGB color cube  100 , as shown in  FIG. 3 . However, the present invention is not limited to using an icosahedron or other symmetric polyhedrons and any other arrangement of points on the sphere  104  and symmetric about the neutral axis can be used to define the color coordinates for non-neutral colors in the conversion palette. 
         [0036]      FIG. 4  is a flowchart illustrating steps in an exemplary method  400  for color conversion using a color conversion palette in accordance with an embodiment of the present invention. Method  400  beings with step  402  in which the color coordinate for the pixel in an image is retrieved. Any type of image can be converted using method  400 , including drawings, illustrations, or photographs. Additionally, method  400  can also be applied to one or more frames of a film or video. The color coordinates for the pixel can be stored in either local or remote locations, depending on the application. Referring still to  FIG. 4 , once the color coordinate for a pixel is retrieved in step  402 , the color coordinates stored in the color conversion palette can be accessed in step  404 . In various embodiments of the present invention, the color conversion palette may be accessed from a specific location, remote or local, in a memory element. The location can then be accessed as needed during execution of the method  400 . In some embodiments, the color coordinates can be accessed and stored in an active memory of the application, allowing direct and faster access to the memory location. 
         [0037]    Regardless of the storage location of the color coordinates in the palette, in step  406  the distance in RGB color space between the color coordinates of the pixel and each of the color coordinates in the color conversion palette can be calculated. After performing the calculations in step  406 , the pixel is assigned a new color coordinate in step  408 , the new color coordinate corresponding to the closest color coordinate in the conversion palette. Subsequently, if other pixels in the image still need to be converted in step  410 , steps  402 - 408  can be repeated until color coordinates for all pixels in the image have been converted to one of the color coordinates in the color conversion palette. Once all pixels have been converted in step  410 , the image can be stored, transmitted, or displayed in step  412 . 
         [0038]    In some cases, a color coordinate of a pixel can be equidistant from two or more color coordinates in the color conversion palette. Thus, additional steps can be provided before assigning a new color coordinate to a pixel in step  408 . For example, if the calculations from step  406  show in step  414  that two color coordinates in the conversion palette are closest to the color coordinate of the pixel, the method  400  in step  416  can assign a color coordinate randomly from these two closest color coordinates. The method can then continue for the remaining pixels, as previously described. 
         [0039]    However, instead of assigning color coordinates randomly to such pixels, the color coordinate of surrounding or adjacent pixels can be considered in assigning a color from the conversion palette. For example, in step  418 , the method  400  can compare the current and an adjacent converted pixel in an image. If the color coordinate for the adjacent pixel is one of the color coordinates found in step  414 , then in step  420 , the pixel can be assigned the same color coordinate as the adjacent pixel. Otherwise, the pixel can be assigned one of the closest color coordinates at random in step  416 . The method  400  can then be repeated for the remaining pixels, as previously described. 
         [0040]    In some embodiments, random or ordered dithering methods can be applied to the converted image to further improve the aesthetic quality of the converted image. For example, Referring still to  FIG. 4 , once it is determined that all pixels in the image have been converted to one of the colors defined in the conversion palette in step  410 , the method  400  can locate in step  422  adjacent groupings of pixels in the image assigned different color coordinates. Once such groupings are located in step  422 , the method  400  in step  424  can apply a dithering algorithm to at least a portion of the image to determine if a dithering pattern needs to applied to one or more regions of pixels or if no pattern should be applied. The dithering algorithm can be configured to make this determination based on the original image, the converted image, or any combination thereof. 
         [0041]    Once the dithering algorithm has analyzed the image in step  424 , the method  400  in step  426  can adjust color coordinates according to the dithering algorithm. According to the present invention, any type of dithering pattern can be used. By way of example and not by way of limitation, dithering patterns can include average, ordered, random, Albie, Floyd-Steinberg, Jarvis, Atkinson, or Riemersma dithering patterns. Once the color coordinates for the pixels are adjusted in step  426  according to the dithering algorithm, the color conversion is complete and the converted image can then be stored, transmitted or displayed according to the application in step  412 . 
         [0042]    Other modifications to the invention as described above are within the scope of the claimed invention. For example, prior to converting the image using the color conversion palette, the brightness or contrast of the image can be increased or decreased, adjusting the distribution of the original color coordinates for the pixels in RGB color space. In another example, when a grouping of pixels is determined to be equidistant in RGB color space from two or more color coordinates, a dithering pattern can be applied to the grouping. In yet another example, application of a dithering algorithm can be done in parallel with the color conversion. These are but a few examples of modifications that can be applied to the present disclosure without departing from the scope of the claims stated below. Accordingly, the reader is directed to the claims section for a fuller understanding of the breadth and scope of the present disclosure. 
         [0043]      FIG. 5  is a schematic diagram of a computer system  500  for executing a set of instructions that, when executed, can cause the computer system to perform any one or more of the methodologies and procedures described above. In some embodiments, the computer system  500  opera tes as a standalone device. In some embodiments, the computer system  500  can be connected (e.g., using a network) to other computing devices. In a networked deployment, the computer system  500  can operate in the capacity of a server or a client user machine in server-client user network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. 
         [0044]    The machine can comprise a server computer, a client user computer, a personal computer (PC), a tablet PC, a laptop computer, a desktop computer, a control system, a network router, switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. It will be understood that a device of the present disclosure includes broadly any electronic device that provides voice, video or data communication. Further, while a single computer is illustrated, the phrase “computer system” shall be understood to include any collection of computing devices that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methodologies discussed herein. 
         [0045]    The computer system  500  can include a processor  502  (e.g., a central processing unit (CPU), a graphics processing unit (GPU, or both), a main memory  504  and a static memory  506 , which communicate with each other via a bus  508 . The computer system  500  can further include a display unit  510  such as a video display (e.g., a liquid crystal display or LCD), a flat panel, a solid state display, or a cathode ray tube (CRT)). The computer system  500  can include an input device  512  (e.g., a keyboard), a cursor control device  514  (e.g., a mouse), a disk drive unit  516 , a signal generation device  518  (e.g., a speaker or remote control) and a network interface device  520 . 
         [0046]    The disk drive unit  516  can include a computer-readable storage medium  522  on which is stored one or more sets of instructions  524  (e.g., software code) configured to implement one or more of the methodologies, procedures, or functions described herein, including those methods illustrated above. The instructions  524  can also reside, completely or at least partially, within the main memory  504 , the static memory  506 , and/or within the processor  502  during execution thereof by the computer system  500 . The main memory  504  and the processor  502  also can constitute machine-readable media. 
         [0047]    Dedicated hardware implementations including, but not limited to, application-specific integrated circuits, programmable logic arrays and other hardware devices can likewise be constructed to implement the methods described herein. Applications that can include the apparatus and systems of various embodiments broadly include a variety of electronic and computer systems. Some embodiments implement functions in two or more specific interconnected hardware modules or devices with related control and data signals communicated between and through the modules, or as portions of an application-specific integrated circuit. Thus, the example system is applicable to software, firmware, and hardware implementations. 
         [0048]    In accordance with various embodiments of the present disclosure, the methods described herein can be stored as software programs in a computer-readable storage medium and can be configured for running on a computer processor. Furthermore, software implementations can include, but not limited to, distributed processing or component/object distributed processing, parallel processing, or virtual machine processing can also be constructed to implement the methods described herein. 
         [0049]    The present disclosure contemplates a computer-readable storage medium containing instructions  524 , or that which receives and executes instructions  524  from a propagated signal so that a device connected to a network environment  526  can send or receive voice, video or data, and to communicate over the network  526  using the instructions  524 . The instructions  524  can further be transmitted or received over a network  526  via the network interface device  520 . 
         [0050]    While the computer-readable storage medium  522  is shown in an example embodiment to be a single storage medium, the term “video-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. The term “computer-readable medium” shall also be taken to include any medium that is capable of storing, encoding or carrying a set of instructions for execution by the machine and that cause the machine to perform any one or more of the methodologies of the present disclosure. 
         [0051]    The term “computer-readable medium” shall accordingly be taken to include, but not be limited to, solid-state memories such as a memory card or other package that houses one or more read-only (non-volatile) memories, random access memories, or other re-writable (volatile) memories; magneto-optical or optical medium such as a disk or tape; and carrier wave signals such as a signal embodying computer instructions in a transmission medium; and/or a digital file attachment to e-mail or other self-contained information archive or set of archives considered to be a distribution medium equivalent to a tangible storage medium. Accordingly, the disclosure is considered to include any one or more of a computer-readable medium or a distribution medium, as listed herein and including art-recognized equivalents and successor media, in which the software implementations herein are stored. 
         [0052]    Although the present specification describes components and functions implemented in the embodiments with reference to particular standards and protocols, the disclosure is not limited to such standards and protocols. Each of the standards for Internet and other packet switched network transmission (e.g., TCP/IP, UDP/IP, HTML, and HTTP) represent examples of the state of the art. Such standards are periodically superseded by faster or more efficient equivalents having essentially the same functions. Accordingly, replacement standards and protocols having the same functions are considered equivalents. 
         [0053]    The illustrations of embodiments described herein are intended to provide a general understanding of the structure of various embodiments, and they are not intended to serve as a complete description of all the elements and features of apparatus and systems that might make use of the structures described herein. Many other embodiments will be apparent to those of skill in the art upon reviewing the above description. Other embodiments can be utilized and derived therefrom, such that structural and logical substitutions and changes can be made without departing from the scope of this disclosure. Figures are also merely representational and can not be drawn to scale. Certain proportions thereof may be exaggerated, while others may be minimized. Accordingly, the specification and drawings are to be regarded in an illustrative rather than a restrictive sense. 
         [0054]    Such embodiments of the inventive subject matter can be referred to herein, individually and/or collectively, by the term “invention” merely for convenience and without intending to voluntarily limit the scope of this application to any single invention or inventive concept if more than one is in fact disclosed. Thus, although specific embodiments have been illustrated and described herein, it should be appreciated that any arrangement calculated to achieve the same purpose can be substituted for the specific embodiments shown. This disclosure is intended to cover any and all adaptations or variations of various embodiments. Combinations of the above embodiments, and other embodiments not specifically described herein, will be apparent to those of skill in the art upon reviewing the above description. 
         [0055]    The Abstract of the Disclosure is provided to comply with 37 C.F.R. §1.72(b), which requires an abstract that will allow the reader to quickly ascertain the nature of the technical disclosure. It is submitted with the understanding that it will not be used to interpret or limit the scope or meaning of the claims. In addition, in the foregoing Detailed Description, it can be seen that various features are grouped together in a single embodiment for the purpose of streamlining the disclosure. This method of disclosure is not to be interpreted as reflecting an intention that the claimed embodiments require more features than are expressly recited in each claim. Rather, as the following claims reflect, inventive subject matter lies in less than all features of a single disclosed embodiment. Thus the following claims are hereby incorporated into the Detailed Description, with each claim standing on its own as a separately claimed subject matter.