Abstract:
A system, method, and computer program product for automatically detecting and correcting the “purple fringing” effect, typically due to axial chromatic aberration in imaging devices, are disclosed and claimed. A chromaticity score is computed, denoting the amount of false color related to a purple fringing artifact. A locality score is computed, denoting the similarity of the purple fringing region to a shape of a narrow ridge, which is typical for purple fringing artifacts. A saturation score is also computed, denoting the proximity of a pixel to saturated pixels. These scores are then combined into a detection score, denoting pixels having strong indications they share properties common to pixels of purple fringing artifacts. The detected pixels are then correspondingly corrected, e.g. by chroma suppression. The scoring and correction may be performed over combinations of image resolutions, e.g. an original version and potentially numerous downscaled versions.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
       [0001]    This patent application claims priority under 35 U.S.C. 119(e) to U.S. Provisional Application No. 61/409,875 filed on Nov. 3, 2010 in the U.S. Patent and Trademark Office, entitled “Purple Fringing Automatic Detection And Correction”, the entire content of which is incorporated by reference herein, and is related by subject matter to another simultaneously-filed application with a common specification, Attorney Docket No. Z1042.1035US-1, entitled “Purple Fringing Automatic Detection And Correction”, which is hereby incorporated by reference in its entirety. 
     
    
     BACKGROUND OF THE INVENTION 
       [0002]    In optics, axial chromatic aberration is a type of distortion in which there is a failure of a lens to focus all colors to the same focal plane. It occurs because lenses have a different refractive index for different wavelengths of light (i.e. the dispersion of the lens). The refractive index usually decreases with increasing wavelength. Since the focal length of a lens is dependent on the refractive index, different wavelengths of light will be focused on different focal planes.  FIG. 1  demonstrates axial chromatic aberration on a typical lens. The side effect of axial chromatic aberration can be seen as a chromatic halo (of false color, typically blue or purple) around objects in the image. This is due to the fact that camera designers usually don&#39;t place the sensor in the focal plane of the blue channel, and therefore it will usually be out of focus. However, other channels might be blurred as well. 
         [0003]    The term “purple fringing” (PF) refers to the occurrence of regions of severe false color around very bright objects in the image. For that reason purple fringing will normally take place around areas in the image were pixel values are saturated, meaning that their values are at the highest possible value within the dynamic range of the sensor. Purple fringing is commonly explained as an aspect of axial chromatic aberration, although there may be other explanations for this phenomenon. 
         [0004]      FIG. 2  explains purple fringing as an aspect of the axial chromatic aberration effect. The dynamic range of the sensor is shown as a gray horizontal bar. A high contrast edge from the photographed scene is projected onto the sensor by the lens (left). As a result of the lens&#39;s chromatic aberration, the blue component is defocused and blurred (middle). Finally, the sensor clips all values above its dynamic range, resulting in a blue fringing around the edge (right). 
         [0005]    It is important to distinguish the purple fringing artifact from the lateral chromatic aberration artifact, in which the red, green and blue channels are translated across the radial direction (without being blurred). 
         [0006]      FIG. 3  shows an example of purple fringing in a real image. It can be seen that all high-contrast edges are surrounded by purple “halo” artifact. 
         [0007]    Current solutions to purple fringing are divided into two categories: Pre-capture solutions and post-capture solutions. Pre-capture solutions avoid purple fringing by using high-quality lenses featuring low axial chromatic aberration. These steps, though capable of reducing purple fringing, cannot promise total elimination of the problem. On the other hand, they require special expensive optical equipment. 
         [0008]    Real-time post-capture solutions involve applying various filters on the image, such as low pass filters and non-linear filters. Other post-capture approaches are detailed below. Most of these solutions suffer from a lot of artifacts (such as loss of details, chroma blur, undesired chroma suppression) and are incapable of handling wide purple fringing. There are also manual post-capture solutions which are normally time-consuming and unsuitable for digital still or video camera applications. 
       SUMMARY OF THE EMBODIMENTS 
       [0009]    A system, method, and computer program product for automated correction of purple fringing artifacts in images are provided. In one embodiment, the present invention assigns a detection score to pixels in an image according to features indicating the pixels are part of a purple fringing artifact, and corrects the pixels according to the detection score. 
         [0010]    In another embodiment, the assigning and correcting are performed on image versions including at least one of an initial image version and at least one downscaled image version. The image versions may include a maximum resolution version. The assigning and/or the correcting may vary for the image versions. The detecting score may be the sum of detecting scores assigned for each image version. 
         [0011]    In another embodiment, the detection score is assigned to pixels in an image according to a combination of chromaticity scores, locality scores, and saturation scores. The embodiments may operate substantially in real time and/or within a camera, and the image processed may be a still image and/or a video frame. 
         [0012]    The chromaticity score of a pixel may be determined by the difference between a reference color channel and a blurred color channel for the pixel. Alternately, the chromaticity score may be determined by the proximity of a pixel color to a set of purple fringing artifact colors. 
         [0013]    The locality score may be determined by the similarity of the purple fringing region to the shape of a narrow ridge in the image. In particular, the locality score may be determined for a target pixel by, for chrominance value differences of individual pixels in a window of predetermined size around the target pixel, extracting a vector of elements along each of a set of sampling directions, averaging a set of differences for a set of sampled pixels near each vector element, for each vector, computing a sum of absolute gradient values, selecting the sampling direction with A being the maximal sum of absolute gradient values, for the selected sampling direction, computing B being an absolute difference for the end vector elements, subtracting B from A to produce a locality value, and converting the locality value to the locality score using a linear scoring function. 
         [0014]    The saturation score may be determined by the spatial distance of a pixel from saturated pixels. The saturation score is determined for a target pixel by defining a saturation range, averaging pixels in a window of predetermined size around the target pixel according to their position in the saturation range to produce a saturation value, and converting the saturation value to the saturation score using a linear scoring function. 
         [0015]    The detection score may be the multiplicative product of the chromaticity score, the locality score, and the saturation score. Alternately, the detection score may be the minimum of the chromaticity score, the locality score, and the saturation score. Further, the detection score may be a weighted combination of the chromaticity score, the locality score, and the saturation score that emphasizes high individual scores and discounts low individual scores. 
         [0016]    The correction may include chroma suppression by blending with a corresponding monochromatic or grey pixel. This grey pixel may be computed by taking the minimum of the red, green, and blue pixel values. Alternately, it can be computed as weighted average of the red, green, and blue pixel values. 
         [0017]    As described more fully below, the apparatus and processes of the embodiments disclosed permit automatic detection and correction of purple fringing. Further aspects, objects, desirable features, and advantages of the apparatus and methods disclosed herein will be better understood and apparent to one skilled in the relevant art in view of the detailed description and drawings that follow, in which various embodiments are illustrated by way of example. It is to be expressly understood, however, that the drawings are for the purpose of illustration only and are not intended as a definition of the limits of the claimed invention. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0018]      FIG. 1  is a diagram that demonstrates axial chromatic aberration on a typical lens, according to an embodiment of the invention; 
           [0019]      FIG. 2  is a diagram that demonstrates how purple fringing arises as an aspect of the axial chromatic aberration effect and sensor saturation, according to an embodiment of the invention; 
           [0020]      FIG. 3  is a photograph depicting occurrences of purple fringing, according to an embodiment of the invention; 
           [0021]      FIG. 4  is a block diagram depicting the operation of an embodiment of the invention; 
           [0022]      FIG. 5  is a block diagram depicting the operation of a multi-scale embodiment of the invention; 
           [0023]      FIG. 6  is a graph of a linear scoring function, according to an embodiment of the invention; 
           [0024]      FIG. 7  is a diagram that shows the pixels that should be summed to get each element for spatial locality computation, according to an embodiment of the invention; and 
           [0025]      FIG. 8  is a table of different high chromaticity score spatial locality discrimination scenarios, according to an embodiment of the invention. 
       
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       [0026]    The embodiments of the present invention provide a new approach for post-capture detection and correction of purple fringing, suitable also for real time applications. 
         [0027]    The approach provided by the embodiments processes the image as follows. First, each pixel is scanned and scored according to the amount of purple fringing in it. Scoring is done according to at least one of the three measures (chromaticity, locality, and saturation), which may be (but is not necessarily) calculated using a multi-resolution approach. 
         [0028]    Second, pixels are corrected according to their purple fringing score, in a way that will reduce their artificial purple color while preserving details as much as possible. 
         [0029]    The embodiments of the present invention thus propose a fully automatic solution for detecting and reducing purple fringing artifact from digital images. Some of the advantages over the state of the art are:
       A new criterion/mechanism for purple fringing scoring, which relies on locality score (on top of saturation score and, chromaticity score), and exceeds other existing solutions in terms of minimizing mis-detections and false detections of purple fringing.   A new multi-resolution approach for purple fringing scoring, which allows effective removal of wide purple fringing artifacts without suffering from the time and/or cost penalty typical for other solutions using a large spatial filter   A new purple fringing correction method which removes false color while maintaining superior detail preservation compared to other existing solutions. This method involves chroma suppression of the purple fringed areas by blending them with the value min(R, G, B).   The embodiments enable manufacturers (of either digital still cameras or digital video recorders) to offer higher image quality in their products. Purple fringing is known as a main factor for degrading the quality of images and videos. They also permit lowering the cost of the camera, by integrating cheaper lenses, which are characterized by higher axial chromatic aberration, while correcting the resulting artifacts digitally.       
 
         [0034]    Acronyms: 
         [0035]    PF—Purple Fringing 
         [0036]    CHR—Chromaticity 
         [0037]    LOC—Locality 
         [0038]    SAT—Saturation 
         [0039]    BC—Blurry Channel—Normally, but not necessarily, this would be the blue channel. 
         [0040]    RC—Reference Channel—Normally, but not necessarily, this would be the red or green channel. 
         [0041]    LSF—Linear Scoring Function 
         [0042]    DET—Purple fringing detection score 
         [0043]    General Processing Scheme 
         [0044]    As stated above, the present invention embodiments process each pixel in two stages: A “Detection” stage, which produces a “detection score” DET by estimating the pixel purple fringing amount, and a “Correction” stage, in which the pixel is corrected according to the detection score produced at the detection stage. 
         [0045]      FIG. 4  shows a block diagram of the conceptual operation of an embodiment of the present invention. The detection stage scores the pixel purple fringing by combining three criteria, which were found to characterize purple fringing pixels very well. These criteria are the Chromaticity score (CHR), the Locality score (LOC) and the Saturation score (SAT). The COMBINE module combines the CHR score, the LOC score and the SAT score and produces a Detection score DET, which is used to determine the amount of correction required at the CORRECT module. The latter is inputted with the original pixel, and performs correction based on the detection score, to produce an output pixel in which the purple fringing is reduced. The scores from a lower scale image are shown generally in  FIG. 4  as a further input to the COMBINE module, but these are not required if processing an image at a single resolution (e.g. an original resolution). 
         [0046]    Multi-Scale Processing 
         [0047]    The flow described above is given as a single scale process. However, the concept may be applied to process an image in a multi-scale approach, as shown in  FIG. 5 . The original image, denoted as S 0 , is downscaled, possibly repeatedly, to produce at least one lower resolution version of it (denoted as S 1 , S 2  etc). A 1:4 downscaling has been found to work well for example. 
         [0048]    When processing image S i , the COMBINE module combines the CHR score, LOC score and SAT score computed on S i  with the scores computed on the corresponding pixel in the downscaled image S i+1 . The COMBINE module outputs (in addition to the Detection score) the CHR, LOC and SAT score, to be used when processing the upscaled image S i−1 . This multi-scale computation enables replacing the non-efficient computation of wide-support filters on S i  with narrower support filters computed in S i+1 . 
         [0049]    Linear Scoring Function (LSF) 
         [0050]    Linear scoring functions are used in several places in the system, to convert a computed measurement into a score. Each LSF is characterized by four parameters: v 1 , v 2 , b 1 , b 2 , as demonstrated in  FIG. 6 . 
         [0051]    The function is defined by (‘o.w’ meaning otherwise): 
         [0000]    
       
         
           
             
               
                 f 
                 
                   
                     v 
                     1 
                   
                   , 
                   
                     v 
                     2 
                   
                   , 
                   
                     b 
                     1 
                   
                   , 
                   
                     b 
                     2 
                   
                 
               
                
               
                 ( 
                 v 
                 ) 
               
             
             = 
             
               { 
               
                 
                   
                     
                       b 
                       1 
                     
                   
                   
                     
                       v 
                       &lt;= 
                       
                         v 
                         1 
                       
                     
                   
                 
                 
                   
                     
                       b 
                       2 
                     
                   
                   
                     
                       v 
                       &gt;= 
                       
                         v 
                         2 
                       
                     
                   
                 
                 
                   
                     
                       
                         b 
                         1 
                       
                       + 
                       
                         
                           
                             v 
                             - 
                             
                               v 
                               1 
                             
                           
                           
                             
                               v 
                               2 
                             
                             - 
                             
                               v 
                               1 
                             
                           
                         
                         · 
                         
                           ( 
                           
                             
                               b 
                               2 
                             
                             - 
                             
                               b 
                               1 
                             
                           
                           ) 
                         
                       
                     
                   
                   
                     
                       o 
                       . 
                       w 
                     
                   
                 
               
             
           
         
       
     
         [0052]    The CHR Score 
         [0053]    Pixels with purple fringing are characterized by a high-saturated artificial color, which is typically (but not necessarily) purple, blue or cyan. This is a direct outcome of the purple fringing generation process (shown in  FIG. 2 ), in which the blurriness of one component causes it to be much higher than another, sharper component. 
         [0054]    The CHR score aims to reflect the similarity between the pixel chrominance and the chrominance which is typical with purple fringing. A preferred implementation for measuring this similarity is to compute the difference between two color channels (when performing detection in the RGB linear domain). Typically these color channels would be the BC and the RC, where a large difference between the BC and the RC is related to the existence of purple fringing, and in this case the pixel will be given a high CHR score. 
         [0055]    In order to increase chrominance computation robustness in presence of noise, the computation may involve a spatial filtering (i.e., local averaging). 
         [0056]    Another possible implementation may involve measuring the proximity of the pixel color to a set of typical purple fringing colors. For instance, a closed domain in the U-V plane of values which are typical with purple fringing can be defined, and each pixel is scored according to its proximity to the closest pixel in the domain. 
         [0057]    The LOC Score 
         [0058]    An important property of purple fringing is that it is a local phenomenon, related to high contrast edges in the image, meaning that the false color typical to purple fringing only appears at spatial proximity to these high contrast edges. Therefore, distinguishing true purple fringing pixel from non-purple-fringing pixel with similar color is done by scoring the spatial locality of the artifact. By doing this, the LOC score is used to limit the purple fringing detection to narrow ridges of false color. 
         [0059]    Following is a description of a preferred implementation of the LOC score. It should be pointed out that the invention should not be limited to one particular way of calculating the LOC score, and there may very well be other methods for measuring the spatial locality of the false color typical to purple fringing. 
         [0060]    According to the preferred implementation, the LOC score is computed in a K×K window around the currently processed pixel as follows. First, the chrominance is computed for all window pixels as described above for CHR score. The K×K window of chrominance values is used from this point on. 
         [0061]    For each direction (horizontal, vertical and two diagonals) a vector S[i] (i ε [0,1 . . . K−1]) is extracted. Each element in S[i] is the mean of three differences in the window.  FIG. 7  shows the pixels that should be summed to get each element, for a window of 7×7. For instance, to get the first element S[ 0 ] of the first diagonal sampling (going from upper left to lower right in  FIG. 7 ), the three pixels that have to be averaged are the top-left pixel, the pixel below the top-left pixel, and the pixel to the right of the top-left pixel. Similarly, the last sample S[ 6 ] of the vertical direction is computed by averaging the value of the three central pixels at the bottom row. 
         [0062]    For each of the four K-elements vectors (each vector corresponds to one sampling direction), the sum of the absolute values of the gradients is computed: 
         [0000]    
       
         
           
             A 
             = 
             
               
                 ∑ 
                 
                   i 
                   = 
                   1 
                 
                 
                   K 
                   - 
                   1 
                 
               
                
               
                  
                 
                   
                     S 
                      
                     
                       [ 
                       i 
                       ] 
                     
                   
                   - 
                   
                     S 
                      
                     
                       [ 
                       
                         i 
                         - 
                         1 
                       
                       ] 
                     
                   
                 
                  
               
             
           
         
       
     
         [0000]    The direction with the maximal A value is chosen. For this vector, the value 
         [0000]        B=|S[ 0 ]−S[K− 1]| 
         [0000]    is computed, and finally the value 
         [0000]    
       
      
       V=A−B  
      
     
         [0000]    is computed and converted to a score using LSF. Notice that given the definitions of A and B, A is always greater than or equal to B. 
         [0063]    This specific realization of chrominance locality measurement is explained as follows. The value of A determines the accumulated variability of the signal along a specific direction, accounting all pixels along the sampling direction. The value of B reflects the edge magnitude along the direction in which the signal variability is maximized. The value V=A−B becomes larger as the total variability A is increased (the chrominance varies along the chosen direction) while the edge magnitude is decreased (the chrominance variability is not in the form of an edge). V will have larger values at ridges in the chrominance channel, and smaller values for flat areas (where A and B are both small) and edges (where A and B are both large). 
         [0064]      FIG. 8  further demonstrates the behavior of the given locality measurement. In  FIG. 8 , various cases are listed, all of which are characterized by high chrominance score (for instance, the BC is much higher than the RC). However, not all cases represent a true purple fringing situation. While cases  1  and  2  are true purple fringing, caused by the blurriness of the BC, cases  3  and  4  show non-purple-fringe cases. For each case, the cardinality of A (in the maximal sampling direction) is presented, along with the magnitude of B. Finally, the value of V is given, showing that V is correlated with the existence of true purple fringing. 
         [0065]    The SAT Score 
         [0066]    The SAT score is used for scoring pixels according to their spatial distance from saturated pixels. Since purple fringing mostly occurs in pixels adjacent to saturated pixels, a higher score is given to pixels located in proximity to saturated areas. As demonstrated in  FIG. 2 , purple fringing is related to the saturation of the BC, and thus the SAT score is usually (but not necessarily) computed on the BC channel. However, computing the SAT score is not limited to a specific channel, or to the method presented below. 
         [0067]    Measuring the environmental saturation may be performed (but is not limited to) as follows. The user defines a “saturation range” [v1 . . . v2]—the range of values in which pixels are considered to be saturated. The pixels in a K×K window around the current pixel are averaged according to their position in the saturation range: 
         [0000]    
       
         
           
             S 
             = 
             
               
                 1 
                 
                   K 
                   2 
                 
               
                
               
                 ∑ 
                 
                   max 
                    
                   
                     ( 
                     
                       
                         min 
                          
                         
                           ( 
                           
                             
                               pixelValue 
                               - 
                               
                                 v 
                                  
                                 
                                     
                                 
                                  
                                 1 
                               
                             
                             , 
                             
                               
                                 v 
                                  
                                 
                                     
                                 
                                  
                                 2 
                               
                               - 
                               
                                 v 
                                  
                                 
                                     
                                 
                                  
                                 1 
                               
                             
                           
                           ) 
                         
                       
                       , 
                       0 
                     
                     ) 
                   
                 
               
             
           
         
       
     
         [0068]    The value S is then converted to SAT score using a scoring LSF. 
         [0069]    The above method for computing SAT is explained as follows. For a pixel located in proximity to a saturated area, there will be at least a few pixels in a K×K window around the pixel for which their value is in the range [v1 . . . v2]. The value of S in this window will be greater than zero, and will get larger as the K×K window contains more pixels with value in [v1 . . . v2], and/or the actual value of the pixels is larger. On the other hand, for a pixel which is not located in a proximity to a saturated area, all pixels in the K×K window around the pixel will have their values smaller than v1, and thus S=0. Notice that this definition of S promises smoothness in the spatial transition of the SAT score. 
         [0070]    Score Combination 
         [0071]    This section describes the combination of the three scores listed above by the system. However, a different method of combination can be applied as well. As stated above, the system performs purple fringing detection in a multi-scale scheme. In the following explanation, scale 0 represents the original image, while scales 1, 2 and beyond use lower resolution versions of the original image. The image for scale i+1 might be computed by down-scaling the image of scale I (other methods can be applied as well). 
         [0072]    Given the following scores: 
         [0073]    CHR i =CHR score computed on input pixel from current image 
         [0074]    SAT i =SAT score computed on input pixel from current image 
         [0075]    LOC i =LOC score computed on input pixel from current image 
         [0076]    CHR i+1 =CHR score computed on corresponding pixel from downscaled image 
         [0077]    SAT i+1 =SAT score computed on corresponding pixel from downscaled image 
         [0078]    LOC i+1 =LOC score computed on corresponding pixel from downscaled image 
         [0079]    For a single scale i, a possible combination of the chromaticity score CHR i , the locality score LOC i  and the saturation score SAT i  into a detection score DET_SCALE i  may be (but is not limited to) performed as follows: 
         [0000]      DET_SCALE i =CHR i *LOC i *SAT i    
         [0080]    This computation becomes larger as each of the three scores is increased. If at least one of the scores equals zero, the computed score is also zeroed. 
         [0081]    In order to perform a multi-scale detection, the system might compute the final detection score at scale i, denoted DET i , by combining the detection score in scale i, DET_SCALE i , with the final detection score computed in lower scales. A possible combination is given by (but not limited to): 
         [0000]      DET i =DET_SCALE i +DET i+1    
         [0082]    Where DET i+1  is the combination of the scores for scale i+1, which might be computed in a similar method, and combines CHR i+1 , LOC i+1 , and SAT i+1 . However, the combination of the scores in each scale may be different from other scale combination methods. 
         [0083]    It should be noted that the combinations of the scores may be implemented in different ways. For instance, rather than multiplying the CHR, LOC and SAT scores, the minimum of the scores may be used. Similarly, the addition of DET_SCALE i  and DET i+1  may be alternated by computing the score&#39;s maximum. Low component score values may be dropped, or higher component scores may be weighted nonlinearly to make them more significant. Scores may also be computed serially rather than in parallel and then combined. 
         [0084]    Correction 
         [0085]    The correction stage of the system aims to reduce the purple fringing in the current pixel (if presented). The correction is performed gradually, using the Detection score as correction amount. The correction process replaces the original pixel with a pixel in which the artificial color is reduced. 
         [0086]    Following is a description of a preferred implementation for correcting purple fringing pixels. It should be pointed out that the invention should not be limited to one particular way of correction, and there may be other methods for reducing purple fringing, based on the computed detection score. 
         [0087]    Given the original pixel and the purple fringing detection score, the system performs chroma suppression on the current pixel, by partially blending the pixel with a corresponding grey pixel (denoted M). As a grey pixel corresponding to the original pixel, the system uses the minimum of the Red, Green and Blue pixel components: 
         [0000]        M =min( R, G, B ) 
         [0088]    It is believed that using the minimum of Red, Green and Blue pixel components as the grey pixel for partially blending with the original pixel is better in detail preservation than other methods. 
         [0089]    Once the grey pixel is computed from the current pixel, a blending of the current pixel with the grey pixel is performed: 
         [0000]        R   corrected =(1 −D )· R+D·M  
 
         [0000]        G   corrected =(1 −D )· G+D·M  
 
         [0000]        B   corrected =(1 −D )· B+D·M  
 
         [0000]    Where D represents the normalized detection score. D ranges from 0 to D max , where D max ≦1. D equals 0 when the detection score is 0, and equals to D max  when the detection score gets its maximal value. 
         [0090]    It should be noted that the invention does not limit the computation of the grey pixel M to this method. Alternative methods might involve computing the grey pixel M as a weighted average of the Red, Green, and Blue pixel components (when processing in RGB domain), and using the Y (luma) component of the image (when processing in YUV domain). 
         [0091]    As used herein, the terms “a” or “an” shall mean one or more than one. The term “plurality” shall mean two or more than two. The term “another” is defined as a second or more. The terms “including” and/or “having” are open ended (e.g., comprising). Reference throughout this document to “one embodiment”, “certain embodiments”, “an embodiment” or similar term means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. Thus, the appearances of such phrases in various places throughout this specification are not necessarily all referring to the same embodiment. Furthermore, the particular features, structures, or characteristics may be combined in any suitable manner on one or more embodiments without limitation. The term “or” as used herein is to be interpreted as inclusive or meaning any one or any combination. Therefore, “A, B or C” means “any of the following: A; B; C; A and B; A and C; B and C; A, B and C”. An exception to this definition will occur only when a combination of elements, functions, steps or acts are in some way inherently mutually exclusive. 
         [0092]    In accordance with the practices of persons skilled in the art of computer programming, embodiments are described below with reference to operations that are performed by a computer system or a like electronic system. Such operations are sometimes referred to as being computer-executed. It will be appreciated that operations that are symbolically represented include the manipulation by a processor, such as a central processing unit, of electrical signals representing data bits and the maintenance of data bits at memory locations, such as in system memory, as well as other processing of signals. The memory locations where data bits are maintained are physical locations that have particular electrical, magnetic, optical, or organic properties corresponding to the data bits. 
         [0093]    When implemented in software, the elements of the embodiments are essentially the code segments to perform the necessary tasks. The non-transitory code segments may be tangibly stored in a processor readable medium or computer readable medium, which may include any medium that may store or transfer information. Examples of such media include an electronic circuit, a semiconductor memory device, a read-only memory (ROM), a flash memory or other non-volatile memory, a floppy diskette, a CD-ROM, an optical disk, a hard disk, a fiber optic medium, a radio frequency (RF) link, etc. User input may include any combination of a keyboard, mouse, touch screen, voice command input, etc. User input may similarly be used to direct a browser application executing on a user&#39;s computing device to one or more network resources, such as web pages, from which computing resources may be accessed. 
         [0094]    While the invention has been described in connection with specific examples and various embodiments, it should be readily understood by those skilled in the art that many modifications and adaptations of the invention described herein are possible without departure from the spirit and scope of the invention as claimed hereinafter. Thus, it is to be clearly understood that this application is made only by way of example and not as a limitation on the scope of the invention claimed below. The description is intended to cover any variations, uses or adaptation of the invention following, in general, the principles of the invention, and including such departures from the present disclosure as come within the known and customary practice within the art to which the invention pertains.