Laplacian Of Gaussian (MarrHildreth) Edge Detector
The following are my notes on part of the Edge Detection lecture by Dr. Shah: Lecture 03 – Edge Detection

Noise can really affect edge detection, because noise can cause one pixel to look very different from its neighbors.

To account for this, we take advantage of the fact that neighboring pixels along an edge tend to look similar.

Gaussian smoothing helps eliminate noise. The larger the sigma, the greater the smoothing.

The simplest edge detectors are the Prewit and Sobel edge detectors. These are pretty old.

Laplacian of Gaussian (MarrHildreth) is better.

Even better: Gradient of Gaussian (Canny)
**Prewitt and Sobel: **

Compute derivatives in x and y directions.

Find gradient magnitude

Threshold the magnitude.
Copmuting derivatives: **First you smooth out the images by averaging with the mask: The below image shows the Prewitt mask in the xdirection. The right hand side represents the operator as two operations. The vertical vector represents a smoothing of the image by averaging. The horizontal vector represents the derivative in the x direction. These two operations can be combined into a single mask as shown on the left hand side. **
**Copmuting the magnitude of the vector incorporates both the the derivative in the x and y direction, and this ensures that we’re able to detect edges at any angle (not just horizontal or vertical edges). ** MarrHildreth **The MarrHildreth operator is also called the Laplacian of Gaussian, which I saw referenced in SIFT…** **

Apply Gaussian smoothing

Take the second derivative and look for zero crossings (where 2nd derivative = 0, but is not constant 0)
1. When the first derivative is at a maxima or minima the second derivative is 0.
2. Pixels where a zero crossing occurs are marked as edges (if the slope of the crossing exceeds a threshold).
3. Look for zero crossings along each row (why not by columns, too?)

According to Wikipedia, this edge detector is more of historical significance because it has a couple serious flaws, and the Canny edge detector is better.

MarrHildreth performs the smoothing using the Gaussian instead of just simple averaging. We already know that the Gaussian does a better job of smoothing, so that’s already one improvement.

The second order derivative is the Laplacian?
 Rather than convolve the image with the gaussian and take the second order derivative of the result, you can actually take the 2nd derivative of the gaussian itself.
**
 You can precompute the mask values, as shown below. He generally uses a sigma of 1, so I assume that’s the case here:
** **
[8:14 Lecture 3]

Zero crossings occur in the image wherever a positive value is followed by a negative value, or vice versa. Or there may even be a 0 in between a positive and negative value.
 The absolute difference between the negative and positive values gives you the slope of the crossing, which is a measure of the strength of the edge.

In the same way that we were able to separate the Gaussian filter to improve performance, we can separate the Laplacian of Gaussian
** [15:40 Lecture 3]  Note: g(x) and g(y) should be switched!

The Gaussian filter can be applied with 2n multiplications (where n is the mask size), but the LoG requires 4n.

This requires four passes of the image to apply the 1D vectors (with a final fifth pass to sum the results?)