We will start by presenting an overview of the method and the contents of this project.
We will use CornerDetector
to compute and return a list of detected keypoints.
The main steps in the detection algorithm are:
- Compute the image gradients using derivative of Gaussian filters.
- Use the image gradients to compute the images A, B, C from the lectures:
- Element-wise products of the gradients.
- Apply windowing by convolving these with a (bigger) Gaussian.
- Use A, B and C to compute a corner metric for the entire image:
- λmin, Harris and Harmonic Mean.
- Threshold the corner metric image and find local maxima:
- Morphological operations.
- Logical operations.
We will then try to find a circle hidden in the list of detected corner keypoints.
To achieve this, we will use CircleEstimator
to apply RANSAC, and extract the circle estimate based on the largest set of inliers.
We have chosen to distribute the code on the following files:
-
main.cpp
Starts the lab, catches any exceptions and prints their error message on the console.
-
lab_corners.h, lab_corners.cpp
Implements the main loop:
- Get next frame
- Detect corners
- Estimate circle from corner points
- Display results
-
corner_detector.h, corner_detector.cpp
Implements a class that can perform corner detection on frames. You will be responsible for writing most of the code in corner_detection.cpp.
-
filters.h, filters.cpp
Contains functions that create 1D Gaussian and 1D derivated Gaussian kernels. You will implement the derivated Gaussian kernel function.
-
circle_estimator.h, circle_estimator.cpp
Implements a class that estimates circles from points along the circle circumference. You will be responsible for finishing the RANSAC loop.
-
circle.h, circle.cpp
Implements a basic circle and functions for creating circles and measuring distances between circles and points.
First, take a look at the runLabCorners()
function in lab_corners.cpp.
Try to understand the steps taken here, and please ask one of the instructors if you are uncertain.
Then build and run the project. You should be able to see a video stream from the camera, but the program doesn't do anything interesting - yet!
Please continue to the next step to get started with the interesting stuff!