Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2008
Luciano Pache Luciano Pache is offline
Registrado
 
Registrado: oct 2008
Posts: 2
Poder: 0
Luciano Pache Va por buen camino
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!!
Responder Con Cita
  #2  
Antiguo 22-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Luciano Pache,
Bienvenido a clubdelphi.

Por favor no repitas hilos, he encontrado un duplicado de éste aqui. Esto constituye a una violación de la guia de estilo, y por ello te recomiendo que te tomes unos minutos para leerla.

Con respecto a tu duda, ¿podrías indicarnos al menos la fuente a la que consultaste?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 22-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, segun lo que he entendido (wikipedia) tendrias que :

-recorrer cada punto de la imagen
-si se encuentra un punto, entonces recorrer cada phi (0 a maxr),ro (0 a 360) y si se encuentra otro punto guardar en el array el phi,ro, correspondiente, donde phi seria un radio y ro un angulo. Esto seria ir recorriendo primero un circulo de radio 1 alrededor del pixel, luego de radio 2, etc.. asi hasta maxr que seria el tamaño máximo de la imagen.
-una vez se tienen recorridos todos los pixeles, mirar que valores de phi,r son los que se han guardado y analizarlos. Si por ejemplo las phi guardadas cambian pero las ros son mas o menos constantes, entonces es una recta (radio variable, pero siempre el mismo angulo). Si por ejemplo, las phis guardadas mas o menos no cambian pero las ros si, entonces es un arco de circulo (radio constante, angulo de 15 a 60, por ejemplo). Si las phis guardadas mas o menos no cambian y las ros van de 0 a 360, entonces tienes un circulo completo. Supongo que para encontrar elipses o rectangulos ya sera mas complicado . Bueno, a ver si te sirve.
De todas maneras yo buscaria mas información antes de ponerme a programarlo. Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Transformada de Fourier juanchi Varios 5 20-02-2007 23:07:18
Transformada Inversa... DarkDrakon Varios 6 08-11-2006 02:21:16


La franja horaria es GMT +2. Ahora son las 09:49:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi