# Patent

## Title
System and method of bilateral image filtering

## Abstract

A method includes generating a first principle bilateral filtered image component from a source image. The first principle bilateral filtered image component corresponds to a second pixel value of a set, the second pixel value greater than or equal to a first pixel value. The method includes selectively updating a result pixel of a result image based on the first principle bilateral filtered image component and deallocating the first principle bilateral filtered image component. After deallocating the first principle bilateral filtered image component, a second principle bilateral filtered image component is generated from the source image. The second principle bilateral filtered image component corresponds to a third pixel value. The third pixel value is greater than the second pixel value. The third pixel value is less than or equal to a fourth pixel value. The result pixel is selectively updated based on the second principle bilateral filtered image component.

## Background
FIELD OF THE DISCLOSURE
The present disclosure is generally related to bilateral image filtering.
BACKGROUND
A bilateral filter is an edge-preserving smoothing filter. Bilateral filtering is a non-linear filtering technique that may combine image information from two domains. For example, in image editing, a bilateral filter may use spatial information and intensity information. Since the bilateral filter is essentially a non-linear filter, the bilateral filter may be computationally expensive to implement.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram to illustrate a first particular embodiment of a system that is operable to perform bilateral filtering of an image;
FIG. 2 is a block diagram to illustrate a second particular embodiment of the system of FIG. 1;
FIG. 3 is a diagram to illustrate a particular embodiment of operation of the principle bilateral filtered image component (PBFIC) generator of the system of FIG. 1,
FIG. 4 is a diagram to illustrate a particular embodiment of operation of the result image updater of the system of FIG. 1;
FIG. 5 is a flowchart to illustrate a particular embodiment of a method of performing bilateral filtering of an image;
FIG. 6 is a flow chart to illustrate a particular embodiment of generating a principle bilateral filtered image component;
FIG. 7 is a flow chart to illustrate a particular embodiment of selectively updating a result pixel based on a principle bilateral filtered image component; and
FIG. 8 is a block diagram of an illustrative embodiment of a general computer system operable to support embodiments of computer-implemented methods, computer program products, and system components as illustrated in FIGS. 1-7.



DETAILED DESCRIPTION
A system and method of bilateral image filtering is disclosed. The disclosed techniques may utilize an adaptive filtering framework that is sensitive to edges and other local image features and that may store in memory no more than one principle bilateral filtered image component at a time during computation, thereby achieving bilateral filtering with a reduced memory footprint as compared to other techniques. The disclosed techniques may be used for real time or near-real time filtering of color images (e.g., bilateral filtering of interactive applications).
For example, a source image may be received. Based on the source image, multiple principle bilateral filtered image components (PBFICs) may be iteratively generated and stored in memory. Each of the PBFICs may correspond to a particular pixel value of a subset of pixel values (e.g., pixel values 0, 50, 100, 150, 200, and 255 when possible pixel values range from 0 to 255). The subset of pixel values may be determined from the source image, from user input, or any combination thereof. Each of the PBFICs may represent a spatially filtered image of a range filtration performed on the source image, as further described with reference to FIGS. 1 and 3. The PBFICs may be used in turn to update a result image that is initialized to a blank image, as further described with reference to FIGS. 1 and 4. Each pixel in the source image may have a pixel value that falls within two pixel values of the subset (e.g., a pixel in the source image at coordinates (3, 3) may have a value of 40 which falls between 0 and 50). A result pixel corresponding to the source pixel may receive a contribution from the PBFICs corresponding to each of the two values in the subset (e.g., a pixel in the result image at coordinates (3, 3) may receive a contribution from PBFIC0 in a first iteration and a contribution from PBFIC50 in a next iteration). PBFICs may be generated and used to update the result image one-at-a-time. After being used to update the result image, a PBFIC may be deallocated (e.g., by marking for deletion, deleting, making unavailable, etc). Hence, unlike existing bilateral filtering methods that require all PBFICs to be available, at most one PBFIC may need to be allocated in memory at a time during operation of the technique disclosed herein. The reduction in memory footprint may make the disclosed technique well-suited for implementation in low memory scenarios (e.g., mobile devices) and for color image filtering.
The disclosed techniques may provide various advantages over other bilateral filtering schemes. As used herein, the notation I({right arrow over (x)}) represents the value of an image at a pixel x, and fR(I({right arrow over (x)}), I({right arrow over (y)})) denotes a range filter kernel applied to the value of pixel x and a value of pixel y. The output of the range filter kernel may depend on the pixel values of the pixels x and y, e.g., as described further with reference to FIG. 3. A function ƒS({right arrow over (x)}, {right arrow over (y)}) denotes a spatial filter kernel applied to the pixels x and y. The output of the spatial filter kernel may depend on the locations of the pixels x and y, e.g., as described further with reference to FIG. 3. IB({right arrow over (x)}) denotes the output of a bilateral filtering operation on the pixel x and may be represented by the expression:




  
    
      
        
          
            
              I
              B
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
          =
          
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    f
                    R
                  
                  ⁡
                  
                    (
                    
                      
                        I
                        ⁡
                        
                          (
                          
                            x
                            ->
                          
                          )
                        
                      
                      ,
                      
                        I
                        ⁡
                        
                          (
                          
                            y
                            ->
                          
                          )
                        
                      
                    
                    )
                  
                
                ·
                
                  I
                  ⁡
                  
                    (
                    
                      y
                      ->
                    
                    )
                  
                
              
            
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    f
                    R
                  
                  ⁡
                  
                    (
                    
                      
                        I
                        ⁡
                        
                          (
                          
                            x
                            ->
                          
                          )
                        
                      
                      ,
                      
                        I
                        ⁡
                        
                          (
                          
                            y
                            ->
                          
                          )
                        
                      
                    
                    )
                  
                
              
            
          
        
        ,
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          1
        
        )
      
    
  




where N({right arrow over (x)}) is the neighborhood of pixel x.

An example of the spatial filter kernel fS({right arrow over (x)}, {right arrow over (y)}) may be a Gaussian-like spatial filter kernel represented by the expression:




  
    
      
        
          
            
              f
              S
            
            ⁡
            
              (
              
                
                  x
                  ->
                
                ,
                
                  y
                  ->
                
              
              )
            
          
          =
          
            exp
            ⁡
            
              (
              
                -
                
                  
                    
                      
                      
                        
                          x
                          ->
                        
                        -
                        
                          y
                          ->
                        
                      
                      
                    
                    2
                  
                  
                    2
                    ⁢
                    
                      
                    
                    ⁢
                    
                      σ
                      S
                      2
                    
                  
                
              
              )
            
          
        
        ,
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          2
        
        )
      
    
  




where exp represents an exponential function and σS is the spatial filter variance.

An example of the range filter kernel fR(I({right arrow over (x)}), I({right arrow over (y)})) may be a Gaussian-like range filter kernel represented by the expression:




  
    
      
        
          
            
              f
              R
            
            ⁡
            
              (
              
                
                  I
                  ⁡
                  
                    (
                    
                      x
                      ->
                    
                    )
                  
                
                ,
                
                  I
                  ⁡
                  
                    (
                    
                      y
                      ->
                    
                    )
                  
                
              
              )
            
          
          =
          
            exp
            ⁡
            
              (
              
                -
                
                  
                    
                      
                      
                        
                          I
                          ⁡
                          
                            (
                            
                              x
                              ->
                            
                            )
                          
                        
                        -
                        
                          I
                          ⁡
                          
                            (
                            
                              y
                              ->
                            
                            )
                          
                        
                      
                      
                    
                    2
                  
                  
                    2
                    ⁢
                    
                      σ
                      R
                      2
                    
                  
                
              
              )
            
          
        
        ,
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          3
        
        )
      
    
  




where σR is the range filter variance.

Other generalizations may be used for the range filter and the spatial filter, such as a box-filter instead of the Gaussian-like spatial filter. Another generalization, namely joint bilateral filtering, may enable the range filter kernel fR(I({right arrow over (x)}),I({right arrow over (y)})) to operate on values of pixels of a secondary image. IJB({right arrow over (x)}) denotes the output of a joint bilateral filtering operation on the pixel x and may be represented as:




  
    
      
        
          
            
              I
              JB
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
          =
          
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    f
                    R
                  
                  ⁡
                  
                    (
                    
                      
                        
                          I
                          *
                        
                        ⁡
                        
                          (
                          
                            x
                            ->
                          
                          )
                        
                      
                      ,
                      
                        
                          I
                          *
                        
                        ⁡
                        
                          (
                          
                            y
                            ->
                          
                          )
                        
                      
                    
                    )
                  
                
                ·
                
                  I
                  ⁡
                  
                    (
                    
                      y
                      ->
                    
                    )
                  
                
              
            
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    f
                    R
                  
                  ⁡
                  
                    (
                    
                      
                        
                          I
                          *
                        
                        ⁡
                        
                          (
                          
                            x
                            ->
                          
                          )
                        
                      
                      ,
                      
                        
                          I
                          *
                        
                        ⁡
                        
                          (
                          
                            y
                            ->
                          
                          )
                        
                      
                    
                    )
                  
                
              
            
          
        
        ,
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          4
        
        )
      
    
  




where I*({right arrow over (x)}) denotes the pixel value of a corresponding pixel x in the secondary image.

For a digital image, there are only a finite number of pixel values for each pixel (e.g., kε{0, 1, 2, . . . 255}). For each pixel value k in a given image, the following two quantities are functions of the pixel y:

Wk({right arrow over (y)})≡fR(k,I({right arrow over (y)})),

Jk({right arrow over (y)})≡Wk({right arrow over (y)})·I({right arrow over (y)})  (Equation 5).

Thus, Equation 1 may be re-written as

IB({right arrow over (x)})=II({right arrow over (x)})B({right arrow over (x)})  (Equation 6).

where





  
    
      
        
          
            
              I
              k
              B
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
          ≡
          
            
              
                J
                
                  I
                  ⁡
                  
                    (
                    
                      x
                      ->
                    
                    )
                  
                
                ′
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            
              
                W
                
                  I
                  ⁡
                  
                    (
                    
                      x
                      ->
                    
                    )
                  
                
                ′
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
          
        
        =
        
          
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    J
                    k
                  
                  ⁡
                  
                    (
                    
                      y
                      ->
                    
                    )
                  
                
              
            
            
              
                ∑
                
                  
                    y
                    ->
                  
                  ∈
                  
                    N
                    ⁡
                    
                      (
                      
                        x
                        ->
                      
                      )
                    
                  
                
              
              ⁢
              
                
                  
                    f
                    S
                  
                  ⁡
                  
                    (
                    
                      
                        x
                        ->
                      
                      ,
                      
                        y
                        ->
                      
                    
                    )
                  
                
                ·
                
                  
                    W
                    k
                  
                  ⁡
                  
                    (
                    
                      y
                      ->
                    
                    )
                  
                
              
            
          
          .
        
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          7
        
        )
      
    
  




By sweeping through the possible pixel values (e.g., kε{0, 1, 2, . . . 255}), the bilateral filtered value for each pixel may be determined. IkB({right arrow over (x)}) denotes a principle bilateral filtered image component (PBFIC) corresponding to pixel value k.
Computational resources may be saved by generating principle bilateral filtered image components corresponding to a subset of the possible pixel values (e.g., L0, L1, . . . LK−1, where K<256) instead of all possible pixel values. The bilateral filtered value IB({right arrow over (x)}) may be interpolated from ILi−1B({right arrow over (x)}) and ILiB({right arrow over (x)}).
IB({right arrow over (x)}) may be written as:




  
    
      
        
          
            I
            B
          
          ⁡
          
            (
            
              x
              ->
            
            )
          
        
        =
        
          
            
              
                
                  L
                  i
                
                -
                
                  I
                  ⁡
                  
                    (
                    
                      x
                      ->
                    
                    )
                  
                
              
              
                
                  L
                  i
                
                -
                
                  L
                  
                    i
                    -
                    1
                  
                
              
            
            ⁢
            
              
                I
                
                  L
                  
                    i
                    -
                    1
                  
                
                B
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
          
          +
          
            
              
                
                  I
                  ⁢
                  
                    (
                    
                      x
                      ->
                    
                    )
                  
                
                -
                
                  L
                  
                    i
                    -
                    1
                  
                
              
              
                
                  L
                  i
                
                -
                
                  L
                  
                    i
                    -
                    1
                  
                
              
            
            ⁢
            
              
                
                  I
                  
                    L
                    i
                  
                  B
                
                ⁡
                
                  (
                  
                    x
                    ->
                  
                  )
                
              
              .
            
          
        
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          8
        
        )
      
    
  




Equation 8 includes both Li and Li−1. Bilateral filtering based on Equation 8 may require all PBFICs to be stored in memory before a result image may be generated. However, Equation 8 may be decomposed into two independent steps as follows:

ÎB({right arrow over (x)})=α(I({right arrow over (x)}),i−1)ILi−1B({right arrow over (x)})  (Equation 9)

IB({right arrow over (x)})=ÎB({right arrow over (x)})+α(I({right arrow over (x)}),i)ILiB({right arrow over (x)})  (Equation 10),

where





  
    
      
        
          α
          ⁡
          
            (
            
              k
              ,
              i
            
            )
          
        
        =
        
          
            
              
                
                  
                    L
                    
                      i
                      +
                      1
                    
                  
                  -
                  k
                
                
                  
                    L
                    
                      i
                      +
                      1
                    
                  
                  -
                  
                    L
                    i
                  
                
              
              ⁢
              for
              ⁢
              
                
              
              ⁢
              k
            
            ≥
            
              
                L
                i
              
              ⁢
              
                
              
              ⁢
              and
              ⁢
              
                
              
              ⁢
              
                α
                ⁡
                
                  (
                  
                    k
                    ,
                    i
                  
                  )
                
              
            
          
          =
          
            
              
                
                  k
                  -
                  
                    L
                    
                      i
                      -
                      1
                    
                  
                
                
                  
                    L
                    i
                  
                  -
                  
                    L
                    
                      i
                      -
                      1
                    
                  
                
              
              ⁢
              for
              ⁢
              
                
              
              ⁢
              k
            
            <
            
              
                L
                i
              
              .
            
          
        
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          11
        
        )
      
    
  




