# Patent

## Title
Systems and methods for adaptive spatio-temporal filtering for image and video upscaling, denoising and sharpening

## Abstract

A method for adaptive spatio-temporal filtering is disclosed. Local motion vectors between a current video frame and other nearby video frames are determined. Local motion-aligned temporal confidence parameters are determined. Local spatial orientation parameters are determined. The local motion vectors, the local motion-aligned temporal confidence parameters, and the local spatial orientation parameters are used to adaptively determine spatio-temporal kernel weights. The spatio-temporal kernel weights are used to perform spatio-temporal filtering on input video data.

## Background
TECHNICAL FIELD
The present disclosure relates generally to computers and computer-related technology. More specifically, the present disclosure relates to a framework for processing video signals, i.e., digital image sequences.
BACKGROUND
Currently, very high resolution flat-panel display devices are being developed and brought to market. One example is liquid crystal display (LCD) devices with 4K×2K resolution (2160 lines and 4096 pixels/line). Such display devices are exceeding the highest spatial resolution of video content commonly available, namely 1080p high definition video (1080 lines and 1920 pixels/line). Thus, it may be desirable to use image and video upscaling or spatial format conversion methods in such display devices.
Recent display devices may also be capable of and benefit from higher frame rates or increased temporal resolution, such as 50, 60, 72, 96 or 120 frames per second. Again, such very high frame rates may exceed the highest frame rate of video content commonly available (24, 25, 30, 50 or 60 frames per second). This highlights the usefulness of temporal video upscaling or temporal video frame rate conversion methods.
Generally, the goals in achieving video interpolation and reconstruction are to enhance or increase the resolution of the input video in a manner that is visually pleasing and artifact-free. Common visual artifacts that may occur in spatial upscaling are edge jaggyness, ringing on edge contours, blurring of edges and blurring of texture detail. Common visual artifacts that may occur in temporal upscaling are motion blur, judder, temporal instability and other motion artifacts. In addition, the input video often may already contain artifacts, for example due to coding and compression or due to other processing stages generally preceding the final processing for display. Therefore, another goal is to avoid amplifying such artifacts in the input signal, and possibly to remove such artifacts.
Due to changing viewing conditions (e.g., closer viewing distances, darker surroundings), as well as incorporation of new display technologies (e.g., higher brightness, wider color gamut) in modern flat-panel display devices, any artifacts in the input video as well as any additional artifacts that may be introduced by the scaling or conversion method used are becoming more visible than in the past. This highlights the usefulness of high-quality scaling and format conversion methods as well as other video processing methods, such as noise suppression.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 illustrates a method for adaptive spatio-temporal filtering;
FIG. 2 illustrates a spatial weighting scheme for the spatio-temporal filter shown in FIG. 1;
FIG. 3 illustrates a method for determining local spatial steering parameters;
FIG. 4 illustrates an example of a codebook for storing combinations of quantized steering parameters;
FIG. 5 illustrates a temporal weighting scheme for the spatio-temporal filter shown in FIG. 1;
FIG. 6 illustrates a method for assessing the suitability of candidate pixels in reference video frames;
FIG. 7 illustrates a method for determining filter kernel weights for the spatio-temporal filter shown in FIG. 1; and
FIG. 8 illustrates various components that may be utilized in a computing device.



