Revision 7a7047a1d26936ce134478e9d314c9aea0bd3b04 (click the page title to view the current version)

Edges

Changes from 7a7047a1d26936ce134478e9d314c9aea0bd3b04 to 0a619f7e06b4ae0ca7203d322dea1dafde07d43e

---
title: Edge Detection
categories: session
---

**Date** 29 September 2021

**Briefing** [Edge Lecture]()

**Reading** Ma (2004) Ch 4.4;
Tutorials on OpenCV:
[Canny Edge Detection](https://docs.opencv.org/4.x/da/d22/tutorial_py_canny.html);
[Hough Circle Transform](https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html)

# Exercises

## Python API

This is based on Ma (2004) Exercise 4.9, which is written for Matlab.

### The Canny 

1.  Find a test image.
2.  Test the `Canny` edge detector in OpenCV.
    See the [tutorial](https://docs.opencv.org/4.x/da/d22/tutorial_py_canny.html)
    for an example. 
    What kind of data does it generate?  What do the data look like?
3.  Experiment with different thresholds and different window sizes
    (apertures).
    See the [docs](https://docs.opencv.org/3.4/dd/d1a/group__imgproc__feature.html#ga04723e007ed888ddf11d9ba04e2232de) for overview of the parameters
    for `Canny`.

It is not difficult to implement your own Canny edge detector.
The exercise would be very similar to the Harris corner detector,
and add little new.

### Connected Components

The edge detector gives a binary image.  How can you find collections
of pixels forming edges?

You can either,

1. implement your own connected components function, using the ideas
   from the [briefing](Edge Lecture), or
2. test the `ConnectedComponents` function in OpenCV.

Visualise the components you find, for instance by using different
colours  Do they correspond to the objects *you* see in the image?

### Line fitting

If you do not have time to try both approaches, that's all right,
but you should at least try one.  Feel free to choose,

#### Basic approach

1.  Implement a simple line fitter using the ideas from the
    [briefing](Edge Lecture).
2.  Can you identify straight lines among the components?
3.  Calculate the angle $\theta$ and the distance $\rho$ from the
    origin for each component.

### Hough
#### Hough transform

**TODO**
1.  Run through the tutorial to [Hough Circle Transform](https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html)
2.  Tweak the code to print out the co-ordinates of the lines detected, that is $\theta$ and $\rho$
3.  Write a function to find the lines intersect the $x$- and $y$-axes, and list this information too.
4.  Can you see (easily) where each image ought to be in the visual image?

## Project

1.  Can you use edge detection in your tracker project?
2.  Is it possible to match the edges to the object you want to track?
3.  Can the multiple connected components be used to give an idea about
    different objects in the scene?

Use the rest of the time to improve the tracker.