Equations 9 and 10 include one of Li and Li−1. Instead of interpolating between ILi−1B({right arrow over (x)}) and if ILiB({right arrow over (x)}), the contribution from ILi−1B({right arrow over (x)}) may be blended into a blank image to generate an intermediate image ÎB({right arrow over (x)}), and then a contribution from ILiB({right arrow over (x)}) may be blended into the intermediate image ÎB({right arrow over (x)}) to generate the result image IB({right arrow over (x)}), as described further with reference to FIG. 4. ILi−1B({right arrow over (x)}) may be generated first, stored in memory, used to generate the intermediate image ÎB({right arrow over (x)}) based on Equations 9 and 11, and deallocated. IKiB({right arrow over (x)}) may be generated next, stored in the memory, used to generate the result image IB({right arrow over (x)}) based on Equations 10 and 11, and deallocated. Thus, bilateral filtering based on Equations 9-11 may need at most one PBFIC stored in the memory at a time. Pseudo-code for an algorithm of bilateral image filtering based on Equations 9-11 may be written as:

















Initialize image IB to 0; L−1≡L0; LK≡LK−1.




for i=0 to (K−1) do




  Compute PBFIC ILiB ({right arrow over (x)});




  for each pixel x do




    if I({right arrow over (x)}) ε[Li−1, Li+1) then




      IB ({right arrow over (x)}) ← IB({right arrow over (x)}) + α(I({right arrow over (x)}),i) * ILiB({right arrow over (x)});




    endif




  endfor




endfor










The algorithm described above may be used for grayscale bilateral filtering, as further described with reference to FIG. 1. The algorithm may also be generalized for color bilateral filtering, where each pixel has three color components (Ir, Ig, Ib), as further described with reference to FIG. 2. A PBFIC(Lr,Lg,Lb) may be computed using:

WLr,Lg,Lb({right arrow over (y)})≡fR((Lr,Lg,Lb),I({right arrow over (y)})),

JLr,Lg,Lb({right arrow over (y)})≡WLr,Lg,Lb({right arrow over (y)})·I({right arrow over (y)})  (Equation 12)

The filtered value of the pixel x may be interpolated using values at corresponding pixel locations from 8 PBFICs, i.e., PBFIC(Lr, Lg, Lb) for which (Lr,Lg,Lb)ε{Lir−1r,Lirr}×{Lug−1g,Ligg}×{Lib−1b,Libb}. The algorithm for color bilateral filtering may be written as:












Initialize image IB to (0,0,0); L-1c ≡ L0c and LKc ≡ LK-1c for c=r, g, b.


for ir=0 to (Kr-1) do


 for ig=0 to (Kg-1) do


  for ib=0 to (Kb-1) do


 


   



  
    Compute
    ⁢
    
      
    
    ⁢
    PBFIC
    ⁢
    
      
    
    ⁢
    
      
        I
        
          
            L
            
              i
              r
            
            r
          
          ,
          
            L
            
              i
              g
            
            g
          
          ,
          
            L
            
              i
              b
            
            b
          
        
        B
      
      ⁡
      
        (
        
          x
          ->
        
        )
      
    
  
  ;






 


   for each pixel x do


 


    



  
    
      
        
          if
          ⁢
          
            
          
          ⁢
          
            
              I
              r
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
        
        ∈
        
          
            [
            
              
                L
                
                  
                    i
                    r
                  
                  -
                  1
                
                r
              
              ,
              
                L
                
                  
                    i
                    r
                  
                  +
                  1
                
                r
              
            
            )
          
          ⁢
          
            
          
          ⁢
          and
          ⁢
             
          ⁢
          
            
              I
              g
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
        
        ∈
        
          
            [
            
              
                L
                
                  
                    i
                    g
                  
                  -
                  1
                
                g
              
              ,
              
                L
                
                  
                    i
                    g
                  
                  +
                  1
                
                g
              
            
            )
          
          ⁢
          
            
          
          ⁢
          and
        
      
    
  
  
    
      
        
        ⁢
        
          
            
              I
              b
            
            ⁡
            
              (
              
                x
                ->
              
              )
            
          
          ∈
          
            
              [
              
                
                  L
                  
                    
                      i
                      b
                    
                    -
                    1
                  
                  b
                
                ,
                
                  L
                  
                    
                      i
                      b
                    
                    +
                    1
                  
                  b
                
              
              )
            
            ⁢
            
              
            
            ⁢
            then
          
        
      
    
  






 


     



  
    
      I
      r
      B
    
    ⁡
    
      (
      
        x
        ->
      
      )
    
  
  ←
  
    
      
        I
        r
        B
      
      ⁡
      
        (
        
          x
          ->
        
        )
      
    
    +
    
      

    
    ⁢
    
      
    
    ⁢
    
      
        α
        ⁡
        
          (
          
            
              
                I
                r
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                g
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                b
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              i
              r
            
            ,
            
              i
              g
            
            ,
            
              i
              b
            
          
          )
        
      
      *
      
        
          I
          
            L
            
              i
              r
            
          
          B
        
        ⁡
        
          (
          
            x
            ->
          
          )
        
      
    
  






 


     



  
    
      I
      g
      B
    
    ⁡
    
      (
      
        x
        ->
      
      )
    
  
  ←
  
    
      
        I
        g
        B
      
      ⁡
      
        (
        
          x
          ->
        
        )
      
    
    +
    
      

    
    ⁢
    
      
    
    ⁢
    
      
        α
        ⁡
        
          (
          
            
              
                I
                r
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                g
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                b
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              i
              r
            
            ,
            
              i
              g
            
            ,
            
              i
              b
            
          
          )
        
      
      *
      
        
          I
          
            L
            
              i
              g
            
          
          B
        
        ⁡
        
          (
          
            x
            ->
          
          )
        
      
    
  






 


     



  
    
      I
      b
      B
    
    ⁡
    
      (
      
        x
        ->
      
      )
    
  
  ←
  
    
      
        I
        b
        B
      
      ⁡
      
        (
        
          x
          ->
        
        )
      
    
    +
    
      

    
    ⁢
    
      
    
    ⁢
    
      
        α
        ⁡
        
          (
          
            
              
                I
                r
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                g
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              
                I
                b
              
              ⁡
              
                (
                
                  x
                  ->
                
                )
              
            
            ,
            
              i
              r
            
            ,
            
              i
              g
            
            ,
            
              i
              b
            
          
          )
        
      
      *
      
        
          I
          
            L
            
              i
              b
            
          
          B
        
        ⁡
        
          (
          
            x
            ->
          
          )
        
      
    
  






 


     endif


    endfor


   endfor


  endfor


 endfor