DETAILED DESCRIPTION
A method for adaptive spatio-temporal filtering is disclosed. In accordance with the method, local motion vectors between a current video frame and other nearby video frames are determined. Local temporal confidence parameters are determined. Local spatial steering parameters are determined. The local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters are used to adaptively determine spatio-temporal kernel weights. The spatio-temporal kernel weights are used to perform spatio-temporal filtering on input video data.
The spatio-temporal filtering may involve upscaling the input video data. Alternatively, or in addition, the spatio-temporal filtering may involve denoising the input video data. Alternatively, or in addition, the spatio-temporal filtering may involve sharpening the input video data.
In accordance with the method, sets of discretized parameter values may be defined. The local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters may be determined from the sets of discretized parameter values. The spatio-temporal kernel weights may be determined from a look-up table.
The local spatial steering parameters may include a scaling parameter. Determining the scaling parameter may involve: determining local spatial image gradients based on the current video frame, determining gradient covariance coefficients based on the local spatial image gradients, determining the scaling parameter from the gradient covariance coefficients, and applying scalar quantization to the scaling parameter.
The local spatial steering parameters may include an orientation angle parameter and an elongation parameter. Determining the orientation angle parameter and the elongation parameter may involve: defining combinations of quantized orientation angle parameters and quantized elongation parameters, determining gradient covariance coefficients for the combinations of quantized orientation angle parameters and quantized elongation parameters, determining local spatial image gradients based on a current video frame, determining gradient covariance coefficients based on the local spatial image gradients, and determining a combination of a quantized orientation angle parameter and a quantized elongation parameter whose gradient covariance coefficients are nearest to the image-derived gradient covariance coefficients.
Determining the local temporal confidence parameters may involve determining the correlation between candidate pixels in reference video frames and pixels that are being estimated in the current video frame. In addition, a pre-smoothing filter may be applied.
As mentioned, the method may involve adaptively determine spatio-temporal kernel weights. Adaptively determining the spatio-temporal kernel weights may involve defining three-dimensional spatio-temporal kernel weights based on a two-dimensional spatial kernel and a one-dimensional temporal kernel.
In accordance with the method, the spatio-temporal kernel weights may be modified. Modifying the spatio-temporal kernel weights may involve sharpening the spatio-temporal kernel weights. Sharpening the spatio-temporal kernel weights may involve convolving the spatio-temporal kernel weights with a kernel, multiplying the result of the convolution operation by a sharpening factor, and adding the result of the multiplication operation to the original spatio-temporal kernel weights. The sharpening factor may be selected based on local image gradients.
As mentioned, in accordance with the method, local motion vectors between a current video frame and other nearby video frames are determined. The nearby video frames may include reference video frames that are temporally positioned before as well as following the current video frame. Also, in accordance with the method, processing may be performed in a block-based manner.
A computer system that is configured to perform adaptive spatio-temporal filtering is also disclosed. The computer system includes a processor and memory in electronic communication with the processor. Instructions are stored in the memory. The instructions are executable to determine local motion vectors between a current video frame and other nearby video frames. The instructions are also executable to determine local temporal confidence parameters. The instructions are also executable to determine local spatial steering parameters. The instructions are also executable to use the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters to adaptively determine spatio-temporal kernel weights. The instructions are also executable to use the spatio-temporal kernel weights to perform spatio-temporal filtering on input video data.
Also disclosed is a computer-readable storage medium including instructions that, when executed by a processor, cause a computing device to determine local motion vectors between a current video frame and other nearby video frames. The instructions are also executable to determine local temporal confidence parameters. The instructions are also executable to determine local spatial steering parameters. The instructions are also executable to use the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters to adaptively determine spatio-temporal kernel weights. The instructions are also executable to use the spatio-temporal kernel weights to perform spatio-temporal filtering on input video data.
The methods disclosed herein relate to interpolation and denoising of motion video signals, i.e. digital image sequences of dynamic scenes. The methods disclosed herein utilize a multi-frame approach, i.e. multiple low resolution (LR) input video frames are utilized to reconstruct a single high resolution (HR) output video frame. Furthermore, the methods disclosed herein are based on spatio-temporal filtering; i.e., spatial and temporal video processing are treated jointly in an integrated manner.
The methods disclosed herein are capable of spatial interpolation, i.e. upscaling, as well as temporal interpolation, i.e. frame rate conversion. Spatial and temporal interpolation can be performed separately; however, the methods disclosed herein are capable of performing both simultaneously.
The methods disclosed herein are also capable of removing many kinds of noise and artifacts and improve the video quality in many kinds of aspects. Basic noise suppression (i.e. denoising) may be significantly improved with respect to single-frame (i.e. frame-by-frame or spatial-only) approaches. The same holds for suppression of compression artifacts, such as blocking and ringing. The spatial resolution can be enhanced, resulting in improved rendition of detail and better sharpness. The methods disclosed herein are also capable of removing various kinds of temporal and motion artifacts, such as judder and temporal flickering, that are hard to remove with single-frame (spatial-only) processing without introducing blur.
The methods disclosed herein are highly adaptive to local (spatial) image structure and local (temporal) motion. The spatio-temporal filter that is utilized in the methods disclosed herein may adapt spatially in terms of local image structure and variations, while adapting temporally to local motion. This may involve a robust and accurate pre-analysis of local orientation and local motion.
Hence, a first primary unique aspect of the methods disclosed herein is: providing techniques for (spatial) orientation analysis and for computing the final spatio-temporal filter weights with reduced computational cost, while providing strong adaptivity to local orientation and motion. In part, this is achieved by decoupling the spatial and temporal aspects of the spatio-temporal filter kernel.
Another novel aspect of the methods disclosed herein relates to robustness of multi-frame processing. It can be observed that the visual quality of the spatio-temporal filtering result depends on the accuracy of the motion analysis. Furthermore, errors in motion analysis can easily result in visual artifacts and this should be prevented.
Hence, a second primary unique aspect of the methods disclosed herein is: providing a technique for robust temporal weighting, i.e. weighting samples from different frames, based on the motion analysis, as part of the spatio-temporal filter.
Another novel aspect of the methods disclosed herein relates to incorporation of a sharpening feature. Sharpening is a form of image and video enhancement, which is particularly important when doing upscaling. When performing upscaling with a basic linear filter, there is a lack of high-frequency information in the HR images (or video frames), since that information is normally not available in the LR images. Using a multi-frame and data-adaptive upscaling approach makes it possible to reconstruct and/or preserve some of the high-frequency information. Still further enhancement of this high-frequency information is needed and can be achieved by sharpening.
Hence, a third primary unique aspect of the methods disclosed herein is: providing a technique for sharpening that is integrated with the existing spatio-temporal filter.
Overview of Method for Adaptive Spatio-Temporal Filtering
FIG. 1 illustrates an overview of a method 100 for adaptive spatio-temporal filtering. The unprocessed, low-resolution, input video y(x) is provided as input to the method 100 as shown at the top left. Several frames of input video pixels are buffered in a video frame memory 102, such that the pixel data from multiple frames will be available for processing. We denote the video data as a single component signal y for simplicity; however, it should be understood that the video data may consist of multiple color components, such as RGB or YCbCr. The initial stage may include other basic pre-processing, such as color conversions (e.g. from RGB to YCbCr or extracting luminance Y), adapting bit-depth, and other operations, in preparation for the analysis and filtering stages.
We denote a pixel location in the video data by xi=[x1i, x2i, ti]T (where x1i, and x2i are the spatial coordinates and ti is the temporal coordinate or frame number). Hence, xi represents a pixel location in a 3-D or spatio-temporal coordinate system; in other words, it represents any location in any of the frames in the video sequence. The pixel value at location xi is denoted by y(xi).
The main spatio-temporal filtering process 104, shown at bottom left, may include upscaling, denoising and sharpening. Pixel data from several video frames are provided to this process 104. The current frame indicates a frame with the same temporal coordinate as the output frame that is being generated at a given time. Input pixel data includes pixels y(xi) at locations that are directly aligned with locations of interest in the current frame, as well as pixels y(xi−mi,Δt) at locations that are motion-aligned with locations of interest in the current frame. That is, local motions mi,Δt are taken into account. The output of the spatio-temporal filtering process 104 is the pixel data {circumflex over (z)}(x) of high-resolution, denoised, and sharpened video frames.
The spatio-temporal filtering weights are adaptively determined using analysis stages shown in the middle and right in FIG. 1. A motion estimation stage 106 determines local motion vectors mi,Δt between the current frame and other nearby frames. Δt denotes the time offset of other frames relative to the current frame and may be −2, −1, 1, 2, for example. Motion vector data may also be buffered in memory for later use. Motion vector data is also provided to the video frame memory 102 in order to retrieve the appropriate motion-aligned pixels for other stages. We assume that the motion estimation 106 can be based on known methods, such as block-matching, gradient-based approaches, and so on.
Another stage 108 determines the values of local motion-aligned temporal confidence parameters ρi,Δt. These parameters are used in a temporal weighting scheme that is described in more detail below.
Another stage 110 determines the values of local spatial orientation parameters θi, σi, and γi. These parameters are used in a spatial weighting scheme that is described in more detail below.
The results of the primary analysis stages 106, 108, 110 are used in a next stage 112 that adaptively determines so-called kernel weights Kst. These include both spatial and temporal components and consist of weights for pixels of multiple frames.
The final stage 114 before the main spatio-temporal filtering stage 104 takes the kernel weights as input and determines the actual filter weights Wst. This stage 114 consists mainly of an adaptive sharpening operation. The filter weights again consist of filter coefficients for pixels of multiple frames. These are then provided to the main spatio-temporal filtering stage 104.
Spatial Weighting Scheme and Determining Spatial Orientation Parameters
The spatial weighting scheme 110 is illustrated in FIG. 2. We enable the spatio-temporal filter 104 to be adapted locally based on the following spatial orientation or steering parameters:

    
    
        an orientation angle parameter θ that determines rotation of a kernel in the spatial (x1, x2) plane;
        an elongation parameter σ that determines spatial elongation of a kernel along its spatial axes;
        a scaling parameter γ that determines an overall spatial scaling.
    
    


