# Differentiation - The Canny edge detector

- \(\nabla I = [ I_x, I_y ]\) is the gradient vector.
- It has length and direction in each pixel in the image.
- Length \(||\nabla I(x,y)||^2= \nabla I^T\nabla I\)
- Select points which satisfy two criteria
- Local optimum
*along the direction of the gradient*
- Larger than a chosen threshold \(\tau\).
- Sometimes we use a soft and a hard threshold, where points between the two thresholds are selected if they are adjacent to other selected points.

- We can calculate \(\nabla I\) with either Sobel or the derivative of a Gaussian.

# Connected Components

- Start with a singleton set (single pixel).
- Use a mask, typically a \(3\times3\) patch and centre it at each pixel already selected.
- Pixels in the mask
*and* the original image are added to the set.
- Iterate until no pixels are added.

# Line Fitting

- Consider each connected component by itself; each one is a set of pixels with \((x,y)\) co-ordinates.
- Calculate the centre, that is the mean \((\bar x,\bar y)\).
- Calculate pixel positions relative tp the, i.e. \((\tilde x_i,\tilde y_i)\) where \(\tilde x_i=x_i-\bar x\) and \(\tilde y_i=y_i-\bar y\).
- Consider the matrix \[D=
\begin{bmatrix}
\sum_i \tilde x_i^2 & \sum_i \tilde x_i\tilde y_i \\
\sum_i \tilde x_i\tilde y_i & \sum_i \tilde y_i^2 &
\end{bmatrix}
\]
- Suppose as an example that the \(\tilde y_i\) are (approximately) zero and that there are many large \(\tilde x_i\).
- the matrix has one zero eigenvector and one eigenvector in the direction of \(x\).
- the points form an edge in the \(x\) direction

- If the edge is rotated both \(\tilde x_i\) and \(\tilde y_i\) are non-zero, but the eigenvectors behave the same.
- One zero eigenvector
- One eigenvector in the direction of the edge.

- If the line is not straight, this is not perfect and the smaller eigenvalue is also non-zero.
- The line is described by \(y\sin\theta-x\cos\theta=\rho\), where \(\rho\) is the distance between the line and the origin.
**TODO** drawing

# Hough