a) Transforme a imagem em uma representação de arestas
b) Processe todos os pixels da imagem de arestas de acordo com o algoritmo abaixo:
para cada pixel(x,y) que pertence a uma aresta
//os raios possíveis devem ser conhecidos, é necessário fazer
// ajustes manuais nessa parte para detecção de círculos
// com raios maiores que rmax pixels ou menores que rmin pixels
para cada raio r = rmin à r = rmax
para cada theta t = 0 à 360 // valores padrão
a = x – r * cos(t * PI / 180); //coordenada a
do centro
b = y – r * sin(t * PI / 180); //coordenada b
do centro
A[a,b,r] +=1; //espaço de Hugh
end
end
end
c) Ao fim do algoritmo a matriz A[a,b,r] contém todos os centros (a,b) para todos os círculos de raios (r), no intervalo de raios considerados, que interseccionam todos os pixels que pertencem às arestas da imagem. Assim, se uma imagem contém apenas UM círculo, com centro (Ac, Bc) e raio Rc (com rmin<=Rc<=rmax); espera-se que o valor de A[Ac,Bc,Rc] seja maior do que outros valores da matriz A, indicando assim a presença do círculo na posição e raios especificados na matriz.
d) Caso a imagem contenha mais de um círculo, é necessário encontrar mais de um máximo na matriz A, por exemplo, podemos, ao invés de procurar apenas pelo maior valor de A, buscar pelos n maiores valores, que representam as n circunferências detectadas pelo algoritmo.