The spatial kernel weights are determined based on the choice of prototype kernel and the steering parameters. The prototype kernel is pre-determined and may, for example, be the well-known Gaussian kernel, exponential kernel, a uniform kernel, a triangular kernel, or other existing kernel. The prototype kernel is adapted locally in each video frame using local estimates of the steering parameters, i.e. near location xi, the kernel is oriented, elongated and scaled according to local steering parameters θi, σi, and γi. To achieve the best spatial filtering performance, the steering parameters are determined based on the local variations in an image.
We aim to use a look-up table (LUT) to determine spatio-temporal kernel weights, thereby reducing processing time. To this end, we define sets of discretized parameter values, such that there is only a finite number of spatio-temporal kernels. For example, the orientation is allowed to assume a finite number of pre-determined discrete angles. For example, we may define a set of 4, 8 or 12 orientation angles. Conceptually, this corresponds to quantizing the orientation angle, such that the resulting discrete angle values can be represented by a quantization index. However, the usual process of quantizing a given “analog” value would require us to estimate the corresponding orientation parameter first and does not apply here. Instead, our goal is to directly determine the quantized/discrete values of the orientation parameters. In addition to the orientation angle, this also applies to the elongation and scaling parameter. Conceptually, we apply quantization to the orientation angle and elongation parameters jointly, corresponding to the process of vector quantization. As in the process of vector quantization, we use a nearest neighbor search to determine a single index that maps to a discrete angle and a discrete elongation value.
The process 110 of determining local spatial steering parameters is shown in FIG. 3. Spatial orientation (or steering) parameters for the pixel at xi, are determined based on a local window wj or neighborhood around xi. The pixels in this window at locations xjεwi have pixel values y(xj). We determine the orientation parameters based on the local image gradients (horizontal and vertical spatial derivatives). Various techniques may be utilized to compute 316 the local spatial derivatives in image data. For example, one may utilize filters such as the well-known Roberts, Prewitt, and Sobel derivative operators and their variants, or derivative-of-Gaussian operators. Let us denote the computed horizontal and vertical image derivative values in the local analysis window wi by {circumflex over (z)}x1 (xj), {circumflex over (z)}x2 (xj), xjεwi.
Based on the local spatial image gradients, we compute 318 the following gradient covariance or spatial structure coefficients c11, c12, c21 and c22:




  
    
      c
      11
    
    ≡
    
      
        ∑
        
          
            x
            j
          
          ∈
          
            w
            i
          
        
      
      ⁢
      
        
          
            
              z
              ^
            
            
              x
              1
            
          
          ⁡
          
            (
            
              x
              j
            
            )
          
        
        ⁢
        
          
            
              z
              ^
            
            
              x
              1
            
          
          ⁡
          
            (
            
              x
              j
            
            )
          
        
      
    
  
  ,
  
    

  
  ⁢
  
    
      c
      12
    
    =
    
      
        c
        21
      
      ≡
      
        
          ∑
          
            
              x
              j
            
            ∈
            
              w
              i
            
          
        
        ⁢
        
          
            
              
                z
                ^
              
              
                x
                1
              
            
            ⁡
            
              (
              
                x
                j
              
              )
            
          
          ⁢
          
            
              
                z
                ^
              
              
                x
                2
              
            
            ⁡
            
              (
              
                x
                j
              
              )
            
          
        
      
    
  
  ,
  
    

  
  ⁢
  
    
      c
      22
    
    ≡
    
      
        ∑
        
          
            x
            j
          
          ∈
          
            w
            i
          
        
      
      ⁢
      
        
          
            
              z
              ^
            
            
              x
              2
            
          
          ⁡
          
            (
            
              x
              j
            
            )
          
        
        ⁢
        
          
            
              
                z
                ^
              
              
                x
                2
              
            
            ⁡
            
              (
              
                x
                j
              
              )
            
          
          .
        
      
    
  




We can compactly denote these coefficients grouped in a (symmetric) gradient covariance or structure matrix Cs:




  
    C
    s
  
  =
  
    
      [
      
        
          
            
              c
              11
            
          
          
            
              c
              12
            
          
        
        
          
            
              c
              12
            
          
          
            
              c
              22
            
          
        
      
      ]
    
    .
  




Our goal is to determine the steering parameters, θ, σ and γ, directly from the coefficients c11, c12 and c22. Our method is based on the following relation. For given values of the steering parameters (θ, γ and σ), the gradient covariance coefficients are given as follows:

c11=γ(σ cos2 θ+σ−1 sin2 θ)

c12=−γ(σ cos θ sin θ−σ−1 cos θ sin θ)

c22=γ(σ sin2 θ+σ−1 cos2 θ)  (1)

This is based on decomposing a covariance matrix into three components: rotation, elongation and scaling.
We can determine the scaling parameter γ directly:

γ=(c11c22−c122)1/2.

We can define a normalized gradient covariance matrix {tilde over (C)}s with normalized gradient covariance coefficients as follows:




  
    
      C
      ~
    
    s
  
  =
  
    
      [
      
        
          
            
              
                c
                ~
              
              11
            
          
          
            
              
                c
                ~
              
              12
            
          
        
        
          
            
              
                c
                ~
              
              12
            
          
          
            
              
                c
                ~
              
              22
            
          
        
      
      ]
    
    =
    
      
        1
        γ
      
      ⁡
      
        [
        
          
            
              
                c
                11
              
            
            
              
                c
                12
              
            
          
          
            
              
                c
                12
              
            
            
              
                c
                22
              
            
          
        
        ]
      
    
  




