# 3x3 convolution kernels with online demo

*Which are the most used 3x3 convolution kernels/matrices?**Which kernel is used for averaging, applying blur or smooth effect, do sharpening or for the emboss effect?**Which kernels can be used to detect edges, calculate the gradient or the smoothed gradient?**Can I try somewhere the two dimensional convolution in an interactive application?*

The frequently used 3x3 convolution kernels are listed below with some short description. At the end of this post there is an interactive demo, where you can try and play with different 3x3 kernels. For the mathematical background of the usage of these kernels, please read the previous post on two dimensional convolution.

## Average (blur, smooth) 3x3 convolution kernel

$$

A = \left[\begin{array}{rrr}\phantom{-}1&\phantom{-}1&\phantom{-}1\\1&1&1\\1&1&1\end{array}\right]

$$

This kernel is used for noise reduction and blurring the image. Must be normalized, otherwise the result may not fit the *(0, 255)* range.

## Sharpen 3x3 convolution kernel

$$

S = \left[\begin{array}{rrr}0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0\end{array}\right]

$$

This kernel is used to enhance the small differences and edges in the image.

## Edge detection 3x3 convolution kernels

$$

\begin{aligned}

E &= \left[\begin{array}{rrr}0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0\end{array}\right] \\

E_H &= \left[\begin{array}{rrr}0 & \phantom{-}0 & 0 \\ -1 & 2 & -1 \\ 0 & 0 & 0\end{array}\right] \\

E_V &= \left[\begin{array}{rrr}\phantom{-}0 & -1 & \phantom{-}0 \\ 0 & 2 & 0 \\ 0 & -1 & 0\end{array}\right]

\end{aligned}

$$

These kernels are sensitive to the edges. Kernel *E* is for detecting in both directions, while *E _{H}* and

*E*are sensitive for the horizontal and vertical edges respectively.

_{V}## Gradient detection 3x3 convolution kernels

$$

\begin{aligned}

G_H&=\left[\begin{array}{rrr}-1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1\end{array}\right] \\

G_V&=\left[\begin{array}{rrr}-1 & \phantom{-}0 & \phantom{-}1 \\ -1 & 0 & 1 \\ -1 & 0 & 1\end{array}\right]

\end{aligned}

$$

Kernels *G _{H}* and

*G*are to calculate the magnitude of the horizontal and the vertical gradient.

_{V}## Sobel operator 3x3 convolution kernels

$$

\begin{aligned}

S_H &= \left[\begin{array}{rrr}1&2&1 \\0&0&0 \\-1&-2&-1\end{array}\right]=\left[\begin{array}{rrr}1 \\0 \\-1\end{array}\right]\cdot\left[\begin{array}{rrr}1&\phantom{-}2&\phantom{-}1\end{array}\right] \\

S_V &= \left[\begin{array}{rrr}\phantom{-}1&\phantom{-}0 &-1 \\2&0&-2 \\1&0&-1\end{array}\right]=\left[\begin{array}{rrr}\phantom{-}1 \\2 \\1\end{array}\right]\cdot\left[\begin{array}{rrr}1&\phantom{-}0&-1\end{array}\right]

\end{aligned}

$$

Sobel operators are similar to the gradient kernels approximating the smoothed gradient of the image in horizontal and vertical directions. It can be seen from the decomposing, that this operator is a combination of a gradient detector and a smoothing kernel.

## Emboss 3x3 convolution kernel

$$

M = \left[\begin{array}{rrr}-2 & -1 & \phantom{-}0 \\ -1 & 1 & 1 \\ 0 & 1 & 2\end{array}\right]

$$

This kernel creates an embossing effect, can be rotated to modify the direction of this operator.

## Demo application

This program demonstrates using 3x3 convolution kernels on classic image processing source images. Please click on the label to load the application. It shall run in every modern browser, including IE9+.

You can use the currently filtered image as source by clicking the *Use filtered image* button. Some predefined kernels can be chosen, but values are directly selectable too. Setting *Filter normalization* divides the convolution result by the summary of the elements in the kernel. It is important to mention, that on the result image the absolute output values are shown.