The SKV Algorithm as a Tool in Image Processing


The skv algorithm was introduced as a method of identifying onsets and offsets in a model of auditory signal processing (Coath 2005) and it is also an integral part of a model of auditory feature extraction (Denham 2005) (Coath 2007). It has been found to exhibit a range of desirable properties, as well as some features that make it biophysically plausible. The method has subsequently been used in a range of contexts including auditory salience detection (Kovacs 2015), beat tracking (Coath 2009), and studies of infant speech production (Warlaumont 2016).

It has also been shown that the important features of the skv response can be captured in the output of an artificial neural network (Kovacs 2013). These results demonstrate that the approach is suitable for parallel distributed programming and, possibly, other ’neuromorphic’ implementations.

The abbreviation skv when applied to auditory signals was derived from skewness over variable time, reflecting the measure of asymmetry (the skewness or third normalized moment) and the technique of varying the time window over which this value was calculated (Coath 2005). For image processing the v will stand instead for ’variable spatial frequency’, which also relates to the size of the window used.



For results derived from monochrome images each pixel is defined by three values; two coordinates \(i\) and \(j\), and a single value \(k\) that is the value of the pixel on the gray-scale from 0 (black) to 1 (white). Images are processed on a pixel-by-pixel basis and the skv value of each pixel \(\gamma_{i,j}\) is calculated thus:

  1. the number of pixels \(m\) corresponding to half the required window size \(w\) is calculated: \(m = \mathrm{floor}(\frac{w}{2})\)

  2. hence the working window size \(n\) is always odd and equal to \(2m+1\) even when this differs from \(w\) by one

  3. extract the horizontal vector \(\vec{k}_{h}\) of values for a window of \(n\) pixels around the current position \(k_{[i,j-m \: : \: i,j+m]}\)

  4. repeat with \(\vec{k}_{v}\), a vector of values for a vertical window \(k_{[i-m,j \: : \: i+m,j]}\)

  5. both vectors are normalized, so they can be treated as distributions, and the skewness of each distribution (i.e. a measure of the asymmetry in the gray-scale values in both direction) is calculated, \(\gamma_h\) and \(\gamma_v\)

  6. the skv value of the current pixel \(\gamma_{i,j}\) is the mean of the two values \(\frac{\gamma_h + \gamma_v}{2}\)

There will be anomalies in the results arising from the simplicity of this method, the most obvious of which is that features that are extended along the horizontal or vertical axis, but not both (that is thin horizontal and vertical lines) will enjoy a privileged position (see Figure \ref{fig:gaborfine}). This can be easily overcome by employing a more sophisticated variant of the method.

In order to compare results from a range of pictures the window size will not be reported in pixels, but as the number of windows along the longest side of the image. For example, if a picture is 640 \(\times\) 480 pixels and the skv is calculated with a window size of 64 pixels then this will be written as skv\(_{10}\) as the window size is one tenth of the longest side.

For colour pictures each pixel is defined by its coordinates \(i\) and \(j\) and three values \(k_R\), \(k_G\), \(k_B\) representing the colour of the pixel. In the results for colour pictures it will be made clear if the method has been applied to one or more, or some combination of the RGB values.


Apart from the size of the window the algorithm contains no free parameters.


All photographic images are drawn either from the Pixabay free images website or from examples of hybrid images (Oliva 2006). Additional test images were generated by the author using Matlab.


Gabor Patches

To illustrate some of the simple properties of the method two figures are included in this section showing the results of processing sets of Gabor patches.

\label{fig:gaborcoarse} (a) Gabor patches with spatial frequency 20 cycles per frame (b) skv\(_{50}\) (c) skv\(_{10}\)