In general, we apply scalar quantization 320 to the scaling parameter, resulting in a quantization index q for the scaling parameter, where 1<q<Q1. The number of quantization levels Q1 is pre-determined. This is equivalent to having a pre-determined quantization step-size parameter. From the quantization index q for the scaling parameter, we can reconstruct a quantized value γ(q).
Hence, given the value of a local scaling parameter at xi, we can determine its quantization index, denoted by qi, and its quantized value, denoted by γ(qi).
Suppose we pre-define combinations of quantized orientation angle values and quantized elongation values, denoted by (θ(p), σ(p)), where 1<p<Q2. Hence, we have a finite set of Q2 combinations of quantized angle and elongation parameters. The quantization index p corresponds to the index into this set of combinations.
For this finite set of combinations of quantized steering parameters, we can compute the corresponding (normalized) gradient covariance coefficients using Equation 1. These combinations of values can be stored in a table 324, which is conceptually similar to the codebook in case of vector quantization. A simple example of such a codebook 424 is provided in FIG. 4. Normalized coefficients are obtained using γ=1.
We need to solve the following problem: given values of c11, c12 and c22 computed from the image data, which is the best combination of quantized steering parameters θ(p) and σ(p)? We can solve this using a nearest neighbor search 322 in the codebook 324 described above. That is: we find the combination of pre-computed coefficients c11(p), c12(p) and c22(p) that is in some sense nearest to the image-derived values c11, c12 and c22. This gives us the quantization index p for that combination of gradient covariance coefficients. And in turn this gives the best combination of quantized steering parameters θ(p) and σ(p).
This can be denoted compactly by the following:




  
    
      
        p
        =
        
          arg
          ⁢
          
            
          
          ⁢
          
            
              min
              p
            
            ⁢
            
              D
              ⁢
              
                
                  {
                  
                    
                      
                        C
                        ~
                      
                      s
                    
                    ,
                    
                      
                        C
                        s
                      
                      ⁡
                      
                        (
                        
                          
                            θ
                            ⁡
                            
                              (
                              p
                              )
                            
                          
                          ,
                          
                            σ
                            ⁡
                            
                              (
                              p
                              )
                            
                          
                        
                        )
                      
                    
                  
                  }
                
                .
              
            
          
        
      
    
    
      
        (
        2
        )
      
    
  




where {tilde over (C)}s is a matrix with the normalized gradient covariance coefficients computed from the data, {tilde over (C)}s (θ(p), σ(p)) is a matrix with the pth normalized covariance coefficients determined by the pre-defined combinations of quantized steering parameters (stored in a table), and D is an appropriate distance measure. D may be the Frobenius matrix norm, corresponding to a Euclidean distance measure defined on the coefficients. This corresponds to a vector quantization process 322 applied in the space of covariance coefficients, where the pre-defined combinations of coefficients act as centroids.
Hence, given the normalized gradient covariance coefficients computed from the image data at xi, we can determine 322 a vector quantization index pi that determines the quantized orientation angle θ(pi) and elongation σ(pi).
We have now described how to determine (estimates of) the local steering parameters: γi=γ(qi), θi=θ(pi) and σi=σ(pi). These parameter values in turn determine the weights of a 2-D spatial steering kernel, denoted by Ks(xi−x; Cis), where Cis is a compact notation for the combination of the (estimated) local spatial steering parameters. For example, if we use a Gaussian prototype kernel, then the spatial kernel weights are defined by:




  
    
      K
      s
    
    ⁡
    
      (
      
        
          
            x
            i
          
          -
          x
        
        ;
        
          C
          i
          s
        
      
      )
    
  
  =
  
    
      
        det
        ⁡
        
          (
          
            C
            i
            s
          
          )
        
      
      
        2
        ⁢
        π
        ⁢
        
          
        
        ⁢
        
          h
          s
        
        ⁢
        
          h
          s
        
      
    
    ⁢
    exp
    ⁢
    
      
        {
        
          -
          
            
              
                
                  (
                  
                    
                      x
                      i
                    
                    -
                    x
                  
                  )
                
                T
              
              ⁢
              
                
                  C
                  i
                  s
                
                ⁡
                
                  (
                  
                    
                      x
                      i
                    
                    -
                    x
                  
                  )
                
              
            
            
              2
              ⁢
              
                h
                s
              
              ⁢
              
                h
                s
              
            
          
        
        }
      
      .
    
  




