Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
no creo que haga falta recursividad, a no ser que quieras tu implementar el floodfill. Puedes ir rastreando todos los pixels, y al encontrar uno blanco, llenar toda el area de otro color y aumentar el contador. Te dejo un ejemplo, usando el floodfill de delphi y otro casero, recursivo. (este ejemplo falla si se solapan dos zonas)

Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Rellena_colonia(i,j : integer; col,rel : TColor; im : TImage);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
        i,j : integer;
        colonias : integer;
        x,y,r: integer;
begin
        Image1.Canvas.Brush.Color := clBlack;
        Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

        Image1.Canvas.Brush.Color := clWhite;
        colonias := random(10);

        for i := 0 to colonias do
        begin
        x := random(Image1.Width);
        y := random(Image1.Height);
        Image1.Canvas.Ellipse(Rect(x,y,x+random(50),y+random(50)));
        end;

        ShowMessage(inttostr(colonias));

        colonias := 0;
        for i := 0 to Image1.Width do
        for j := 0 to Image1.Height do
        if Image1.Canvas.Pixels[i,j] = clWhite then
        begin
             rellena_colonia(i,j,clWhite,clRed,Image1);
             inc(colonias);
        end;

        Label1.Caption := inttostr(colonias);
end;

{procedure TForm1.Rellena_colonia(i,j : integer; col,rel : TColor; im : TImage);
begin
        if (i = 0) or (j = 0) or (i > Im.Width) or (i > Im.Height) then exit;
        if Im.Canvas.Pixels[i,j] <> col then exit;
        Im.Canvas.Pixels[i,j] := rel;

        rellena_colonia(i-1,j-1,col,rel,im);
        rellena_colonia(i  ,j-1,col,rel,im);
        rellena_colonia(i+1,j-1,col,rel,im);
        rellena_colonia(i-1,j  ,col,rel,im);
        rellena_colonia(i  ,j  ,col,rel,im);
        rellena_colonia(i+1,j  ,col,rel,im);
        rellena_colonia(i-1,j+1,col,rel,im);
        rellena_colonia(i  ,j+1,col,rel,im);
        rellena_colonia(i+1,j+1,col,rel,im);
end;}

procedure TForm1.Rellena_colonia(i,j : integer; col,rel : TColor; im : TImage);
begin
        Im.Canvas.Brush.Color := rel;
        Im.Canvas.FloodFill(i,j,col,fsSurface);
end;
end.
Responder Con Cita
  #2  
Antiguo 25-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Coso el tema es que no es tan simple como eso.
Se trata de algoritmos de predicción que buscan zonas y formas en una imagen.
El objetivo de estos algoritmos es predecir donde están los objetos deseados examinando la dirección del cambio del color.

Cesar Junior, ¿los puntos blancos tienen el mismo tamaño? ¿Son siempre blancos o tienen alguna tonalidad semejante al blanco?

Me gustaría saber si haz hecho algún avance. ¿Tienes algo de código ya hecho?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 25-08-2008
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Coso el tema es que no es tan simple como eso.
Se trata de algoritmos de predicción que buscan zonas y formas en una imagen.
El objetivo de estos algoritmos es predecir donde están los objetos deseados examinando la dirección del cambio del color.

Cesar Junior, ¿los puntos blancos tienen el mismo tamaño? ¿Son siempre blancos o tienen alguna tonalidad semejante al blanco?

Me gustaría saber si haz hecho algún avance. ¿Tienes algo de código ya hecho?

Saludos,

Hola! consiste que los puntos blancos son varialbles nunk del mismo tamaño, pero si que son siempre blancos, en relacion a esto todavia no é logrado algo
exito, pero al final la idea es tener el tumero de colonias blancas,
Responder Con Cita
  #4  
Antiguo 25-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Cesar Junior Ver Mensaje
Hola! consiste que los puntos blancos son varialbles nunk del mismo tamaño, pero si que son siempre blancos, en relacion a esto todavia no é logrado algo
exito, pero al final la idea es tener el tumero de colonias blancas,
Cualquier avance que tengas es bueno que nos digas, no necesariamente tiene que estar funcionando. Esto te lo digo para saber de que modo estás llevando a cabo el algoritmo y poder asesorarte sin tener que obligarte a cambiar demasiado tu código.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 25-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Disculpen la intromisión pues no conozco de estos temas, pero me gustaría saber cuál es el problema con el algoritmo de coso. Quizá no sea óptimo, pero hasta donde veo, cuenta las colonias blancas correctamente.

// Saludos
Responder Con Cita
  #6  
Antiguo 25-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
para detectar la forma si que se necesitaria recursividad : se podria medir la distancia entre los puntos mas lejanos entre si, creando vectores entre ellos, eliminando los puntos que son combinaciones lineales de estos vectores y los que pertenecen a areas delimitadas 3 a 3, y mirando el numero y angulo de los vectores resultantes...claro esta q seria bastante mas complicado, pero si, se puede hacer
Responder Con Cita
  #7  
Antiguo 25-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ejem,

Cita:
Empezado por roman Ver Mensaje
Hola,

Disculpen la intromisión pues no conozco de estos temas, pero me gustaría saber cuál es el problema con el algoritmo de coso. Quizá no sea óptimo, pero hasta donde veo, cuenta las colonias blancas correctamente.

// Saludos
¿Y bien?
Responder Con Cita
  #8  
Antiguo 25-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Código:
¿Y bien?
???

estooo....yo claro esta que estoy de acuerdo conmigo mismo (a veces...) igualmente supongo q se puede mejorar, a ver si me pongo un rato y saco lo que he comentado en el otro post, que parece interesante... saludos
Responder Con Cita
  #9  
Antiguo 25-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Estuve pensando en el algoritmo que describes y me he quedado pensando ¿Cúando se da por válido un punto blanco y se explora hacia otro lado?

Tengo entendido que los algoritmos de estos tipos lo que hacen es calcular la dirección del cambio entre los colores vecinos (los 8) y reposicionarse en en la dirección donde detectan la mayor "sensibilidad". Por lo general la condición de parada y válidación del objeto se establece cuando entre los pixeles vecinos no hay cierta "sensibilidad" y/o superan un valor umbral de decisión.

El asunto aqui es que no necesariamente los puntos blancos son vecinos ni ocupan un pixel. Es posible que haya muchos pixel de distancia entre un punto blanco y otro.

Tal como describes el algoritmo, da la idea de que siempre se posiciona en el primer pixel vecino (entre los 5) blanco que encuentre ¿Y si no encuentra? ¿Que se hace? ¿Allí es cuando se da por entendido que se encontró un punto?

Me gustaría que nos dieras más referencia del tema que estás tratando.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cargar las imagens, iconos, etc. desde un *.res Negriz C++ Builder 2 15-05-2008 19:41:58
XML atraves de internet Ayuda Sr_leo Internet 5 14-04-2008 02:07:54
Conversor de imagens roman Windows 20 29-03-2007 23:01:30
Debug de VCL através de paquetes roman Varios 2 08-09-2005 23:38:04
Imagens vía xml marto Internet 8 12-08-2004 01:27:56


La franja horaria es GMT +2. Ahora son las 15:20:48.


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