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
Z =
1 16
1 2 1
2 4 2
1
1 2
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 Gx e Gy
A
a imagem inicial então,
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
| -1 0 +1 |
0 0 |
| -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/