The spatial steering kernel may also be determined by a global spatial scaling parameter hs. This parameter can be used to control and modulate the spatial size of the filter kernels in a global manner.
Temporal Weighting Scheme
The temporal weighting scheme 108 of the spatio-temporal filter 104 is illustrated in FIG. 5.
The spatio-temporal filter 104 utilizes pixel data from a number of frames 528a, 528b, 528d, 528e other than the current frame 528c. The frames 528a-e in the temporal support of the spatio-temporal filter 104 are indicated here by Δt, and for simplicity of the notation we let Δtε{ . . . , −3, −2, −1, 0, 1, 2, 3, . . . }. That is, the current frame 528c is indicated by Δt=0, the frame 528b before the current frame 528c is indicated by Δt=−1, the frame 528d following the current frame 528c is indicated by Δt=1, etc. Frames 528a, 528b, 528d, 528e other than the current frame 528c are called reference frames. In one embodiment, the temporal support is 5 frames 528 and is centered on the current frame 528c, so that we have Δtε{−2, −1, 0, 1, 2}. In another embodiment, the temporal support is 3 frames 528 and is centered on the current frame 528c, so that we have Δtε{−1, 0, 1}. The methods disclosed herein are not limited to a specific number of frames 528 in the temporal support, and the number of frames 528 used may be 2, 3, 4, 5, or larger. It is typically advantageous for the temporal support to include at least both the previous frame 528b as well as the following frame 528d, i.e. frames 528b, 528d in both the backward and forward temporal direction.
There are significant advantages to including reference frames 528a, 528b, 528d, 528e before as well as following the current frame 528c. In other words, the spatio-temporal filter 104 acts in a temporally bi-directional manner relative to the current frame 528c. One advantage is that the noise reduction performance improves by including frames 528a, 528b, 528d, 528e in both forward and backward temporal directions, especially near moving object boundaries in the video data. Near boundaries of moving objects, it is sometimes hard to utilize pixel data from a previous frame 528a, 528b due to occlusion effects. For example if a pixel to be predicted corresponds to an uncovered area that was not previously visible, it is hard to utilize pixel data from a previous frame 528a, 528b. Likewise, it is sometimes hard to utilize pixel data from a following frame 528d, 528e due to occlusion effects, for example if a pixel to be predicted corresponds to an area that is covered by another object in the following frame 528d, 528e. Hence, if frames 528d, 528e in only the forward direction or frames 528a, 528b in only the backward direction are utilized, the temporal filtering should be suppressed near occlusion areas. Visually, this effect becomes apparent in a spatial sense in the filtered output video, because areas near moving object boundaries still contain noise (as the temporal filter was suppressed) while other areas contain less noise (stronger temporally filtered). However, by including frames 528a, 528b, 528d, 528e in both the forward and backward temporal directions, it is often possible to utilize suitable pixel data in frames 528 in the temporal support, even in areas of occlusion such as near moving object boundaries. This avoids a significant suppression of the temporal filter strength near moving object boundaries.
Another advantage of including reference frames 528a, 528b, 528d, 528e in the forward and backward temporal direction is apparent near scene changes, shot boundaries, or other abrupt temporal changes in the video sequence. A video frame 528 right after a scene change will contain significantly different content from a video frame 528 right before the scene change. Hence, the temporal filtering strength should be suppressed, if the temporal support only includes previous frames 528a, 528b. This may lead to a visual change in the amount of noise in the filtered output video in the temporal sense. Likewise, the problem would occur in frames 528 prior to the scene change, if the temporal support only includes frames 528d, 528e following the current frame 528c. However, the problem can be avoided by including both previous frames 528a, 528b and following frames 528d, 528e. 
We will describe a mechanism to adapt the weights, and hence the strength, of the temporal portion in our spatio-temporal filter 104, such that effects due to object occlusions, scene changes, and other phenomena, can be handled automatically.
We enable the spatio-temporal filter 104 to be adapted locally based on the spatial steering parameters as described above as well as the following temporal steering parameters:

    
    
        local motion vectors or optical flow vectors
    
    






  
    
      m
      
        i
        ,
        
          Δ
          ⁢
          
            
          
          ⁢
          t
        
      
    
    =
    
      [
      
        
          
            
              m
              
                
                  1
                  ⁢
                  i
                
                ,
                
                  Δ
                  ⁢
                  
                    
                  
                  ⁢
                  t
                
              
            
          
        
        
          
            
              m
              
                
                  2
                  ⁢
                  i
                
                ,
                
                  Δ
                  ⁢
                  
                    
                  
                  ⁢
                  t
                
              
            
          
        
        
          
            1
          
        
      
      ]
    
  
  ,




    
    
        local motion-aligned temporal confidence parameters ρi,Δt.
    
    


In the methods disclosed herein, we allow multiple motion vectors mi,Δt at a location xi, one for each frame 528 in the temporal support of the spatio-temporal filter 104. For example, the motion vector from the current frame 528c to the previous frame 528b is indicated by mi,−1, and the motion vector from the current frame 528c to the next frame 528d is indicated by mi,1. We also let mi,Δt denote the displacement vector, which defines the resulting displacements in terms of pixels associated with the motion vector. The motion vector and displacement vector can be considered equivalent for our purposes. We use the term motion vector and displacement vector interchangeably.
The effect of the motion/displacement vector on the spatial weights is to shift or translate the spatial kernel weights in frames Δt by the appropriate estimated motion vector:

Ks(xi−x−mi,Δt;Cis)

Hence, the spatio-temporal kernel is motion-aligned. This is similar to motion compensation; however, an explicit motion compensation step is avoided. Explicit motion compensation may require intermediate interpolation and rounding steps that may degrade the filtered output video. Instead, in the methods disclosed herein, we utilize motion-compensated or motion-aligned filtering. Note that for pixels in the current frame 528c, the displacement vector mi,Δt is always [0, 0, 0]T by definition. For pixels in other frames Δt (within the spatial and temporal support), mi,Δt denotes the estimated local displacement vector between the current frame 528c and frame Δt (likewise for the corresponding motion-aligned temporal confidence parameter).
We assume that the local motion vectors (or displacement vectors) can be estimated 106 using existing motion estimation methods, for example well-known block-matching or gradient-based methods. The motion vectors may be determined 106 on a pixel-by-pixel basis or on a block-by-block basis. Our temporal weighting scheme is not limited to either pixel-by-pixel or block-by-block motion vectors.
We describe the role of the motion-aligned temporal confidence parameter ρ next. The role of the ρ parameter should be to indicate the “usability” or “fitness” of pixels/samples in reference frames 528a, 528b, 528d, 528e for the purpose of estimating pixels/samples in the current frame 528c. For example, we may try to estimate the pixel value at location xi in the current frame 528c using spatio-temporal filtering. The motion estimation process 106 provides us with locations in the reference frames 528a, 528b, 528d, 528e where candidate pixels may be found that are likely to be useful in the estimation/filtering process 104. For example, the pixel at xi−mi,−1 in the previous frame 528b, and the pixel at xi−mi,1 in the next frame 528d. However, the motion estimation 106 may have resulted in motion vectors that are inaccurate or otherwise in error. For example, a motion vector may be inaccurate due to noise. In other cases, it is simply not possible to estimate a proper motion vector, e.g. due to object occlusion. Motion estimation 106 in itself inherently is a complex process, and its implementation may be subject to various trade-offs. Since motion vectors can be imperfect, a mechanism is needed to prevent imperfect motion vectors from impacting the final estimation/filtering result. Furthermore, temporal changes can occur in a video sequence that cannot be modeled well by the concept of motion. What is needed is a measure of confidence indicating the fitness of candidate motion-aligned or motion-compensated pixel values in reference frames 528a, 528b, 528d, 528e for reconstructing pixels in the current frame 528c. 
A direct technique to assess the “fitness” of candidate pixels in reference frames 528a, 528b, 528d, 528e is to compute their similarity or correlation to the pixel(s) in the current frame 528c that is being estimated. Reference is now made to FIG. 6. The similarity or correlation measure may be based on pixel value differences 630. For example, we may define ρi,Δt based on the difference between a pixel y(xi) in the current frame 528c and the corresponding pixel y(xi−mi,Δt) in a reference frame 528a, 528b, 528d, 528e, using the computed motion vector mi,Δt, as follows:

