Python implementation of the laplacian of gaussian edge detection
I am looking for the equivalent implementation of the laplacian of gaussian edge detection.
In matlab we use the following function
[BW,threshold] = edge(I,'log',...)
In python there exist a function for calculating the laplacian of gaussian. It is not giving the edges back definitely.
Any pointer to online implementation or the code
What matlab edge() do should be
- Compute LoG
- Compute zero crossings on LoG
- Compute a threshold for local LoG difference
- Edge pixels = zero crossing && local difference > threshold
The LoG filter of scipy only does step 1 above. I implemented the following snippet to mimic step 2~4 above:
import scipy as sp import numpy as np import scipy.ndimage as nd import matplotlib.pyplot as plt lena = sp.misc.lena() LoG = nd.gaussian_laplace(lena, 2) thres = np.absolute(LoG).mean() * 0.75 output = sp.zeros(LoG.shape) w = output.shape h = output.shape for y in range(1, h - 1): for x in range(1, w - 1): patch = LoG[y-1:y+2, x-1:x+2] p = LoG[y, x] maxP = patch.max() minP = patch.min() if (p > 0): zeroCross = True if minP < 0 else False else: zeroCross = True if maxP > 0 else False if ((maxP - minP) > thres) and zeroCross: output[y, x] = 1 plt.imshow(output) plt.show()
This of course is slow and probably not idiomatic as I am also new to Python, but should show the idea. Any suggestion on how to improve it is also welcomed.