Существует множество возможностей обнаружения краев, но три упомянутых вами примера попадают в 3 различные категории.
Это приближает производную первого порядка. Дает экстремумы в положениях градиента, 0, где градиента нет. В 1D это = [ - 101]
- плавный край => локальный минимум или максимум, в зависимости от того, идет ли сигнал вверх или вниз.
- 1 пиксельная линия => 0 в самой строке, рядом с которой располагаются локальные экстремумы (другого знака). В 1D это = [ 1- 21]
Есть другие альтернативы Собелу, которые имеют +/- те же характеристики. На странице Робертс Кросс в Википедии вы можете найти сравнение некоторых из них.
Это приближает производную второго порядка. Дает 0 в позициях градиента, а также 0, где градиента нет. Это дает экстремумы, где (более длинный) градиент начинается или останавливается.
- гладкий край => 0 вдоль края, локальные экстремумы в начале / конце края.
- 1 пиксельная линия => «двойной» экстремум на линии, с «нормальными» экстремумами с другим знаком рядом с ним
Эффект этих 2 на различных типах краев лучше всего увидеть визуально:
Это не простой оператор, но многоэтапный подход, который использует Sobel в качестве одного из шагов. В тех случаях, когда Собел и Лаплас дают вам результат в градациях серого / с плавающей запятой, который вам нужно пороговить самостоятельно, алгоритм Canny имеет интеллектуальное пороговое значение в качестве одного из своих шагов, поэтому вы просто получаете двоичный результат да / нет. Кроме того, по гладкому краю вы, вероятно, найдете только 1 линию где-то посередине градиента.