ρi,Δt=|y(xi)−y(ximi,Δt)|.  (3)

Also, we may define ρi,Δt based on the differences between a block of pixels Bi in the current frame 528c, {y(xn)|xnεBi}, and the corresponding block of pixels in a reference frame 528a, 528b, 528c, 528d, {y(xn−mn,Δt)|xnεBi}. Note that when using a block-based motion estimation technique, all pixels in a block may share the same motion vector. A block-based difference measure may be based on the sum 636 of absolute differences 634:




  
    
      
        
          
            ρ
            
              i
              ,
              
                Δ
                ⁢
                
                  
                
                ⁢
                t
              
            
          
          =
          
            
              1
              N
            
            ⁢
            
              
                ∑
                
                  
                    x
                    n
                  
                  ∈
                  
                    B
                    i
                  
                
              
              ⁢
              
                
                
                  
                    y
                    ⁡
                    
                      (
                      
                        x
                        n
                      
                      )
                    
                  
                  -
                  
                    y
                    ⁡
                    
                      (
                      
                        
                          x
                          n
                        
                        -
                        
                          m
                          
                            n
                            ,
                            
                              Δ
                              ⁢
                              
                                
                              
                              ⁢
                              t
                            
                          
                        
                      
                      )
                    
                  
                
                
              
            
          
        
        ,
      
    
    
      
        (
        4
        )
      
    
  




or on the sum of squared differences:




  
    
      
        
          ρ
          
            i
            ,
            
              Δ
              ⁢
              
                
              
              ⁢
              t
            
          
        
        =
        
          
            
              (
              
                
                  1
                  N
                
                ⁢
                
                  
                    ∑
                    
                      
                        x
                        n
                      
                      ∈
                      
                        B
                        i
                      
                    
                  
                  ⁢
                  
                    
                      
                      
                        
                          y
                          ⁡
                          
                            (
                            
                              x
                              n
                            
                            )
                          
                        
                        -
                        
                          y
                          ⁡
                          
                            (
                            
                              
                                x
                                n
                              
                              -
                              
                                m
                                
                                  n
                                  ,
                                  
                                    Δ
                                    ⁢
                                    
                                      
                                    
                                    ⁢
                                    t
                                  
                                
                              
                            
                            )
                          
                        
                      
                      
                    
                    2
                  
                
              
              )
            
            
              1
              /
              2
            
          
          .
        
      
    
    
      
        (
        5
        )
      
    
  




The above pixel difference measures may be based on the input pixel values y(xi). However, in this case the difference measures may be impacted by non-structural differences such as noise and aliasing. This would be undesirable, since our goal is to utilize temporal filtering with significant weight given to pixel values from multiple frames 528 to suppress noise and aliasing. One technique to reduce the impact of noise and aliasing on the difference measures is to apply pre-smoothing or low-pass filtering 632 on the input pixel values, i.e. a low-pass filter f may be applied to pixel values y. This corresponds to replacing y in Equations 3-5 by f*y. Also, as shown in FIG. 6, the low-pass filter f 632 may be applied after computing motion-aligned differences 630 (and before taking the absolute values 634), for example:




  
    
      
        
          ρ
          
            i
            ,
            
              Δ
              ⁢
              
                
              
              ⁢
              t
            
          
        
        =
        
          
            1
            N
          
          ⁢
          
            
              ∑
              
                
                  x
                  n
                
                ∈
                
                  B
                  i
                
              
            
            ⁢
            
              
                
                
                  f
                  *
                  
                    (
                    
                      
                        y
                        ⁡
                        
                          (
                          
                            x
                            n
                          
                          )
                        
                      
                      -
                      
                        y
                        ⁡
                        
                          (
                          
                            
                              x
                              n
                            
                            -
                            
                              m
                              
                                n
                                ,
                                
                                  Δ
                                  ⁢
                                  
                                    
                                  
                                  ⁢
                                  t
                                
                              
                            
                          
                          )
                        
                      
                    
                    )
                  
                
                
              
              .
            
          
        
      
    
    
      
        (
        6
        )
      
    
  




The pre-smoothing filter f can be a simple low-pass filter, such as the well-known box filter, Gaussian filter, or other filter. This significantly improves the performance of the confidence or fitness measure ρ, because the effect of noise and aliasing has been reduced. In turn, this technique improves the visual quality of the spatio-temporally filtered output video.
The above difference measures can also be extended easily from using pixel graylevel values to pixel color values, in any suitable color space, such as RGB or YCbCr.
The final temporal weighting is determined by applying the temporal kernel Kt(•) to the values ρi,Δt. Using a Gaussian kernel, the temporal weights are as follows:




  
    
      
        K
        t
      
      ⁡
      
        (
        
          ρ
          
            i
            ,
            
              Δ
              ⁢
              
                
              
              ⁢
              t
            
          
        
        )
      
    
    =
    
      exp
      ⁡
      
        (
        
          
            -
            
              1
              2
            
          
          ⁢
          
            
              (
              
                
                  ρ
                  
                    i
                    ,
                    
                      Δ
                      ⁢
                      
                        
                      
                      ⁢
                      t
                    
                  
                
                
                  h
                  t
                
              
              )
            
            2
          
        
        )
      
    
  
  ,




