Lecture: Corner Detection


Corners and Feature Points

Universitetsområdet i Ålesund
Universitetsområdet i Ålesund
Universitetsområdet i Ålesund (ny vinkel)
Universitetsområdet i Ålesund (ny vinkel)
  • What are distinctive points in the image?
  • Distinctive points can (to some extent) be matched in two different images.

Corners in Mathematical Terms

  • Luminance (colour) is a function \(I(x,y)\) in the co-ordinates \(x\) and \(y\)
  • Corners are sharp changes in colour/luminance.
  • Sharp changes are large values in the derivatives of \(I\),
    • i.e. a large gradient \(\nabla I(x,y)\)


  • Sampled signal \(f[x]\).
    • The derivative is only defined on continuous functions \(f(x)\).
  • Reconstruct the original signal.
    • Assume that it is bandwidth limited.
  • Consider the Discrete Fourier Transform
    • Gives a Frequency Domain representation
    • The signal represented as a sum of sine waves.
    • Nyquist tells us that we can reconstruct the signal perfectly if it is sampled at twice the highest non-zero frequency. (At least two samples per wave.)
  • Let \(T\) be sampling period
    • \(\omega_s=\frac{2\pi}{T}\) is the sampling frequency
  • Ideal reconstruction filter
    • Frequency domain \(H(\omega)=1\) between \(\pm\pi/T\)
    • Time domain \[h(x)=\frac{\sin(\pi x/T)}{\pi x/T}\]
  • Apply filter
    • Multiply in frequency domain
    • Convolve in time domain
  • Reconstructed function: \(f(x) = f[x]* h(x)\)
    • Assuming bandwidth limited signal, \(\omega_n(f)<\pi/T\)
  • The reconstructed function can be differentiated.


\[f[x]*h(x) = \sum_{k=-\infty}^{\infty} f[k]h(x-k)\]

  • Note the convolution of a sampled signal and a continuous one
  • Demo

Note OpenCV uses correlation instead of convolution. Conceptually this is different, but in practice, the only effect is to mirror the filter.

Differentiation of the reconstructed signal

\[D\{f(x)\} = D\{f[x]*h(x)\}\]

\[D\{f(x)\} = D\{\sum_{k=-\infty}^{\infty} f[k]h(x-k)\}\]

Both convolution and derivation are linear operators

\[D\{f(x)\} = \sum_{k=-\infty}^{\infty} f[k]D\{h(x-k)\}\]

This is a convolution with the derivative of \(h\).

\[D\{f(x)\} = f[x]*D\{h(x)\}\]


Now, we can sample this signal to get

\[S\{f'(x)\} = S\{f(x)*D\{h(x)\} = f[x]*S\{h'(x)\} = f[x]*h'[x]\]

  • In other words, the derivative a sampled signal is a convolution with \(h'[x]\).
  • Unfortunately, \(h[x]\) has infinite extent, so this is not practical.
  • Truncations would also leave artifacts

Possible approximations


\[g(x) = \frac{1}{\sqrt{2\pi}\sigma}\exp\frac{-x^2}{2\sigma^2}\]

\[g'(x) = \frac{x}{\sigma^2\sqrt{2\pi}\sigma}\exp\frac{-x^2}{2\sigma^2}\]

Also infinite extent, need to trunctate.


\[h'[x] = ½[1,-1]\]


Note This filter takes the plain difference between adjacent pixels, and is therefore extremely susceptible to noise. The larger filters have a blurring effect as well as differentiating, by depending on a larger window.


\[h[x] = [1,\sqrt{2},1]/(2+\sqrt2)\]

\[h'[x] = [1,0,-1]/3\]

Sobel without constant factors

\[h[x] = [1,2,1]\]

\[h'[x] = [1,0,-1]\]

Going to 2D

\[D_x\{I(x,y)\} = I[x,y]*D_x\{h(x,y)\} = I[x,y]*D_x\{h(x)\}*h(y)\]

The last equality holds for separable filters only. The ideal sync and suggested approximations are separable.

\[I_x[x,y] = I[x,y]*g'[x]*g[y] = \sum_{k=-\omega/2}^{k=\omega/2} \sum_{l=-\omega/2}^{l=\omega/2} I[k,l]g'[x-k]g[y-l]\]

Corner Detection

\[\nabla I(x,y)= [ I_x, I_y ]^T\]

  • Feature point: \(I_x\) and \(I_y\) are large
  • Horizontal edge: \(I_x\) is small, \(I_y\) is large
  • Vertical edge: \(I_y\) is small, \(I_x\) is large
  • Is both \(I_x\) and \(I_y\) large a guarantee for a feature point?
  • No, we could have a diagonal edge.
    • We nead a measure which is rotationally invariant.
  • No, it could be a textured surface - every pixel is a corner
    • We need to look at a window \(W(\mathbf{x})\) around the pixel \(W(\mathbf{x})\)
  • No, small variation could be due to random noise

\[G(\mathbf{x}) = \sum_{\mathbf{\tilde x}\in W(\mathbf{x})} \nabla I(\mathbf{\tilde x}) \nabla I^T(\mathbf{\tilde x})\]

\[G = \begin{bmatrix} \sum I_x^2 & \sum I_xI_y \\ \sum I_xI_y & \sum I_y^2 \end{bmatrix} \]

  • If this matrix is non-singular we have a corner (or texture)
    • If \(I_x=0\) or \(I_y=0\) we get a singular matrix
    • We also get a singular matrix if one of the derivatives vanish in some rotation of the image
  • If both the singular values (eigenvalues) are non-zero, then the matrix is non-singular
  • Consider the following heuristic \[C(G)=||G|| + k\mathsf{tr}^2(G)=\lambda_1\lambda_2 + k(\lambda_1+\lambda_2)\] where \(k\) is a constant scalar and \(\lambda_1\) the eigenvalues
  • If \(k\) is small, both eigenvalues must be large to make \(C(G)\) large
  • If \(k\) is large, one large eigenvalue suffices

The Harris Corner Detector uses \(C(G)\) as its heuristic.

The Laplacian

The Laplacian is commonly used in image processing, even if I have not seen it as often in the machine vision literature. The idea is to use the second order derivative, \[\nabla^2I(x,y)\] This is commonly approximated by one of the filters \[\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} \quad\text{or}\quad \begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix} \] To avoid the problems of the small window size, we typically combine the Laplacian with a blurring filter, usually a Gaussian. Thus we compute \[ E = L*G*I\] where \(I\) is the image, \(L\) the Laplacian, and \(G\) the Gaussian. Because of the associativity of linear operations, we have \[ E = L*(G*I)=(L*G)*I\] In other words, we can precaulcualte the Laplacian of Gaussian (LoG) filter \(L*G\) as one filter.