where α(kr,kg,kb,ir,ig,ib)=α(kr,ir)*α(kg,ig)*α(kb,ib) and


 






  
    α
    ⁡
    
      (
      
        
          k
          c
        
        ,
        
          i
          c
        
      
      )
    
  
  =
  
    
      
        
          
            L
            
              
                i
                c
              
              +
              1
            
            c
          
          -
          
            k
            c
          
        
        
          
            L
            
              
                i
                c
              
              +
              1
            
            c
          
          -
          
            L
            
              i
              c
            
            c
          
        
      
      ⁢
      for
      ⁢
      
        
      
      ⁢
      
        k
        c
      
    
    ≥
    
      L
      
        i
        c
      
      c
    
  



and 



  
    α
    ⁡
    
      (
      
        
          k
          c
        
        ,
        
          i
          c
        
      
      )
    
  
  =
  
    
      
        
          k
          -
          
            L
            
              
                i
                c
              
              -
              1
            
            c
          
        
        
          
            L
            
              i
              c
            
            c
          
          -
          
            L
            
              
                i
                c
              
              -
              1
            
            c
          
        
      
      ⁢
      for
      ⁢
      
        
      
      ⁢
      
        k
        c
      
    
    <
    
      L
      
        i
        c
      
      c
    
  



(Equation 13),


 


for c=r, g, b.









The color bilateral filtering may be performed on a downsampled image of an original image. However, the full resolution original image may still be used to determine α(kc,ic).
The components of a color space may be highly correlated. Thus, color bilateral filtering may be performed on an orthogonally color transformed image of the original image to reduce the correlation of the color components, as described with reference to FIG. 2. The reduced correlation of the color components may enable bilateral filtering to be performed on the orthogonally color transformed image using fewer PBFICs than the original image. An orthogonal transformation may be a dot product of the source image with an orthogonal transform (i.e., a square matrix such that an inverse of the square matrix is equal to a transpose of the square matrix). For example, the following integer transform may be used:




  
    
      
        T
        =
        
          
            [
            
              
                
                  1
                
                
                  1
                
                
                  1
                
              
              
                
                  0
                
                
                  1
                
                
                  
                    -
                    1
                  
                
              
              
                
                  2
                
                
                  
                    -
                    1
                  
                
                
                  
                    -
                    1
                  
                
              
            
            ]
          
          .
        
      
    
    
      
        (
        
          Equation
          ⁢
          
            
          
          ⁢
          14
        
        )
      
    
  




It may be noted that T may not define an orthogonal transform without dividing with normalization factor (√{square root over (3)}, √{square root over (2)}, √{square root over (6)}). However, because only the difference between the color components may be of interest, the normalization may be carried out when generating W and J values. The same normalization may be carried out on the difference between the consecutive principle bilateral filtered component levels, e.g., Li−1r and Lir, to prevent degradation of filter quality. The transform may change the dynamic range of each color channel so a search may be performed in the transformed image to find minimum and maximum color component values. Utilizing T, the number of principle bilateral filtered image components used for color bilateral filtering may be reduced from 6×6×6 (i.e., 216) to 10×3×3 (i.e., 90). The transformed image may be used to form the W image according to Equation 12. However, to form the J image, the original image may be used to determine I({right arrow over (y)}) in Equation 12. This combination of the W image and the J image may be considered a joint bilateral filtering where the transformed image is the secondary image in Equation 4.