where ht is the global temporal scaling parameter. This parameter may be a global constant, or may be adapted to the video data, e.g. on a frame-by-frame or block-by-block basis.
Determining Filter Kernel Weights
The process of determining filter kernel weights is shown in FIG. 7.
In the following, we assume we have available estimates of the local spatial steering parameters θi, σi, γi and local temporal steering parameters mi,Δt and ρi,Δt. We also assume that there is a pre-defined finite set of possible values for each parameter. For example, the spatial steering parameters may be determined using the process described above. As another example, motion vectors are in some cases estimated with a finite accuracy, and otherwise a simple quantization step can be applied, with a suitable accuracy.
Furthermore, we assume we also have available global spatial and temporal scaling parameters hs and ht. These parameters can be used to control and modulate the scale of the filter kernels in a global manner.
In a first step 712, we define 3-D spatio-temporal kernel weights Kst based on a 2-D spatial kernel Ks and a 1-D temporal kernel Kt, given the (local and global) steering parameters:

Kst(xi−x)≡Ks(xi−x−mi,Δt;Cis)·Kt(ρi,Δt)  (7)

These are the kernel weights for all the frames 528 in the temporal support of the spatio-temporal filter 104. The spatial and temporal weighting schemes are described in more detail above.
The spatial kernel weights Ks and temporal kernel weights Kt can simply be obtained using a look-up table (LUT) 744. That is, kernel weights for the finite sets of quantized steering parameters can be pre-determined and stored in a look-up table 744. We can simply retrieve the appropriate weight values given the steering parameters when needed. Note that the spatial steering parameters may be determined only on the current frame 528c for computational simplicity. For further computational simplification, the spatial steering parameters may be determined only on one of the pixels xi (typically the pixel closest to the pixel being estimated).
In a second step, we apply sharpening 714 to the kernel weights. This process of “sharpening” 714 the kernel weights will eventually lead to a sharpening effect in the final filtered video frames. The sharpening step 714 is achieved by convolving the kernel weights with a Laplacian kernel L, multiplying the result by a sharpening factor κ, and adding the result to the original kernel weights. This can be described by:

Wst=Ks+κL*Kst.

Wst(xi−x) denotes the final spatio-temporal filter weights. The Laplacian kernel can be a well-known digital approximation of the Laplacian operator, or e.g. it may be a Laplacian-of-Gaussian filter. Another approach to forming the second term would be to use a Gaussian filter combined with subtraction. It can be shown that the above sharpening step 714 results in filter weights that approximate weights generated by use of 2nd-order kernel regression.
It is desirable to select the sharpening factor κ adaptively in order to sharpen details while avoiding noise amplification. Less sharpening is needed in flat regions of the image, while more sharpening can be used in areas with texture and edges. Hence, we may choose the sharpening factor locally, based on the local image structure. We can select the local sharpening factor κi based on the local spatial scaling parameter γi, which is large when there is significant local image structure and small when there is no interesting structure. Alternatively, we can select the sharpening factor based on the strength of the local image gradients, which are large in areas of edges and texture. Hence, a simple mechanism to choose κi is as follows:

κi=g(γi)η,

or alternatively:

κi=g(trace(Cis))η.

Here g is a global sharpening factor, and η is a sensitivity parameter (0≦η≦1.0). The global sharpening factor g may be chosen differently for luminance and chrominance components, hence g≡gY for luminance and g≡gC for chrominance.
The actual spatio-temporal upscaling and filtering stage 704 can be expressed as:




  
    
      
        
          
            z
            ^
          
          ⁡
          
            (
            x
            )
          
        
        =
        
          
            ∑
            
              i
              =
              1
            
            P
          
          ⁢
          
            
              
                W
                st
              
              ⁡
              
                (
                
                  
                    x
                    i
                  
                  -
                  x
                
                )
              
            
            ⁢
            
              
                y
                ⁡
                
                  (
                  
                    x
                    i
                  
                  )
                
              
              .
            
          
        
      
    
    
      
        (
        8
        )
      
    
  




It is understood that spatio-temporal processing can be performed either in a pixel-based, block-based, or frame-based manner. That is, several of the stages described above can be performed in a pixel-by-pixel manner, block-by-block manner, or by processing an entire frame at each stage. For example, determining the spatial steering parameters, determining the temporal confidence parameters, determining the spatio-temporal kernel weights, and performing the spatio-temporal filtering, may all be performed for all the pixels in a single image block, after which the next block of pixels will be processed. Block-based processing is often advantageous in order to keep the required memory and processing resources low.
FIG. 8 illustrates various components that may be utilized in a computer system 801. One or more computer systems 801 may be used to implement the various systems and methods disclosed herein. The illustrated components may be located within the same physical structure or in separate housings or structures. Thus, the term computer or computer system 801 is used to mean one or more broadly defined computing devices unless it is expressly stated otherwise. Computing devices include the broad range of digital computers including microcontrollers, hand-held computers, personal computers, servers, mainframes, supercomputers, minicomputers, workstations, and any variation or related device thereof.
The computer system 801 is shown with a processor 803 and memory 805. The processor 803 may control the operation of the computer system 801 and may be embodied as a microprocessor, a microcontroller, a digital signal processor (DSP) or other device known in the art. The processor 803 typically performs logical and arithmetic operations based on program instructions stored within the memory 805. The instructions in the memory 805 may be executable to implement the methods described herein.
The computer system 801 may also include one or more communication interfaces 807 and/or network interfaces 813 for communicating with other electronic devices. The communication interface(s) 807 and the network interface(s) 813 may be based on wired communication technology, wireless communication technology, or both.
The computer system 801 may also include one or more input devices 809 and one or more output devices 811. The input devices 809 and output devices 811 may facilitate user input. Other components 815 may also be provided as part of the computer system 801.
FIG. 8 illustrates only one possible configuration of a computer system 801. Various other architectures and components may be utilized.
The phrase “based on” does not mean “based only on,” unless expressly specified otherwise. In other words, the phrase “based on” describes both “based only on” and “based at least on.”
The term “processor” should be interpreted broadly to encompass a general purpose processor, a central processing unit (CPU), a microprocessor, a digital signal processor (DSP), a controller, a microcontroller, a state machine, and so forth. Under some circumstances, a “processor” may refer to an application specific integrated circuit (ASIC), a programmable logic device (PLD), a field programmable gate array (FPGA), etc. The term “processor” may refer to a combination of processing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
The term “memory” should be interpreted broadly to encompass any electronic component capable of storing electronic information. The term memory may refer to various types of processor-readable media such as random access memory (RAM), read-only memory (ROM), non-volatile random access memory (NVRAM), programmable read-only memory (PROM), erasable programmable read only memory (EPROM), electrically erasable PROM (EEPROM), flash memory, magnetic or optical data storage, registers, etc. Memory is said to be in electronic communication with a processor if the processor can read information from and/or write information to the memory. Memory may be integral to a processor and still be said to be in electronic communication with the processor.
The terms “instructions” and “code” should be interpreted broadly to include any type of computer-readable statement(s). For example, the terms “instructions” and “code” may refer to one or more programs, routines, sub-routines, functions, procedures, etc. “Instructions” and “code” may comprise a single computer-readable statement or many computer-readable statements.
The functions described herein may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored as one or more instructions on a computer-readable medium. The term “computer-readable medium” refers to any available medium that can be accessed by a computer. By way of example, and not limitation, a computer-readable medium may comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. Disk and disc, as used herein, includes compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk and Blu-ray® disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers.
Software or instructions may also be transmitted over a transmission medium. For example, if the software is transmitted from a website, server, or other remote source using a coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of transmission medium.
The methods disclosed herein comprise one or more steps or actions for achieving the described method. The method steps and/or actions may be interchanged with one another without departing from the scope of the claims. In other words, unless a specific order of steps or actions is required for proper operation of the method that is being described, the order and/or use of specific steps and/or actions may be modified without departing from the scope of the claims.
It is to be understood that the claims are not limited to the precise configuration and components illustrated above. Various modifications, changes and variations may be made in the arrangement, operation and details of the systems, methods, and apparatus described herein without departing from the scope of the claims.

