Abstract:
A color filter array includes arrangements of green-filtered pixels to optimize performance and accuracy of color interpolation operations. Where red or blue pixels are found, green values are estimated with a high degree of accuracy. Unknown red and blue intensity values are interpolated by converting known red and blue values to hue. The interpolated hue values are then converted to intensity data.

Description:
BACKGROUND  
         [0001]    This invention relates to image processing and, more particularly, to a color filter array and method for performing color interpolation.  
           [0002]    A digital camera captures an image using a sensor including a large number of pixels, or picture elements. Each pixel may include a light-sensitive photocell or other circuitry that produces a voltage upon receiving incident light. The voltage is converted to digital form in the camera. The digitized image data may be stored, manipulated, or transmitted to another location within or outside the camera.  
           [0003]    Rather than recording color, the circuitry of the pixel records intensity information of the image. Accordingly, the color information may be extracted from the intensity data using color filters. Although other color combinations are sometimes used, some arrangements of color filters extract the three primary colors: red, green, and blue. From combinations of the three colors, the entire color spectrum, from black to white, may be derived.  
           [0004]    Cameras employ different mechanisms for obtaining the three primary colors from the incoming photons of light. Very high quality cameras, for example, may employ three separate sensors, a first with a red filter, a second with a blue filter, and a third with a green filter. Such cameras typically have one or more beam splitters that send the light to the different color sensors. All sensor photocells receive intensity information simultaneously. Because each photocell is receiving light filtered through a distinct color, each pixel value is dedicated to a single color. The additional hardware, however, makes these cameras relatively expensive.  
           [0005]    A second method for recording the color information is to rotate a three-color filter across the sensor. Each pixel may store all three colors, in sequence. However, each color is stored at a different point in time. Thus, this method works well with still, but not candid or handheld photography, because the three colors are not obtained at precisely the same moment.  
           [0006]    A third method for recording the three primary colors from a single image is to dedicate each pixel to a different color value. Different photocells of the sensor are filtered with one of the red, green, and blue filters. The arrangement of differently colored filters upon a sensor is known as a color filter array (CFA). CFA sensors allow each of the red, green, and blue pixels to receive image information simultaneously. Once the image is recorded, the true color, or three-color representation, for each pixel may subsequently be derived using color interpolation.  
           [0007]    Color interpolation depends on the pattern, or “mosaic,” that describes the layout of the filters on the pixels of the sensor. One common mosaic is known as a Bayer pattern. The Bayer pattern alternates red and green pixels in a first row of the sensor with green and blue pixels in a second row of the sensor. Thus, there are twice as many green pixels (50%) as either red pixels (25%) or blue pixels (25%). The green pixels are preferred because the human eye is more sensitive to luminance in the green color region.  
           [0008]    CFA sensors, including the Bayer-patterned sensor, are useful for some color imaging because a single sensor is used, yet all the color information is recorded at the same moment. This allows for smaller, cheaper, and more versatile cameras. Since each pixel records information from one color, information for the remaining colors is missing from that pixel. Accordingly, color interpolation is typically performed on image data produced by a CFA sensor.  
           [0009]    A variety of color interpolation algorithms, both adaptive and non-adaptive, may be performed to synthesize the color pixels. Non-adaptive algorithms are performed in a fixed pattern for every pixel in a group. Such algorithms include nearest neighbor replication, bilinear interpolation, cubic convolution, and smooth hue transition.  
           [0010]    Adaptive algorithms detect local spatial features in a group of pixels, then apply some function, or predictor, based on the features. Examples of adaptive algorithms include edge sensing interpolation, pattern recognition, and pattern matching interpolation, to name a few.  
           [0011]    While CFA patterns are popular in digital camera sensors, performing color interpolation on CFA image data produces mixed results. Since color interpolation provides a more complete representation of the image than the image data recorded by the CFA, a CFA pattern that simplifies the color interpolation algorithm may increase the usefulness of some digital cameras.  
           [0012]    Thus, there is a continuing need to provide a color filter array pattern that facilitates efficient color interpolation. 
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0013]    [0013]FIG. 1 is a block diagram of a digital imaging device employing the color filter array and color interpolation algorithm according to one embodiment of the invention;  
         [0014]    [0014]FIG. 2 is a diagram of a novel color filter array according to one embodiment of the invention;  
         [0015]    FIGS.  3 A- 3 E are diagrams illustrating the color interpolation of green values using the CFA of FIG. 1 according to one embodiment of the invention;  
         [0016]    [0016]FIG. 4 is a diagram of a sub-block of image data in which red color values are translated into hue values according to one embodiment of the invention;  
         [0017]    FIGS.  5 A- 5 D are diagrams illustrating the color interpolation of red (or blue) hues for one sub-block of image data according to one embodiment of the invention;  
         [0018]    FIGS.  6 A- 6 C are diagrams illustrating the color interpolation of red (or blue) hues for a second sub-block of image data according to one embodiment of the invention;  
         [0019]    FIGS.  7 A- 7 D are diagrams illustrating the color interpolation of red (or blue) hues for a third sub-block of image data according to one embodiment of the invention;  
         [0020]    FIGS.  8 A- 8 C are diagrams illustrating the color interpolation of red (or blue) hues for a fourth sub-block of image data according to one embodiment of the invention; and  
         [0021]    [0021]FIG. 9 is a flow diagram illustrating operation of the color interpolation algorithm according to one embodiment of the invention. 
     
    
     DETAILED DESCRIPTION  
       [0022]    When an image is captured, the image includes a number of elements, known as pixels, each of which describes the intensity of the image for a particular location. The color of a particular pixel in a color image is typically specified by red, green, and blue color components. Where each color is described by an 8-bit value, the pixel is represented by a 24-bit value, eight bits for each of the red, green, and blue components.  
         [0023]    However, capturing a 24-bit representation of each pixel of an image is costly. Instead, a sensor, the part of a digital camera that receives the image information, typically includes a filter mosaic called a color filter array (CFA). Each filter in the CFA covers a single pixel and permits only a specific color of a particular spectral band to pass through the filter. Under such an arrangement, at each pixel location, a single color intensity is captured while the other two color intensities are missing.  
         [0024]    Color interpolation allows the missing color information to be “recovered.” At each pixel location, the two missing colors may be interpolated, based upon available information about neighboring pixel locations. Both adaptive and non-adaptive color interpolation algorithms have been implemented on CFAs. The results for the various algorithms are mixed. Some algorithms are favored for still images while others are preferred because of their speed, complexity, or other factors.  
         [0025]    When observing a color image, the human eye is better able to discern luminescence in green colors, whereas red and blue colors contribute to the intensity of the image. This is because human eye receptors are more sensitive to the green color than to either red or blue colors. The estimation of the green color in an image, therefore, is arguably more important for ensuring the visual quality of an interpolated image.  
         [0026]    With this in mind, many CFAs favor green filters over red and blue filters. For example, the commonly used Bayer pattern employs 50% green filters, 25% red filters, and 25% blue filters, arranged in a particular mosaic. Because CFA-based image data is color interpolated, a CFA which enhances the color interpolation operation, whether by reducing its complexity or by increasing the quality of the interpolated image, may be desirable.  
         [0027]    In FIG. 1, a digital imaging device  30  receives incident light  16  into a novel color filter array (CFA)  100  to produce image data  12 , in one embodiment. The digital imaging device  30  may be a camera, a scanner, or a printer, to name a few examples. The CFA  100  is positioned over a sensor (not shown) that converts the incident light to a measurable voltage. The particular arrangement of filters on the CFA  100  are described in FIG. 2, below.  
         [0028]    In one embodiment, the digital imaging device  30  performs a color interpolation operation or algorithm  50  on the image data  12  to produce interpolated image data  80 . The interpolated image data  80  may be compressed or otherwise processed in the digital imaging device  30 , or may be transmitted from the imaging device  30  to another entity, such as a computer or other processor-based system. The color interpolation algorithm  50  is discussed in more detail, below.  
         [0029]    In FIG. 2, according to one embodiment, the CFA  100  is arranged in a particular mosaic or pattern. The CFA  100  includes a plurality of pixels  10 . Each pixel  10  has one of three color filters associated therewith. In one embodiment, the red-green-blue (RGB) color space is represented. Pixel  10   r  is associated with a red filter, pixel  10   g  is associated with a green filter, and pixel  10   b  is associated with a blue filter. The filters of the CFA  100  may be arranged using other color spaces, such as cyan-magenta-yellow (CMY), in some embodiments.  
         [0030]    Like Bayer-patterned filters, the CFA  100  includes more green pixels  10   g  than blue pixels  10   b  or red pixels  10   r . In the CFA  100 , green pixels  10   g  comprise more than half the pixels  10 . In one embodiment, a first row of the CFA  100  includes a red pixel  10   r  followed by three green pixels  10   g , then a red pixel  10   r , then three green pixels  10   g . A second row of the CFA  100  includes the same arrangement as the first row, except the row does not start with a red pixel  10   r , but with two green pixels  10   g .  
         [0031]    A third row and fourth row are arranged just as the first two rows, only the red pixels  10   r  are replaced with blue pixels  10   b . Subsequent rows of the CFA  100  are simply replications of the first four rows. Ultimately, the CFA  100  includes 75% green pixels  10   g , 12.5% blue pixels  10   b , and 12.5% red pixels  10   r .  
         [0032]    The CFA  100  is arranged such that the estimation, or interpolation, of green color values may be more accurate. The pixels  10  for which green estimation is to be made include the red pixels  10   r  and the blue pixels  10   b . These pixels  10   r  and  10   b  are surrounded on all sides by green pixels  10   g . In other words, any unknown green pixel  10   g  in the CFA  100  is surrounded by a set of known green pixels  10   g  in all eight directions, e.g., in its 3×3 neighborhood.  
         [0033]    As shown in FIG. 1, the CFA  100  produces image data  12 . The image data  12  includes intensity information associated with each of the pixels  10   r ,  10   g , and  10   b , of the CFA  100 . The color interpolation algorithm  50  operates on the intensity information in the image data  12 . In the following discussion, variables, R, G, and B are used to denote the intensity information for the red pixel  10   r , green pixel  10   g , and blue pixel  10   b , respectively.  
         [0034]    In FIG. 3A, a 3×3 neighborhood  20  of the CFA  100  includes eight green pixels  10   g , corresponding to image data values, G (m−1,n−1) , G (m−1,n) , G (m−1,n+1) , G (m,n−1 ), G (m,n+1) , G (m+1,n−1) , G (m+1,n) , and G (m+1,n+1) , surrounding an image data value, G (m,n) , for which the green component is unknown. The unknown green value, G (m,n) , may be associated with any location of the CFA  100  where a red pixel  10   r  or a blue pixel  10   b  is known. In one embodiment, the color interpolation algorithm  50  concentrates on the 3×3 neighborhood  20  surrounding each unknown pixel  10 .  
         [0035]    In estimating the unknown green value, G (m,n) , the color interpolation algorithm  50  observes the intensity values of direct neighbors  22  of the green value, G (m,n) . As shown in FIG. 3B, the direct neighbors of G (m,n)  are G (m−1,n) , G (m,n−1) , G (m,n+1) , and G (m+1,n) . Where the intensity values of direct neighbors  22  are similar, certain patterns may be expected.  
         [0036]    In FIG. 3C, for example, all the direct neighbors  22  of the unknown green value, G (m,n) , have approximately the same intensity value, x. Thus, the unknown green value, G (m,n) , is in a smooth zone or region. In one embodiment, where the unknown green value, G (m,n) , occupies a smooth zone, the green value, G (m,n) , is estimated by taking an average of the values of the four direct neighbors:  
           G   (m,n) =( G   (m−1,n)   +G   (m,n−1)   +G   (m,n+1)   +G   (m+1,n) )/4  
         [0037]    where G (m−1,n) ≈G (m,n−1) ≈G (m,n+1) ≈G (m+1,n) ≈x, then G (m,n) ≈4×/4≈x.  
         [0038]    In FIG. 3D, three of the direct neighbors  22  of the unknown green value, G (m,n) , have approximately the same intensity value, x, while the fourth direct neighbor, G (m+1,n) , has a distinct intensity value, y. The unknown green value, G (m,n) , is thus in an edge zone. In one embodiment, the color interpolation algorithm  50  estimates the green value, G (m,n) , by averaging the three values which are similar, then weighting the average by some constant, as shown:  
           G   (m,n)   =[k *( G   (m−1,n)   +G   (m,n−1)   +G   (m,n+1) )/3+ G   (m+1,n) ]/( k+ 1)  
         [0039]    The constant, k, may be determined based on how close x is to y or based upon other factors. In one embodiment, k is determined by assessing the intensity values, x and y, where L=|x−y|, as follows:  
         if  L≦ 20 , K=L/ 5+1  
         else K=5  
         [0040]    In FIG. 3E, two of the direct neighbors, G (m−1,n)  and G (m+1,n) , of the unknown green value, G (m,n) , have approximately one intensity value, x, while the other two direct neighbors, G (m,n−1)  and G (m,n+1) , have approximately a second intensity value, y. Accordingly, the unknown green value, G (m,n) , is in a stripe zone, and is likely to have one of the intensity values, x or y. In one embodiment, the color interpolation algorithm  50  performs difference calculations as follows:  
         Δ G   H   =|G   (m,n−1)   −G   (m,n+1)    
         Δ G   V   =|G   (m−1,n)   −G   (m+1,n)    
         [0041]    and, where (ΔG H &gt;ΔG V ), then  
           G   (m,n)   =[k *( G   (m−1,n)   +G   (m+1,n) )/2+( G   (m,n−1)   −G   (m,n+1) )/2]/4,  
         [0042]    again, using a constant, k. In one embodiment, k is derived by taking the difference between G H  and G V  (L=|G H −G V |) and using the following formula:  
         if  L≦ 20 , k=L/ 5+1  
         else k=5  
         [0043]    In other words, where the difference between horizontal pixels, G (m,n−1)  and G (m,n+1) , is greater than the difference between vertical pixels, G (m−1,n)  and G (m+1,n) , a stronger inference of a “stripe” is present in the vertical pixels, and, thus, the vertical pixels are afforded more weight in interpolating to the unknown green value, G (m,n) . The weight is determined by the relative strength of the stripe, as given above.  
         [0044]    Thus, by analyzing its direct neighbors  22 , the color interpolation algorithm  50  may derive the green value, G (m,n) . A complete representation of the green color for the image data  12  is thus obtained. The particular arrangement of color filters in the CFA  100  facilitates the interpolation of the unknown green color values. Because each unknown green color value is surrounded by known color values, a more precise estimate of the unknown value may be made, in some embodiments.  
         [0045]    In one embodiment, the color interpolation algorithm  50  next derives color hue information. Hue is the color component of a color signal. Recall, however, that a color signal is an amalgam of three colors, such as red, green and blue. Thus, hue may be measured as the relative intensity of red or blue color with respect to the green color.  
         [0046]    In one embodiment, the image data  12  is captured as a logarithm of the intensity of the incident light  16 . Since the intensity values for each color are captured in logarithmic form, the hue for each color may be obtained by subtracting the intensity information received.  
         [0047]    In one embodiment, the color interpolation algorithm  50  derives the red hue and from image data  12  associated with red pixels  10   r  of the CFA  100 . Likewise, the blue hue is derived from color values associated with blue pixels  10   b  of the CFA  100 . Following green color interpolation, as described above, each red pixel  10   r  has an associated red value, R, obtained when the image was captured, and an interpolated green value, G. In one embodiment, the color interpolation algorithm  50  derives the red hue, H R , of the pixel  10   r , as follows:  
         
       H 
       R 
       =R−G  
     
         [0048]    Likewise, each blue pixel  10   b  has an associated blue value, B, obtained when the image was captured, and an interpolated green value, G. In one embodiment, the color interpolation algorithm  50  obtains the blue hue, H B , of the pixel  10   b , according to the following formula:  
         
       H 
       B 
       =B−G  
     
         [0049]    Thus, for each blue pixel  10   b , the blue hue, H b , can be obtained. For each red pixel  10   r , the red hue, H r , can be obtained. Likewise, color information, R and B, may be obtained from hue information, H R  and H B , as follows:  
           R=H   R   +G , and  
         
       B=H 
       B 
       +G  
     
         [0050]    The red and blue color values may be interpolated from the known red, R, and blue, B, color values, just as was done with the green color values, G, as described above. However, using the CFA  100 , each of the red, R, and green, G, values may be obtained for only 12.5% of the image data  12 . Thus, the likelihood of accurately estimating color information from known color values is diminished for the red and blue colors.  
         [0051]    The human eye does not process image data in terms of absolute color values. Instead, the human eye discerns color in relative terms. Looking at the formulas for H B  and H R , hue is defined as a relative relationship between two color values. Thus, hue information is well-suited to being used for color interpolation, particularly where the number of data samples is small. In one embodiment, the estimation of red and blue hues from known hues provided more accurate color data than estimating red and blue colors from known colors.  
         [0052]    In FIG. 4, an arrangement of known red values, R, associated with the red pixels  10   r , is shown in a sub-block  24   a  comprising red, R, blue, B, and green, G values of the image data  12 . The known red values, R, are oriented in a symmetrical pattern. Although not illustrated, the known blue values, B, are oriented in the same symmetrical pattern as the known red values, R.  
         [0053]    Using the formula above, the red hue, H R , may be obtained for each of the red values, R, as shown in a sub-block  24   b  in FIG. 4. In one embodiment, the red hues, H R , for other unknown locations of the sub-block  24  are obtained by the color interpolation algorithm  50 .  
         [0054]    In FIG. 5A, an unknown red hue, H R(m,n) , is positioned in a neighborhood  26  comprising known red hues, H R(m,n−1) , H R(m−1,n+1)  and H R(m,n+3) . The unknown red hue, H R(m,n) , is positioned just to the right of known red hue, H R(m,n−1) , and two positions to the left of known red hue, H R(m,n+3) .  
         [0055]    The unknown red hue, H R(m,n) , may be part of a smooth zone, shown in FIG. 5B, in which the known red hues, H R(m,n−1) , H R(m−1,n+1)  and H R(m,n+3) , all have approximately the same intensity, x. In one embodiment, the color interpolation algorithm  50  derives the unknown red hue, H R(m,n) , in a smooth zone as follows:  
           H   R(m,n) =( k*H   R(m,n−1)   +j*H   R(m−1,n+1)   +p*H   R(m,n+3) )/( k+j+p )  
         [0056]    where k, j, and p are variables that weight the known red hues according to the inverse of their relative radial distances from the pixel with unknown red hue, H R(m,n) , in one embodiment. In this example, the weights are assigned as k=1, j=½, and p=⅓.  
         [0057]    In FIG. 5C, the neighborhood  26  includes two known red hues, H R(m,n−1) , H R(m−1,n+1) , with a value approximating x and the third known red hue, H R(m,n+3) , with a value approximating y. This arrangement appears to be a corner zone. In one embodiment, the color interpolation algorithm  50  derives the unknown red hue, H R(m,n) , in a corner zone using the following formula:  
           H   R(m,n) =[2*[( H   R(m,n−1) +1/{square root}2 * H   R(m−1,n+1) )/(1+1/{square root}2)]+ H   R(m,n+3) ]/3  
         [0058]    Alternatively, the neighborhood  26  may be arranged as depicted in FIG. 5D, where known red hues, H R(m,n−1)  and H R(m,n+3) , approximate the same value, x. Known red hue, H R(m−1,n+1) , however, approximates a different intensity value, y. Accordingly, the neighborhood  26  is in a stripe zone. In one embodiment, the color interpolation algorithm  50  derives the unknown red hue, H R(m,n) , in a stripe zone by performing the following operation:  
           H   R(m,n) =[1.5(3 *H   R(m,n−1)   +H   R(m,n+3) )/4+ H   R(m−1,n+1) ]/2.5  
         [0059]    where the known red hues, H R(m,n−1)  and H R(m,n+3) , are given more weight because of the possible continuity. In one embodiment, where a shorter radial distance between known hues is found, a higher weight value is assigned, and vice-versa.  
         [0060]    In FIG. 6A, the unknown red hue, H R(m,n) , is positioned in the center of the neighborhood  26 , equally positioned between known red hues, H R(m,n−1)  and H R(m,n+2) , directly below known red hue, H R(m−1,n) , and two positions above known red hue, H R(m+3,n) .  
         [0061]    A smooth zone is depicted in FIG. 6B, in which each known red hue is approximately x. In one embodiment, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , as follows:  
           H   R(m,n) =( H   R(m,n−1)   +H   R(m,n+2)   +H   R(m−1,n)   +H   R(m+3,n) )/4  
         [0062]    In FIG. 6C, a corner zone is suggested where known red hues, H R(m,n−1)  and H R(m−1,n+1) , have similar values, x, while H R(m,n+3)  has a distinct value, y. Thus, the neighborhood  26  may include a horizontal or a vertical stripe. In one embodiment, the color interpolation algorithm  50  determines whether the unknown red hue, H R(m,n) , is part of a horizontal stripe, H RH , or of a vertical stripe, H RV , then applies one of the following formulas to estimate the red value, H R(m,n) :  
           H   R(m,n)   =H   RH =(2* H   R(m,n−1)   +H   R(m,n+2) )/3  
           H   R(m,n)   =H   RV =(3* H   R(m−1,n)   +H   R(m+3,n) )/4  
         [0063]    In FIG. 7A, the unknown red hue, H R(m,n) , is positioned in the center of a neighborhood  28 , directly below known red hue, H R(m−1,n) , and including known red hues, H R(m−2,n−2) , H R(m−2,n+2) , H R(m+2,n−2) , H R(m+3,n) , and H R(m+2,n+2) .  
         [0064]    A smooth zone is depicted in FIG. 7B, in which three of the known red hues, H R(m−1,n) , H R(m−2,n−2) , and H R(m−2,n+2) , are approximately x. In one embodiment, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , for a smooth zone as follows:  
           H   R(m,n) =( H   R(m,n−1)   +H   R(m−2,n−2)   +H   R(m−2,n+2) )/3  
         [0065]    In FIG. 7C, a vertical stripe zone is inferred, due to the known red hues, H R(m−1,n)  and H R(m+3,n) , having hues of approximately x. In one embodiment, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , for such a vertical zone using the following formula:  
           H   R(m,n) =(3* H   R(m−1,n)   +H   R(m+3,n) )/4  
         [0066]    Note that more weight is given to the known red hue, H R(m−1,n) , due to its proximity to the unknown red hue, H R(m,n) .  
         [0067]    In FIG. 7D, two of the known red hues, H R(m−2,n−2)  and H R(m+2,n+2) , have approximately the same value, x, and suggest that the unknown red hue, H R(m,n) , may be in a diagonal arrangement. Accordingly, in one embodiment, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , for such a diagonal zone as follows:  
           H   R(m,n) =( H   R(m−2,n−2)   +H   R(m+2,n+2) )/2  
         [0068]    Where, instead, known red hues, H R(m+2,n−2)  and H R(m−2,n+2) , have approximately the same value, y, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , using the following formula:  
           H   R(m,n) =( H   R(m+2,n−2)   +H   R(m−2,n+2) )/2  
         [0069]    In FIG. 8A, the unknown red hue, H R(m,n) , in the neighborhood  28  is moved downward one position (see FIG. 7A). In FIG. 8B, the unknown red hue occupies a smooth zone, as known red hues, H R(m+1,n−2) , H R(m+2,n) , and H R(m+1,n+2) , have approximately the same value, x. Accordingly, the color interpolation algorithm  50  estimates the red hue, H R(m,n) , by performing the following operation:  
           H   R(m,n) =(1/{square root}5 *H   R(m+1,n−2) )+(½* H   R(m+2,n) )+(1/{square root}5 H   R(m+1,n+2) )  
         [0070]    In FIG. 8C, known red hues, H R(m−2,n)  and H R(m+2,n) , have approximately the same value, y, suggesting a vertical zone. In one embodiment, the color interpolation algorithm  50  derives the unknown red hue, H R(m,n) , using the following formula:  
           H   R(m,n) =( H   R(m−2,n)   +H   R(m+2,n) )/2  
         [0071]    The above operations used to derive red hues may likewise be performed on known blue hues to derive unknown blue hues. The color interpolation algorithm  50  thus performs pattern recognition of the known color hues in deriving unknown color hues.  
         [0072]    Once all the red and blue hues are known, the red and blue values may be derived, using the formulas, R=H R +G, and B=H B +G, described above. Since the unknown green color values, G, have already been estimated, the color interpolation algorithm  50  has a complete representation of each of the red, blue, and green colors associated with each pixel  10  of the CFA  100 .  
         [0073]    Because the CFA  100  is designed to facilitate accurate color interpolation of the green values, a better estimation of hues is possible, in some embodiments. Because green is more prominently discerned by human eyes, the CFA  100  and color interpolation algorithm  50  may provide improved image quality.  
         [0074]    In one embodiment, the color interpolation algorithm  50  is a software program that resides in a storage  52  of the imaging device  30  (see FIG. 1). Alternatively, a portion of the operations described herein may be performed using discrete logic circuitry. The storage  52  may include volatile storage, such as a random access memory, or non-volatile storage such as a read-only memory (ROM), a flash memory, or a hard disk drive.  
         [0075]    In FIG. 9, a flow diagram illustrates the operation of the color interpolation algorithm  50 , according to one embodiment, and as described in detail above. Once an image is captured, the image data  12  may be stored. Typically, the image data  12  may be stored in a temporary frame buffer memory.  
         [0076]    The color interpolation algorithm  50  is described where the CFA  100  utilizes the RGB color space. However, the algorithm  50  may readily be applied to the CFA  100  where the pixels  10  include other combinations of color filters, including but not limited to the cyan-magenta-yellow color space.  
         [0077]    In one embodiment, the color interpolation algorithm  50  reads the known green intensity values, G (block  502 ). Recall that the green values, G, are produced by the pixels  10   g  of the CFA  100  that have green filters. These known green values, G, are used to estimate the unknown green values, which correspond to the pixels  10   b  and  10   r  that have blue and red filters, respectively (block  504 ). This green estimation is performed as described in FIGS.  3 A- 3 E, above.  
         [0078]    Once green values are known for all the image data, in one embodiment, the color interpolation algorithm  50  assigns red (blue) hue to pixels with known red (blue) values (block  506 ), according to the formula shown. The color interpolation algorithm  50  performs subsequent estimation on hue values, not intensity values, according to one embodiment. As described in FIGS.  5 A- 5 D,  6 A- 6 C,  7 A- 7 D, and  8 A- 8 C, the unknown red (blue) hues corresponding to various pixel locations in the image data are interpolated from known red (blue) hues (block  508 ).  
         [0079]    Once the red (blue) hues, H R  (H B ), are known, the red (blue) values, R (B), may be derived, using the same hue formula, rearranged (block  510 ). The estimation of red hues may precede the estimation of blue hues, or vice-versa.  
         [0080]    Once the estimation of red and blue hues is complete, the image may be reconstructed using the interpolated image data  80  produced by the color interpolation algorithm  50 . By emphasizing the accurate estimation of the green color, the CFA  100  facilitates better performance of the color interpolation algorithm  50 , in some embodiments.  
         [0081]    While the present invention has been described with respect to a limited number of embodiments, those skilled in the art will appreciate numerous modifications and variations therefrom. It is intended that the appended claims cover all such modifications and variations as fall within the true spirit and scope of this present invention.