In a particular embodiment, a method includes generating a first principle bilateral filtered image component from a source image. The first principle bilateral filtered image component corresponds to a second pixel value of a set of pixel values. The second pixel value is greater than or equal to a first pixel value of the set of pixel values. The method includes selectively updating a result pixel of a result image based on the first principle bilateral filtered image component and deallocating the first principle bilateral filtered image component. After deallocating the first principle bilateral filtered image component, a second principle bilateral filtered image component is generated from the source image. The second principle bilateral filtered image component corresponds to a third pixel value of the set of pixel values. The third pixel value is greater than the second pixel value. The third pixel value is less than or equal to a fourth pixel value of the set of pixel values. The result pixel is selectively updated based on the second principle bilateral filtered image component.
In another particular embodiment, a system includes one or more processors and a principle bilateral filtered image component generator executable by the one or more processors to generate a first principle bilateral filtered image component from a source image. The first principle bilateral filtered image component corresponds to a second pixel value of a set of pixel values. The second pixel value is greater than or equal to a first pixel value of the set of pixel values. The principle bilateral image component generator is also executable by the one or more processors to, after the first principle bilateral filtered image component is deallocated, generate a second principle bilateral filtered image component from the source image. The second principle bilateral filtered image component corresponds to a third pixel value of the set of pixel values. The third pixel value is less than or equal to a fourth pixel value of the set of pixel values. The system includes a result image updater executable by the one or more processors to selectively update a result pixel of a result image based on the first principle bilateral filtered image component, deallocate the first principle bilateral filtered image component, and selectively update the result pixel based on the second principle bilateral filtered image component.
In another particular embodiment, a computer-readable medium stores instructions that, when executed by a processor, cause the processor to generate a first principle bilateral filtered image component from a source image. The first principle bilateral filtered image component corresponds to a second pixel value of a set of pixel values. The instructions are also executable to cause the processor to determine whether a source pixel of the source image has a pixel value between a first pixel value of the set and a third pixel value of the set, where the first pixel value is less than or equal to the second pixel value and the third pixel value is greater than or equal to the second pixel value. The instructions are further executable to cause the processor to, when the pixel value is between the first pixel value and the third pixel value, update a result pixel in a result image based on the first principle bilateral filtered image component. The instructions are further executable to cause the processor to deallocate the first principle bilateral filtered image component and after deallocating the first principle bilateral filtered image component, generate a second principle bilateral filtered image component from the source image. The second principle bilateral filtered image component corresponds to the third pixel value. The instructions are further executable to cause the processor to determine whether the pixel value of the source pixel is between the second pixel value and a fourth pixel value, where the fourth pixel value is greater than or equal to the third pixel value. The instructions are further executable to cause the processor to, when the pixel value is between the second pixel value and the fourth pixel value, update the result pixel based on the second principle bilateral filtered image component.
Referring to FIG. 1, a block diagram of a particular embodiment of a system that is operable to perform bilateral filtering of an image is illustrated and is generally designated 100. In particular embodiments, components of the system 100 may be implemented in hardware and/or as instructions executable by a processor, such as a dedicated graphics processing unit (GPU) or other processor, as further described with reference to FIG. 8.
The system 100 includes a PBFIC generator 114 that receives a source image 104 as input. In a particular embodiment, the source image 104 is represented by digital data. In some embodiments, the system 100 may further include a downsampler 110 configured to generate the source image 104 from a received image 102. The source image 104 may be a low-resolution image generated by downsampling the received image 102. Alternatively, or in addition, the system 100 may include an orthogonal color transformer 112 configured to generate the source image 104 from the received image 102. The source image 104 may be generated by orthogonally transforming the received image 102 such that color components of pixel values of the source image 104 have a reduced correlation compared to color components of pixel values of the received image 102. When the orthogonal color transformer 112 is used, fewer principle bilateral filtered image components may be generated while processing the color transformed source image 104 than the received image 102. In a particular embodiment, the orthogonal color transformer 112 may receive input from the downsampler 110. In another particular embodiment, the downsampler 110 may receive input from the orthogonal color transformer 112.
The PBFIC generator 114 may generate an nth PBFIC (denoted PBFICLn) 120, where Lnε{L0, L1, . . . LK−1} (e.g., Lnε{0, 50, 100, 150, 200, and 255} when pixel values are represented using 8 bits). L0, L1, . . . LK−1 may correspond to an intensity component of a pixel value and may be generated based on the source image 104. L0 may be less than or equal to a minimum source pixel value (e.g., 0) in the source image 104 and LK−1 may be greater than or equal to a maximum source pixel value (e.g., 255) in the source image 104. For example, the PBFICLn 120 may be generated by applying a range filter kernel fR(Ln,I({right arrow over (x)})) to each pixel x in the source image 104, where I({right arrow over (x)}) is a value of an intensity component of the pixel x, and then applying a spatial filter fS, as further described with reference to FIG. 3. The PBFICLn 120 may be stored in memory.
The system 100 may further include a result image updater 116 configured to selectively update result pixels of a result image 106 based on the PBFICLn 120. For example, each result pixel corresponding to a source pixel with a pixel value greater than or equal to Ln−1 and less than or equal to Ln+1 may receive a weighted contribution from the PBFICLn 120, as further described with reference to FIG. 4. The PBFICLn 120 may then be deallocated (e.g., deleted from the memory, marked for deletion, made unavailable to the result image updater 116, etc.) and the PBFIC generator 114 may iteratively generate another PBFIC (e.g., PBFICLn+1).
After all PBFICs (e.g., PBFIC0,PBFIC50, . . . PBFIC255) have been generated and used to update the result image 106, the result image 106 may represent a bilaterally filtered version of the source image 104.
The system 100 may thus enable bilateral filtering for images. Advantageously, at most only one principle bilateral filtered image component may be allocated and/or stored in the memory at any time. In a particular embodiment, the system 100 may be used for flash-no-flash image fusion. For example, a no-flash image may be used to capture ambient illumination and a flash image may be used to capture detail. The flash and no-flash images may be fused, using the system 100, to generate an image that captures both the ambient light and the detail. For example, image fusion may include bilateral color filtering of the no-flash image and the flash image. The image fusion may also include joint bilateral filtering of the no-flash image using the flash image as the secondary image. The system 100 may also be used in image abstraction.
Whereas FIG. 1 illustrates bilateral filtering of one-dimensional (e.g., grayscale) pixels, FIG. 2 illustrates an embodiment of the system 100 of FIG. 1, generally designated 200, that is operable to perform bilateral filtering on multi-dimensional (e.g., color) pixels. As shown in FIG. 2, each of the pixel values of the source image 104 may have color components (e.g., Lnε{(R0, G0, B0), (R0, G0, B50), (R0, G0, B100), (R0, G0, B150), . . . (R255, G255, B255)} where Rn is a red component, Gn is a green component, and Bn is a blue component). Alternatively, the color components of a pixel value may include a cyan component, a magenta component, a yellow component, and a black component. The PBFICLn 120 may correspond to a combination of the color components (e.g., (R0, G0, B0)) and the result image updater 116 may be configured to update the result pixel of the result image 106 when color components of a corresponding source pixel of the source image 104 are within particular ranges (e.g., the result pixel of the result image 106 may be updated if a red component of the corresponding source pixel is greater than or equal to Rn−1 and less than or equal to Rn+1, a green component of the corresponding source pixel is greater than or equal to Gn−1 and less than or equal to Gn+1, and a blue component of the corresponding source pixel is greater than or equal to Bn−1 and less than or equal to Bn+1).
During operation, the source image 104 may be received by the PBFIC generator 114, where each pixel in the source image 104 has color components. For example, as shown in FIG. 2, each pixel in the source image 104 may have a red component, a green component, and a blue component. PBFICs may be generated for combinations of the 3 color components corresponding to Lnε{0, 50, 100, 150, 200, 255} for each of red, green, and blue components (i.e., 6 red components×6 green components×6 blue components=216 PBFICs). When the orthogonal color transformer 112 is used, the number of PBFICs generated may be reduced to, for example, 10×3×3 (i.e., 90). After all PBFICs are generated and used, the result image 106 may represent a bilaterally filtered version of the source image 104.
The system 200 of FIG. 2 may thus enable bilateral filtering of a color image where at most one principle bilateral filtered image component is stored in memory at a time.
FIGS. 3-4 illustrate particular examples of operation of various components of the system 100 of FIG. 1 and the system 200 of FIG. 2. For example, FIG. 3 illustrates a particular example of operation of the PBFIC generator 114 of FIGS. 1-2, and is generally designated 300. As shown in FIG. 3, the PBFIC generator 114 may receive the source image 104 and may produce a PBFIC0306 (e.g., corresponding to the PBFICLn 120 of FIG. 1, where Ln=0).
The source image 104 may include a plurality of pixels. Each pixel in the source image 104 has coordinates (x, y). In a particular embodiment, the source image 104 has 4×4=16 pixels. A range kernel value map 304 may be generated by applying a range filter kernel fR(Ln,I({right arrow over (x)})) to each pixel x of the source image 104 (e.g., fR(0,120) for pixel at coordinates (0,3) with pixel value 120). The PBFIC0306 may be generated by applying the spatial filter fS to the range kernel value map 304. Applying the spatial filter fS may include determining a set of neighboring pixels of a pixel in the range kernel value map 304 and adding weighted values for each of the neighboring pixels to a value of the pixel, where the weight applied to a particular neighboring pixel is based on a spatial proximity of the particular neighboring pixel to the pixel. Neighboring pixels may be defined based on the spatial filter variance uS of the source image. For example, when the spatial filter variance uS is equal to 2, pixels that share a corner or an edge with a particular pixel may be considered neighbors of the particular pixel. To illustrate, the shaded pixels in the range kernel value map 304 may have neighbors N as follows. The shaded pixel at coordinates (0, 1) may share an edge with the pixels at coordinates (0, 0), (1, 1), and (0, 2), and share a corner with the pixels at coordinates (1, 0) and (1, 2). The shaded pixel at coordinates (2, 1) may share an edge with the pixels at coordinates (2, 0), (1, 1), (3, 1), and (2, 2), and share a corner with the pixels at coordinates (1, 0), (3, 0), (1, 2), and (3, 2). The shaded pixel at coordinates (0, 3) may share an edge with the pixels at coordinates (0, 2) and (1, 3), and share a corner with the pixel at coordinates (1, 2). The shaded pixel at coordinates (2, 3) may share an edge with the pixels at coordinates (2, 2), (1, 3), and (3, 3), and share a corner with the pixels at coordinates (1, 2) and (3, 2).
In a particular embodiment, the spatial filter may indicate that contributions from pixels sharing an edge have a higher weight (e.g., 1⁄2) than contributions from pixels sharing a corner (e.g., 1⁄4) and that a pixel may receive a full contribution from itself. Thus, in the PBFIC0306, the pixel at location (0, 3) receives a 1⁄2 weighted contribution from edge-sharing pixels (0, 2) and (1, 3), a 1⁄4 weighted contribution from corner-sharing pixel (1, 2), and a full contribution from itself. When σS is larger, more pixels may be considered neighboring pixels. For example, the pixels that share a corner or an edge with the neighboring pixels when σS is equal to 2 may also be considered neighbors when σS is equal to 3. The PBFICL0 306 may have a smaller pixel resolution (e.g., 2×2 in FIG. 2) than the source image 104 based on spatial filter variance the σS. When the resolution of the source image 104 is N×N, the resolution of the PBFICL0 306 may be X/σS×Y/σS. For example, the resolution of the source image 104 in FIG. 3 is 4×4 and the resolution of the PBFICL0 306 is 2×2 with σS=2. The PBFICL0 306 may be upsampled before being used to update the result image 106. In a particular embodiment, the upsampled PBFICL0 306 may include only the upsampled pixels that will be used to update the result image (i.e., pixels corresponding to source pixel values less than or equal to 50) instead of all the upsampled pixels.
FIG. 4 illustrates a particular embodiment of operation of generating a result image (e.g., at the result image updater 116 of FIGS. 1-2) and is generally designated 400. A result image 106a may be initialized by setting each result pixel to a first value (e.g., value 0). A PBFIC0402 may be generated by the PBFIC generator 114 of FIG. 1 for n=0. Based on the PBFIC0402, each result pixel of the result image 106a corresponding to a source pixel value less than or equal to Ln+1 (i.e., each result pixel corresponding to a source pixel of value ≦50) may be updated with a weighted contribution from PBFIC0402 to generate result image 106b according to the formulae:



  
    
      
        
          
            
              L
              
                n
                +
                1
              
            
            -
            
              source_pixel
              ⁢
              _value
            
          
          
            
              L
              
                n
                +
                1
              
            
            -
            
              L
              n
            
          
        
        ⁢
        when
        ⁢
        
          
        
        ⁢
        source_pixel
        ⁢
        _value
      
      ≥
      
        L
        n
      
    
    ,
    and
  




  
    
      
        
          
            source_pixel
            ⁢
            _value
          
          -
          
            L
            
              n
              -
              1
            
          
        
        
          
            L
            n
          
          -
          
            L
            
              n
              -
              1
            
          
        
      
      ⁢
      when
      ⁢
      
        
      
      ⁢
      source_pixel
      ⁢
      _value
    
    <
    
      
        L
        n
      
      .
    
  



