Operador Sobel
O operador sobel é muito semelhante ao operador Prewitt. Também é uma máscara derivada e é usada para detecção de bordas. Como o operador Prewitt, o operador sobel também é usado para detectar dois tipos de bordas em uma imagem:
- Direção vertical
- Direção horizontal
Diferença com o operador Prewitt
A principal diferença é que no operador sobel os coeficientes das máscaras não são fixos e podem ser ajustados de acordo com nossa exigência, a menos que não violem nenhuma propriedade das máscaras derivadas.
A seguir está a máscara vertical do Operador Sobel:
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
Esta máscara funciona exatamente da mesma forma que a máscara vertical do operador Prewitt. Há apenas uma diferença: ele possui valores “2” e “-2” no centro da primeira e da terceira colunas. Quando aplicada a uma imagem, essa máscara destacará as bordas verticais.
Como funciona
Quando aplicamos esta máscara na imagem, ela destaca bordas verticais. Ele simplesmente funciona como uma derivada de primeira ordem e calcula a diferença de intensidades de pixel em uma região de borda.
Como a coluna central é zero, ela não inclui os valores originais de uma imagem, mas sim calcula a diferença entre os valores dos pixels direito e esquerdo em torno dessa borda. Além disso, os valores centrais da primeira e da terceira coluna são 2 e -2, respectivamente.
Isso dá mais peso aos valores de pixel ao redor da região da borda. Isso aumenta a intensidade da borda e torna-se melhorada comparativamente à imagem original.
A seguir está a máscara horizontal do Operador Sobel
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
A máscara acima encontrará arestas na direção horizontal e é porque essa coluna de zeros está na direção horizontal. Quando você vai convolver esta máscara em uma imagem, ela criaria bordas horizontais proeminentes na imagem. A única diferença entre ele é que ele tem 2 e -2 como um elemento central da primeira e terceira linhas.
Como funciona
Essa máscara destacará as bordas horizontais de uma imagem. Ele também funciona com o princípio da máscara acima e calcula a diferença entre as intensidades de pixel de uma borda específica. Como a linha central da máscara consiste em zeros, ela não inclui os valores originais da borda da imagem, mas sim calcula a diferença das intensidades de pixel acima e abaixo da borda particular. Aumentando assim a mudança repentina de intensidades e tornando a borda mais visível.
Agora é hora de ver essas máscaras em ação:
Imagem de amostra
A seguir está um exemplo de imagem na qual aplicaremos as duas máscaras acima, uma de cada vez.
Depois de aplicar a Máscara Vertical
Após aplicar a máscara vertical na imagem de amostra acima, a imagem a seguir será obtida.
Depois de aplicar a máscara horizontal
Depois de aplicar a máscara horizontal na imagem de amostra acima, a imagem a seguir será obtida
Comparação
Como você pode ver, na primeira imagem em que aplicamos a máscara vertical, todas as arestas verticais são mais visíveis do que a imagem original. Da mesma forma, na segunda imagem aplicamos a máscara horizontal e, como resultado, todas as arestas horizontais são visíveis.
Portanto, desta forma você pode ver que podemos detectar as bordas horizontais e verticais de uma imagem. Além disso, se você comparar o resultado do operador sobel com o operador Prewitt, descobrirá que o operador sobel encontra mais arestas ou torna as arestas mais visíveis em comparação com o operador Prewitt.
Isso ocorre porque no operador sobel atribuímos mais peso às intensidades de pixel ao redor das bordas.
Aplicando mais peso à máscara
Agora também podemos ver que, se aplicarmos mais peso à máscara, mais arestas ela terá para nós. Além disso, conforme mencionado no início do tutorial, não há coeficientes fixos no operador sobel, então aqui está outro operador ponderado
-1 | 0 | 1 |
-5 | 0 | 5 |
-1 | 0 | 1 |
Se você puder comparar o resultado desta máscara com o da máscara vertical de Prewitt, é claro que esta máscara apresentará mais arestas em comparação com a de Prewitt apenas porque colocamos mais peso na máscara.