Você está na página 1de 8

CENTRO UNIVERSITÁRIO FEEVALE

INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS


CURSO DE SISTEMAS DE INFORMAÇÃO – FISEM

Método de detecção de bordas Sobel

Rafael Kunz
Tiago Joner
Marcelo Laux
Jean Meiners

Computação Gráfica

Professora Marta Rosecler Bez El Boukhair

Novo Hamburgo, novembro de 2009.


Introdução

Os métodos de detecção de bordas são ferramentas de grande utilidade dentro da


área de tratamento de imagens. Neste trabalho iremos abordar o método Sobel,
explicando seu funcionamento e suas características.
Método de detecção de bordas Sobel

Conceito de detecção de bordas

Detecção de bordas são chamadas as técnicas de processamento de imagens


computacional. Neste trabalho iremos abordar o método Sobel.
Estas técnicas determinam pontos em uma imagem digital, onde há mudança
repentina de luminosidade. Estas mudanças geralmente representam traços importantes
da imagem como descontinuação da profundidade ou superfície, mudança das
propriedades do material ou variação luminosa. Isto, por exemplo, pode significar a
transição entre o objeto e o ambiente onde ele se encontra na imagem.
História

Os primeiros trabalhos neste campo foram apresentados da década de 80. Este


processo de detecção de imagens era feito através da convolução da imagem original
com o Laplaciano da função Gaussina. Em 1984 surgiu o trabalho de Koenderink, que
relacionava a estrutura das imagens à equação do calor, utilizando a evolução temporal
para a suavização das imagens. A aplicação pura da equação demarcava as bordas, mas
também deteriorava a imagem.
Sethian propôs a equação do fluxo da curvatura média. Primeiramente os
resultados eram satisfatórios, porém ainda não eram capazes de preservar a localização
das bordas da imagem.
Perona & Malik introduziram o modelo de suavização seletiva da imagem,
combinaram a difusão direcionada com o processo de detecção de bordas. Este modelo
passou a ser referenciado como modelo de difusão linear e fornecia um bom algoritmo
para detecção de bordas, remoção de ruídos e segmentação de imagens.
Filtro Gaussiano
Forma discreta 3x3 aproximada da função Gaussiana

1 2 1 
1  
Z= 2 4 2
16  
1 2 1
O operador de suavizamento Gaussiano é basicamente uma operação de convolução,
utilizada para “borrar” uma imagem digital com o objetivo de remover detalhes e
ruídos.
// Código fonte, desenvolvido o filtro gaussiano em Delphi.
for i := 1 to (Resultado_Gauss.Width - 2) do
begin
for j := 1 to (Resultado_Gauss.Height - 2) do
begin
// aplicando a matriz de Gauss.
VarZ :=
(i-1,j-1) * MatrizZ[0,0] +
(i ,j-1) * MatrizZ[1,0] +
(i+1,j-1) * MatrizZ[2,0] +
(i-1, j) * MatrizZ[0,1] +
(i , j) * MatrizZ[1,1] +
(i+1, j) * MatrizZ[2,1] +
(i-1,j+1) * MatrizZ[0,2] +
(i ,j+1) * MatrizZ[1,2] +
(i+1,j+1) * MatrizZ[2,2] ;
Resultado_Gauss.Canvas.Pixels[i, j] := Trunc(VarZ / 16);
end;
End;

Método Sobel
O filtro Sobel consiste num operador que calcula diferenças finitas, dando uma
aproximação do gradiente da intensidade dos pixels da imagem. Ele calcula o gradiente
da intensidade da imagem em cada ponto, dando a direção da maior variação de claro
para escuro e a quantidade de variação nesta direção. Assim obtém-se uma noção de
como varia a luminosidade em cada ponto, de forma mais suave ou expressiva.
Com isto consegue-se estimar a presença de uma transição de claro para escuro,
ou vice e versa, e qual é a orientação desta transição. Como as variações bruscas de
tonalidade, luz e cor correspondem a fronteiram bem definidas entre objetos, o método
consegue fazer a detecção e delimitação dos contornos.
Matematicamente o operador Sobel utiliza duas matrizes 3x3 que são
convoluídas com a imagem original para calcular a aproximação das derivadas, uma
para as variações horizontais e outra para as verticais. Sendo A a imagem inicial então,
Gx e Gy serão duas imagens que em cada ponto contêm uma aproximação às derivadas
horizontal e vertical de A.

| -1 0 +1 | | +1 +2 +1 |
Gx = | -2 0 +2 | e Gy = | 0 0 0 |
| -1 0 +1 | | -1 -2 -1 |

Portanto a magnitude, G, e a direção, Θ, do gradiente são dados por:


G = √(Gx² + Gy²)
Θ = arctan (Gy/Gx)

// Código fonte aplicando Sobel


for i := 1 to (Resultado_Gauss.Width - 2) do
begin
for j := 1 to (Resultado_Gauss.Height - 2) do
begin
// algoritmo de Sobel.
VarX :=
(i-1,j-1) * MatrizX[0,0] +
(i ,j-1) * MatrizX[1,0] +
(i+1,j-1) * MatrizX[2,0] +
(i-1,j+1) * MatrizX[0,2] +
(i ,j+1) * MatrizX[1,2] +
(i+1,j+1) * MatrizX[2,2];
VarY :=
(i-1,j-1) * MatrizY[0,0] +
(i-1, j) * MatrizY[0,1] +
(i-1,j+1) * MatrizY[0,2] +
(i+1,j-1) * MatrizY[2,0] +
(i+1, j) * MatrizY[2,1] +
(i+1,j+1) * MatrizY[2,2];
// Inicia a criaçao da nova imagem aplicando Sobel.
// Eleva ao quadrado e extrai a raiz quadrada
VarG := VarX * VarX + VarY * VarY ;
Cinza := round(sqrt(VarG)); //sqrt funcao da raiz quadrada
Conclusão

O método de detecção de borda Sobel é bastante sofisticado. Trata-se de um


algoritmo complexo, mas bastante adaptativo, pois esta apto a ser utilizado para
detecção de bordas de qualquer imagem.
Devido a grande quantidade de ruídos que as imagens de teste tiveram buscamos
implementar o filtro Gaussiano e notamos que a utilização deste método de suavização
melhorou significativamente a aplicação do método Sobel deixando a borda com mais
qualidade.
Tivemos algumas dificuldades em encontrar material teórico sobre o método
Sobel na internet e os poucos materiais que encontramos não aprofundavam o suficiente
para nosso melhor entendimento. Porém, diferente da parte teórica a parte prática teve
grande importância para nos facilitar o entendimento e agilizar o nosso trabalho,
utilizamos trechos de código fonte disponibilizados na internet para a implementação do
método de Sobel.
Bibliografias

• http://pt.wikipedia.org/wiki/Filtro_Sobel
• http://pt.wiktionary.org/wiki/borda
• http://www.imagesurvey.com.br/2009/10/deteccao-de-bordas/