For example, because the source pixel value (i.e., 40) at coordinates (3, 3) is less than Ln+1 (i.e., 50), the result pixel at coordinates (3, 3) may be updated using PBFIC0402. The source pixel value (i.e., 40) may be greater than Ln (i.e., 0), so the weight may be Ln+1 (i.e., 50)−the source pixel value (i.e., 40) divided by Ln+1 (i.e., 50)−Ln (i.e., 0). Thus, the result pixel at coordinates (3, 3) may be updated by 1⁄5 of the pixel value (i.e., indicated by a3,3) at coordinates (3, 3) of PBFIC0402. The PBFIC0402 may be deallocated after being used to update the result image 106a to the result image 106b. 
Next, PBFIC50404 may be generated by the PBFIC generator 114 of FIG. 1 for Ln=50. The PBFICL50 404 may be upsampled before being used to update the result image 106. In a particular embodiment, the upsampled PBFICL50 404 may include only the upsampled pixels that will be used to update the result image (i.e., pixels corresponding to source pixel values greater than or equal to 0 and less than or equal to 100) instead of all the upsampled pixels. Based on the PBFIC50404, each result pixel of the result image 106b corresponding to a source pixel value greater than or equal to Ln−1 and less than or equal to Ln+1 (i.e., each result pixel corresponding to a source pixel value ≧0 and ≦100) may be updated with a weighted contribution from PBFIC50404 to generate result image 106c. For example, because the source pixel value (i.e., 40) at coordinates (3, 3) is greater than or equal to Ln−1 (i.e., 0) and less than or equal to Ln+1 (i.e., 100), the result pixel at coordinates (3, 3) may be updated using PBFIC50404. The source pixel value (i.e., 40) may be less than Ln (i.e., 50), so the weight may be source pixel value (i.e., 40)−Ln−1 (i.e., 0) divided by Ln (i.e., 50)−Ln−1 (i.e., 0). Thus, the result pixel at coordinates (3, 3) may be updated by 4⁄5 of the pixel value (i.e., indicated by b3,3) at coordinates (3, 3) of PBF/C50404. The PBF/C50404 may be generated and deallocated after being used to update the result image 106b to a result image 106c. 
Similarly, a PBFIC may be generated for each remaining value of n in turn, the result pixels may be updated based on the generated PBFIC, and the PBFIC may be deallocated after updating the result pixels thereby producing a final result image 106d. 
It will be appreciated that by updating the result image based on weighted contributions from a single PBFIC at a time, as illustrated in FIG. 4, bilateral filtering may be performed by using at most one PBFIC allocated and/or stored in memory.
FIG. 5 is a flowchart to illustrate a particular embodiment of a method 500. In an illustrative embodiment, the method 500 may be performed by the system 100 of FIG. 1 and may be illustrated with reference to FIGS. 3-4.
The method 500 may include generating a first principle bilateral filtered image component from a source image, the first principle bilateral filtered image component corresponding to a first pixel value of a set of pixel values, at 502. For example, in FIG. 1 the PBFIC generator 114 may receive the source image 104 and may generate the PBFICLn 120. In an illustrative embodiment, the PBFIC generator 114 may generate PBFICLn 120, where Ln is a pixel value with color components, as described with reference to FIG. 2. For example, the PBFIC generator 120 may generate the PBFIC0306 (corresponding to the PBFICLn 120 of FIG. 1) by generating the range kernel value map 304 by applying the range filter kernel fR(Ln,I({right arrow over (x)})) to each source pixel x of the source image 104 and applying the spatial filter fS to the generated range kernel value map 304, as described with reference to FIG. 3.
The method 500 may also include selectively updating a result pixel of a result image based on the first principle bilateral filtered image component, at 504, and deallocating the first principle bilateral filtered image component, at 506. The method 500 may further include, after deallocating the first principle bilateral filtered image component, generating a second principle bilateral filtered image component from the source image and corresponding to a second pixel value, at 508, and selectively updating the result pixel based on the second principle bilateral filtered image component, at 510. For example, in FIG. 1 the result image updater 116 may selectively update the result image 106 based on the PBFICLn 120, deallocate the PBFICLn 120, and then generate PBFICLn+1 for use by the result image updater 116 to update the result image 106. In an illustrative embodiment, the result image updater 116 may update the result image 106 as shown in FIG. 4.
FIG. 6 is a flowchart to illustrate a particular embodiment of a method 600 of generating a PBFIC. In an illustrative embodiment, the method 600 may be performed to generate the first PBFIC at step 502 and the second PBFIC at step 508 of the method 500 of FIG. 5.
The method 600 may include generating a range kernel value map by applying a range filter kernel to the source image based on a first pixel value, at 602. The method 600 may also include applying a spatial filter to the range kernel value map, at 604. For example, the PBFIC generator 114 may apply the range filter kernel fR to the source image 104 to generate the range kernel value map 304 and then apply the spatial filter fS to the range kernel value map 304, as described with reference to FIG. 3.
FIG. 7 is a flowchart to illustrate a particular embodiment of a method 700 of updating a result image. In an illustrative embodiment, the method 700 may be performed to update the result image at step 504 of the method 500 of FIG. 5.
The method 700 may include determining whether a source pixel of a source image has a pixel value between a first pixel value of a set and a third pixel value of the set, where the first pixel value is less than or equal to a second pixel value of the set and the third pixel value is greater than or equal to the second pixel value, at 702. The method 700 may also include, in response to determining that the second pixel value is between the first pixel value and the third pixel value, updating a result pixel with a weighted contribution from a corresponding pixel value of a first principle bilateral filtered image component, at 704. For example, the result image updater 116 may determine whether the source pixel at location (3,3) of the source image 104 has a value between 0 and 100. In response to determining that the value 40 of the source pixel is between 0 and 100, the result image updater 116 may update the result pixel at location (3,3) with a weighted contribution from a corresponding pixel value of the PBFIC50 404 (i.e., update the result image 106b at location (3,3) with 4⁄5 b3,3), as described with reference to FIG. 4.
Referring to FIG. 8, an illustrative embodiment of a general computer system is shown and is designated 800. For example, the computer system 800 may include, implement, or be implemented by one or more components of the system 100 of FIG. 1. The computer system 800 includes or has access to a set of instructions that can be executed to cause the computer system 800 to perform any one or more of the methods and computer-based and/or processor-based functions disclosed herein. The computer system 800, or any portion thereof, may operate as a standalone device or may be connected, e.g., using a network, to other computer systems or peripheral devices.
In a networked deployment, the computer system 800 may operate in the capacity of a set-top box device, a personal computing device, a mobile computing device, or some other computing device. The computer system 800 can also be implemented as or incorporated into various devices, such as a personal computer (PC), a tablet PC, a personal digital assistant (PDA), a mobile device, a palmtop computer, a laptop computer, a desktop computer, a communications device, a web appliance, a television or other display device, or any other machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. In a particular embodiment, the computer system 800 can be implemented using electronic devices that provide voice, video, or data communication. Further, while a single computer system 800 is illustrated, the term “system” shall also be taken to include any collection of systems or sub-systems that individually or jointly execute a set, or multiple sets, of instructions to perform one or more computer functions.
As illustrated in FIG. 8, the computer system 800 may include a processor 802, e.g., a central processing unit (CPU). The computer system 800 may also include a graphics processor 803, (e.g., a dedicated graphics processor). In a particular embodiment, the graphics processor 803 may include hardware corresponding to components of the system 100 of FIG. 1 and/or execute instructions corresponding to components of the system 100 of FIG. 1, such as the orthogonal color transformer 112 of FIG. 1, the downsampler 110 of FIG. 1, the PBFIC generator 114 of FIG. 1, and the result image updater 116 of FIG. 1. The graphics processor 803 may also be operable to perform processes and methods disclosed herein, such as the methods FIGS. 5-7. In a particular embodiment, the graphics processor 803 may execute instructions via compute unified device architecture (CUDA), a parallel graphics computing platform that enables programming instructions in languages such as C, C++, and FORTRAN to be issued to a graphics processor. In one implementation, the graphics processor 803 may achieve real time or near-real time bilateral filtering performance at rates of approximately 24-60 frames per second on 1.25 mega pixel images.
Moreover, the computer system 800 can include a main memory 804 and a static memory 806 that can communicate with each other via a bus 808. As shown, the computer system 800 may further include or be coupled to a video display unit 810, such as a liquid crystal display (LCD), an organic light emitting diode (OLED), a flat panel display, a solid-state display, or a projection display. For example, the video display unit 810 may be an HD television or monitor. Additionally, the computer system 800 may include an input device 812, such as a keyboard, a remote control device, and a cursor control device 814, such as a mouse. In a particular embodiment, the cursor control device 814 may be incorporated into a remote control device such as a television or set-top box remote control device. The computer system 800 can also include a disk drive unit 816, a signal generation device 818, such as a speaker or remote control device, and a network interface device 820. The network interface device 820 may be coupled to other devices (not shown) via a network 826.
In a particular embodiment, as depicted in FIG. 8, the disk drive unit 816 may include a computer-readable non-transitory medium 822 in which one or more sets of instructions 824, e.g. software, can be embedded. Further, the instructions 824 may embody one or more of the methods or logic as described herein. In a particular embodiment, the instructions 824 may reside completely, or at least partially, within the main memory 804, the static memory 806, and/or within the processor 802 and/or the graphics processor 803 during execution by the computer system 800. The main memory 804, the processor 802, and the graphics processor 803 also may include (e.g., on-board) computer-readable non-transitory media.
In an alternative embodiment, dedicated hardware implementations, such as application specific integrated circuits, programmable logic arrays and other hardware devices, can be constructed to implement one or more of the methods described herein. Applications that may include the apparatus and systems of various embodiments can broadly include a variety of electronic and computer systems. One or more embodiments described herein may implement functions using two or more specific interconnected hardware modules or devices with related control, or as portions of an application-specific integrated circuit. Accordingly, the present system encompasses software, firmware, and hardware implementations.
In accordance with various embodiments of the present disclosure, the methods described herein may be implemented by software programs executable by a computer system. Further, in an exemplary, non-limited embodiment, implementations can include distributed processing and parallel processing. Alternatively, virtual computer system processing can be constructed to implement one or more of the methods or functionality as described herein.
The present disclosure contemplates a computer-readable non-transitory medium that includes instructions 824 so that a device connected to a network 826 can communicate voice, video, or data over the network 826. Further, the instructions 824 may be transmitted or received over the network 826 via the network interface device 820 (e.g., via uploading and/or downloading of an image filtering application or program).
While the computer-readable non-transitory medium is shown to be a single medium, the term “computer-readable medium” includes a single medium or multiple media, such as a centralized or distributed database, and/or associated caches and servers that store one or more sets of instructions. The term “non-transitory computer-readable medium” shall also include any medium that is capable of storing a set of instructions for execution by a processor or that cause a computer system to perform any one or more of the methods or operations disclosed herein.
In a particular non-limiting, exemplary embodiment, the computer-readable non-transitory medium can include a solid-state memory such as a memory card or other package that houses one or more non-volatile read-only memories. Further, the computer-readable non-transitory medium can be a random access memory or other volatile re-writable memory. Additionally, the computer-readable non-transitory medium can include a magneto-optical or optical medium, such as a disk or tapes. Accordingly, the disclosure is considered to include any one or more of a computer-readable non-transitory storage medium and successor media, in which data or instructions may be stored.
It should also be noted that software that implements the disclosed methods may optionally be stored on a tangible storage medium, such as: a magnetic medium, such as a disk or tape; a magneto-optical or optical medium, such as a disk; or a solid state medium, 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.
Although the present specification describes components and functions that may be implemented in particular embodiments with reference to particular standards and protocols, the invention is not limited to such standards and protocols. For example, standards for Internet, other packet switched network transmission and standards for viewing media content (e.g. MPEG and H.264) 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 or similar functions as those disclosed herein are considered equivalents thereof.
One or more embodiments of the disclosure may 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 particular invention or inventive concept. Moreover, although specific embodiments have been illustrated and described herein, it should be appreciated that any subsequent arrangement designed to achieve the same or similar purpose may be substituted for the specific embodiments shown. This disclosure is intended to cover any and all subsequent 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 description.
The Abstract of the Disclosure 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, various features may be grouped together or described in a single embodiment for the purpose of streamlining the disclosure. This 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 may be directed to less than all of the features of any of the disclosed embodiments. Thus, the following claims are incorporated into the Detailed Description, with each claim standing on its own as defining separately claimed subject matter.
The above-disclosed subject matter is to be considered illustrative, and not restrictive, and the appended claims are intended to cover all such modifications, enhancements, and other embodiments, which fall within the scope of the present invention. Thus, to the maximum extent allowed by law, the scope of the present invention is to be determined by the broadest permissible interpretation of the following claims and their equivalents, and shall not be restricted or limited by the foregoing detailed description.

