# Are there algorithms besides Canny edge detection that can create consistent width edges?

Sobel edge detection is pretty much the quintessential way to get edges out of an image. It however suffers from certain quirks.

One example is, because it's gradient, based certain surfaces exhibit weird appearances in certain saliency maps. For example, given a depth image, take a plane and start inclining it. You will notice that as the plane becomes more and more perpendicular to the view, a large section of it acquires a higher and higher gradient magnitude. Thus resulting in a major area of the plane being considered an edge by any thresholding mechanism. In other words, towards the horizon, the depth difference of ANY pair of adjacent pixels that contain a portion of the plane becomes significantly large, thus getting selected as edges, despite not being edges.

This also means that regions with bigger z differences tend to have bigger edges. Consider a sphere placed in front of a near plane vs a sphere placed in front of a far plane, both spheres at the same distance from the camera. If any interpolation filtering is active, then the sphere in the near plane has less pixels with large deltas than the one in the far plane thus its outline is bigger.

Canny addresses this problem by doing a per pixel local search and min maxing the gradient magnitude to guarantee a one pixel wide edge. However, this is not easily parrallelizable (not GPU friendly) and thus slow.

Are there other algorithms that maintain edge width that are more suitable for real time applications? The width doesn't have to be perfectly one pixel wide, rather I am just looking to reducing the standard deviation of the edge with. They don;t have to be perge

• Threshold the gradient magnitude, or use the zero crossings of the laplacian. – lightxbulb Aug 1 '20 at 7:12
• Thresholding the gradient magnitude is essentially sobel. : p – Makogan Aug 1 '20 at 18:39
• Well, no: en.wikipedia.org/wiki/Sobel_operator – lightxbulb Aug 1 '20 at 19:35