22-10-2008
|
Registrado
|
|
Registrado: oct 2008
Posts: 2
Poder: 0
|
|
Transformada de Hough
Hola a todos, veo que este foros puede ayudarme con un trabajo en la uni, conste que e visto algunos asuntos que trata de procesamiento de imagenes, estoy aprendiendo a trabajar con delphi, y tengo que desarrollar la transformada de Hough em pascal para aplicar en una imagen que esta en un Timage, la imagen es de tipo Bitmap. La transformada de Hough consiste en detectar objetos circulares en una imagen.
Transformada de Hough
Esta es una técnica que permite descubrir formas en una imagen. Se basa en transformar puntos de la imagen en un espacio de parámetros. La idea es encontrar curvas parametrizabales como rectas, círculos y polinomiales. En teoría se pueden encontrar formas más complejas pero el costo computacional crece rápidamente. Generalmente se realiza detección de bordes a la imagen, y luego se aplica la transformada a esta. De esta forma son menos los puntos que hay que recorrer y por lo tanto mas rápido es el algoritmo. El más usado para realizar la detección de bordes es el Filtro de Canny.
Ejemplo: Deteccion de retas
Detección de círculos:
La ecuación del circulo tiene tres parámetros ( dos para el centro del círculo, uno para el radio). Por lo tanto el espacio de parámetros esta forma es de dimensión tres. Esto dificulta el algoritmo, recorrer un espacio de dimensión dos, y encontrar máximos en espacio de dimensión tres.
E encontrado algo en la internet pero como esti comenzando a programar en delphi necesitava de la ayuda de alguien mas experiente, esto lo q tengo a mano
Hi,
Its actually very simple,
You have two known variables x,y and two unknown , r and theta.
You do:
// For all rows in image.
for y:=0 to ImageHeight-1 do
begin
// For all pixel in one row.
for x:=0 to ImageWidth-1 do
begin
// Is there a point there or not. If not, just skip the pixel.
if IsPoint[x,y] then
begin
// Now you need to iterate for one of the unknown variables,
// theta, to be able to determine the other unknown, r.
for theta:=0 to 360-1 do
begin
r:=x*cos(theta*PI/360) + y*sin(theta*PI/360);
// Plot the finding (theta,r) into an array.
// Ignore negative values... trust me... its ok!
if r>=0 then Inc(HoughArray[theta,r]);
end;
end;
end;
end;
The size of the array can be calculated as:
HoughArray:Array [MaxTheta,MaxR] of integer;
where MaxTheta due to the loop naturally is 360 (we determine that
ourselves)
and MaxR=Sqrt(ImageHeight*ImageHeight + ImageWidth*ImageWidth)
/--------------------------
MaxR= / 2 2
/ ImageHeight + ImageWidth
V
Si alguien pude ayudarme estoy muy agradecido!!
|