## Claims

1. A method comprising:
generating a first principle bilateral filtered image component from a source image, the first principle bilateral filtered image component corresponding to a second pixel value of a set of pixel values, wherein the second pixel value is greater than or equal to a first pixel value of the set of pixel values;
selectively updating a result pixel of a result image based on the first principle bilateral filtered image component;
deallocating the first principle bilateral filtered image component;
after deallocating the first principle bilateral filtered image component, generating a second principle bilateral filtered image component from the source image, the second principle bilateral filtered image component corresponding to a third pixel value of the set of pixel values, wherein the third pixel value is greater than the second pixel value and wherein the third pixel value is less than or equal to a fourth pixel value of the set of pixel values; and
selectively updating the result pixel based on the second principle bilateral filtered image component.

2. The method of claim 1, wherein the set of pixel values includes a minimum pixel value and a maximum pixel value, wherein the minimum pixel value of the set is less than or equal to a minimum source pixel value in the source image, and wherein the maximum pixel value of the set is greater than or equal to a maximum source pixel value in the source image.

3. The method of claim 1, wherein each pixel value of the set of pixel values includes an intensity component.

4. The method of claim 1, wherein each pixel value of the set of pixel values includes a red component, a green component, and a blue component.

5. The method of claim 1, wherein each pixel value of the set of pixel values includes a cyan component, a magenta component, a yellow component, and a black component.

