Existem muitas possibilidades de detecção de borda, mas os três exemplos mencionados caem em três categorias distintas.
Isso aproxima uma derivada de primeira ordem. Dá extremos nas posições de gradiente, 0 onde nenhum gradiente está presente. Em 1D, é = [−101]
- borda suave => local mínimo ou máximo, dependendo do sinal subindo ou descendo.
- 1 linha de pixel => 0 na própria linha, com extremos locais (de sinal diferente) logo ao lado. Em 1D, é = [1−21]
Existem outras alternativas para Sobel, que têm +/- as mesmas características. Na página da Roberts Cross na wikipedia, você encontra uma comparação de algumas delas.
Isso aproxima uma derivada de segunda ordem. Dá 0 nas posições de gradiente e também 0 onde nenhum gradiente está presente. Dá extrema onde um gradiente (mais longo) começa ou para.
- borda suave => 0 ao longo da borda, extremos locais no início / parada da borda.
- 1 linha de pixel => um extremo "duplo" na linha, com extremos "normais" com um sinal diferente logo ao lado
O efeito desses 2 em diferentes tipos de arestas pode ser melhor visualizado visualmente:
Este não é um operador simples, mas é uma abordagem de várias etapas, que usa Sobel como uma das etapas. Onde Sobel e Laplace oferecem um resultado em escala de cinza / ponto flutuante, que você precisa definir como limiar, o algoritmo Canny tem o limiar inteligente como uma de suas etapas, para que você obtenha um resultado binário sim / não. Além disso, em uma borda suave, você provavelmente encontrará apenas 1 linha em algum lugar no meio do gradiente.