## Claims

1. A method for adaptive spatio-temporal filtering, comprising:
determining local motion vectors between a current video frame and other nearby video frames;
determining local temporal confidence parameters;
determining local spatial steering parameters;
using the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters to adaptively determine spatio-temporal kernel weights, wherein adaptively determining the spatio-temporal kernel weights comprises defining three-dimensional spatio-temporal kernel weights based on a two-dimensional spatial kernel and a one-dimensional temporal kernel; and
using the spatio-temporal kernel weights to perform spatio-temporal filtering on input video data.

2. The method of claim 1, wherein the spatio-temporal filtering comprises at least one of upscaling, denoising, and sharpening.

3. The method of claim 1, further comprising defining sets of discretized parameter values, wherein the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters are determined from the sets of discretized parameter values.

4. The method of claim 1, wherein the spatio-temporal kernel weights are determined from a look-up table.

5. The method of claim 1, wherein the local spatial steering parameters comprise a scaling parameter, and wherein determining the scaling parameter comprises:
determining local spatial image gradients based on the current video frame;
determining gradient covariance coefficients based on the local spatial image gradients;
determining the scaling parameter from the gradient covariance coefficients; and
applying scalar quantization to the scaling parameter.

6. The method of claim 1, wherein the local spatial steering parameters comprise an orientation angle parameter and an elongation parameter, and wherein determining the orientation angle parameter and the elongation parameter comprises:
defining combinations of quantized orientation angle parameters and quantized elongation parameters;
determining gradient covariance coefficients for the combinations of quantized orientation angle parameters and quantized elongation parameters;
determining local spatial image gradients based on a current video frame;
determining gradient covariance coefficients based on the local spatial image gradients; and
determining a combination of a quantized orientation angle parameter and a quantized elongation parameter whose gradient covariance coefficients are nearest to the image-derived gradient covariance coefficients.

7. The method of claim 1, wherein determining the local temporal confidence parameters comprises determining the correlation between candidate pixels in reference video frames and pixels that are being estimated in the current video frame.

8. The method of claim 7, wherein determining the local temporal confidence parameters further comprises applying a pre-smoothing filter.

9. The method of claim 1, further comprising modifying the spatio-temporal kernel weights.

10. The method of claim 9, wherein modifying the spatio-temporal kernel weights comprises sharpening the spatio-temporal kernel weights, and wherein sharpening the spatio-temporal kernel weights comprises:
convolving the spatio-temporal kernel weights with a kernel;
multiplying the result of the convolution operation by a sharpening factor; and
adding the result of the multiplication operation to the original spatio-temporal kernel weights.

11. The method of claim 10, wherein the sharpening factor is selected based on local image gradients.

12. The method of claim 1, wherein the nearby video frames comprise reference video frames that are temporally positioned before as well as following the current video frame.

13. The method of claim 1, wherein processing is performed in a block-based manner.

14. A computer system that is configured to perform adaptive spatio-temporal filtering, comprising:
a processor;
memory in electronic communication with the processor;
instructions stored in the memory, the instructions being executable to:
determine local motion vectors between a current video frame and other nearby video frames;
determine local temporal confidence parameters;
determine local spatial steering parameters;
use the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters to adaptively determine spatio-temporal kernel weights, wherein adaptively determining the spatio-temporal kernel weights comprises defining three-dimensional spatio-temporal kernel weights based on a two-dimensional spatial kernel and a one-dimensional temporal kernel; and
use the spatio-temporal kernel weights to perform spatio-temporal filtering on input video data.

15. The computer system of claim 14, further comprising instructions executable to define sets of discretized parameter values, wherein the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters are determined from the sets of discretized parameter values.

16. The computer system of claim 14, further comprising instructions executable to sharpen the spatio-temporal kernel weights.

17. A non-transitory computer-readable storage medium comprising instructions that, when executed by a processor, cause a computing device to:
determine local motion vectors between a current video frame and other nearby video frames;
determine local temporal confidence parameters;
determine local spatial steering parameters;
use the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters to adaptively determine spatio-temporal kernel weights, wherein adaptively determining the spatio-temporal kernel weights comprises defining three-dimensional spatio-temporal kernel weights based on a two-dimensional spatial kernel and a one-dimensional temporal kernel; and
use the spatio-temporal kernel weights to perform spatio-temporal filtering on input video data.

18. The computer-readable storage medium of claim 17, further comprising instructions that, when executed by the processor, cause the computing device to define sets of discretized parameter values, wherein the local motion vectors, the local temporal confidence parameters, and the local spatial steering parameters are determined from the sets of discretized parameter values.

19. The computer-readable storage medium of claim 17, further comprising instructions that, when executed by the processor, cause the computing device to sharpen the spatio-temporal kernel weights.