6. The method of claim 1, further comprising generating the set of pixel values based on the source image.

7. The method of claim 1, wherein generating the first principle bilateral filtered image component includes:
generating a range kernel value map by applying a range filter kernel to the source image based on the second pixel value; and
applying a spatial filter to the range kernel value map.

8. The method of claim 7, wherein applying the spatial filter to the range kernel value map comprises for each pixel in the range kernel value map:
determining a set of neighboring pixels of the pixel; and
adding weighted values of each of the neighboring pixels to a value of the pixel, wherein a weight applied to a particular neighboring pixel is based on a spatial proximity of the particular neighboring pixel to the pixel.

9. The method of claim 1, wherein selectively updating the result pixel based on the first principle bilateral filtered image component includes:
determining whether a source pixel of the source image has a pixel value between the first pixel value and the third pixel value; and
in response to determining that the pixel value is between the first pixel value and the third pixel value, updating the result pixel with a weighted contribution from a corresponding pixel value of the first principle bilateral filtered image component.

10. The method of claim 1, further comprising generating the source image by downsampling a received image.

11. The method of claim 1, wherein the first principle bilateral filtered image component has a smaller pixel resolution than the source image.

12. The method of claim 11, further comprising upsampling the first principle bilateral filtered image component before updating the result pixel based on the first principle bilateral filtered image component.

13. The method of claim 12, wherein the upsampled first principle bilateral filtered image component includes only upsampled pixels corresponding to pixels in the source image having values between the first pixel value and the third pixel value.

14. The method of claim 1, further comprising generating the source image from an orthogonal color transformation of a received image.

15. A system comprising:
one or more processors;
a principle bilateral filtered image component generator executable by the one or more processors to:
generate a first principle bilateral filtered image component from a source image, the first principle bilateral filtered image component corresponding to a second pixel value of a set of pixel values, wherein the second pixel value is greater than or equal to a first pixel value of the set of pixel values; and
after the first principle bilateral filtered image component is deallocated, generate a second principle bilateral filtered image component from the source image, the second principle bilateral filtered image component corresponding to a third pixel value of the set of pixel values, wherein the third pixel value is greater than the second pixel value and wherein the third pixel value is less than or equal to a fourth pixel value of the set of pixel values; and

a result image updater executable by the one or more processors to:
selectively update a result pixel of a result image based on the first principle bilateral filtered image component;
deallocate the first principle bilateral filtered image component; and
selectively update the result pixel based on the second principle bilateral filtered image component.

16. The system of claim 15, further comprising a downsampler executable by the one or more processors to generate the source image by downsampling a received image.

17. The system of claim 15, further comprising an orthogonal color transformer executable by the one or more processors to generate the source image from an orthogonal color transformation of a received image.

18. A computer-readable medium storing instructions that, when executed by a processor, cause the processor to:
generate a first principle bilateral filtered image component from a source image, the first principle bilateral filtered image component corresponding to a second pixel value of a set of pixel values;
determine whether a source pixel of the source image has a pixel value between a first pixel value of the set and a third pixel value of the set, wherein the first pixel value is less than or equal to the second pixel value and the third pixel value is greater than or equal to the second pixel value; and
when the pixel value is between the first pixel value and the third pixel value, update a result pixel in a result image based on the first principle bilateral filtered image component;
deallocate the first principle bilateral filtered image component;
after deallocating the first principle bilateral filtered image component, generate a second principle bilateral filtered image component from the source image, the second principle bilateral filtered image component corresponding to the third pixel value;
determine whether the pixel value of the source pixel is between the second pixel value and a fourth pixel value, wherein the fourth pixel value is greater than or equal to the third pixel value; and
when the pixel value is between the second pixel value and the fourth pixel value, update the result pixel based on the second principle bilateral filtered image component.

19. The computer-readable medium of claim 18, wherein generating the first principle bilateral filtered image component includes:
generating a range kernel value map by applying a range filter kernel to the source image based on the second pixel value; and
applying a spatial filter to the range kernel value map.

20. The computer-readable medium of claim 19, wherein applying the spatial filter to the range kernel value map comprises for each pixel in the range kernel value map:
determining a set of neighboring pixels of the pixel; and
adding weighted values of each of the neighboring pixels to a value of the pixel, wherein a weight applied to a particular neighboring pixel is based on a spatial proximity of the particular neighboring pixel to the pixel.