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 04-05-2004
the darkness the darkness is offline
Miembro
 
Registrado: ene 2004
Posts: 30
Poder: 0
the darkness Va por buen camino
reconocimiento de imagenes

saludos a todos.
la presente la mando para solicitar su ayuda, ya que intento hacer un proyecto donde a partir de una imagen, foto, bitmap, etc. pueda encontrar en el ciertas caracteristicas, es decir esta imagen solo cuenta con un color aparente de fondo y puentos negros de distintos tamaños, pero que no difieren mucho, la cuestion es poder a partir de delphi contar dichos puntos negros y sacar un total.
esto es posible??, yo creo que si, pero no tengo idea de como, se que es tratamiento de imagenes, por esto acudo a ustedes.
de antemano muchas gracias.

Lic. Eduardo Maldonado
Responder Con Cita
  #2  
Antiguo 04-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Si es posible, he visto un sistema de una tesis universitaria, que reconocía personas. Lo habían hecho creando imágenes tridimensionales a partir de una imagen en 2D.
No son sistemas sencillos, te recomiendo buscar buena bibliografía para poder encarar un proyecto de este tipo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 04-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Creo que es algo relativamente sencillo para quien tenga experiencia con imágenes. Al fin de cuentas, un punto negro (del tamaño que sea) es una secuencia de pixels de color negro.

Haciendo un barrido del bitmap, al encontrar el primer pixel de color negro se asume que has entrado a un nuevo punto, vez se halla el primer pixel de otro color, pues has salido del punto. Habrá que tener algo de ingenio. Si no has trabajado manipulando imágenes, es buena idea que primero te empapes bien de los formatos y tecnicas aplicables (aunque he dicho que, desde mi punto de vista, basta con un barrido), y que tengas ingenio para no duplicar los puntos que tengan una altura de mas de un pixel.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 04-05-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
Cita:
Empezado por the darkness
saludos a todos.
la presente la mando para solicitar su ayuda, ya que intento hacer un proyecto donde a partir de una imagen, foto, bitmap, etc. pueda encontrar en el ciertas caracteristicas, es decir esta imagen solo cuenta con un color aparente de fondo y puentos negros de distintos tamaños, pero que no difieren mucho, la cuestion es poder a partir de delphi contar dichos puntos negros y sacar un total.
esto es posible??, yo creo que si, pero no tengo idea de como, se que es tratamiento de imagenes, por esto acudo a ustedes.
de antemano muchas gracias.

Lic. Eduardo Maldonado
Puntos o manchas?

Tu pregunta tiene que estar mejor detallada, no dices casi nada:

- Profundidad de color de la imagen? Es más fácil si la imagen original sólo tiene 1 bit de profundidad y los puntos no están intersectados. ¿El tamaño de los puntos es uniforme, es un pixel?
- Resolución?
- Aplicación práctica?

Es posible, vi ese sistema y es un módulo de otro sistema mayor que clasifica muestras de DNA y puede determinar incluso si existen enfermedades genéticas. Aplica lo último en redes neuronales, pero primero ubica cada mancha, la mide, la clasifica, la cuantifica y recién aplica la clasificación a TODA la muestra de manchas.
Responder Con Cita
  #5  
Antiguo 06-05-2004
the darkness the darkness is offline
Miembro
 
Registrado: ene 2004
Posts: 30
Poder: 0
the darkness Va por buen camino
reconocimiento de imagenes

pues si, si fue muy parca mi explicación, lo pondre de esta manera, esta imagen no es mas que una fotografia tomada por un microscopio electrónico, que presenta unicamente la imagen en un color crema muy claro y una especie de red un poco mas luminosa, dichas rayas que forman tal malla son de un color mucho mas claro que lo demás y sirve para identificar las areas a comparar, ahora bien, esta imagen cuenta con puntos negros muy pequeños, a los cuales no se nota una diferencia entre una y otra, no creo que cuente con profundidad no colores encimados ni nda por el estilo.
espero que esto este mejor explicado.
de antemano muchas gracias.
Eduardo Maldonado
Responder Con Cita
  #6  
Antiguo 06-05-2004
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
Cita:
Empezado por jachguate
Al fin de cuentas, un punto negro (del tamaño que sea) es una secuencia de pixels de color negro.
¿Podrías explicar a qué te refieres con esto?

// Saludos
Responder Con Cita
  #7  
Antiguo 06-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por roman
¿Podrías explicar a qué te refieres con esto?

// Saludos
vamos... supongamos que yo estoy viendo 1 a 1 los pixels que forman la imagen (que es una matriz de n x m pixels). En una imagen un punto negro será una secuencia de pixels negros... en otras palabras será 1 o mas pixels de color negro dispuestos continuamente sobre la imagen.

Si yo barro la imágen de izquierda a derecha... y hay un punto de los pixels de la columna 7 a la columna 14 de la fila 1, se da por sentado que las columnas 8, 9, 10, 11, 12 y 13 también serán pixels negros.

Mencionaba que para "puntos" con mas de un pixel de alto, habrá que idear un mecanismo para reconocer, en la fila 2 (continuando con el ejemplo) que los pixels de la columna 6 a 14 (nota el cambio de la columna inicial) pertenecen siempre al mismo punto ya contado. No es algo complicado.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 06-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Otro asunto es que los pixels que componen el punto sean realmente "negros"... si no,
  • habrá que idear un mecanismo de "tolerancia" para incluir grises u otros colores obscuros
  • o bien un algoritmo para hacer primero una copia de la imagen en blanco y negro y trabajar sobre ella

hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 06-05-2004
the darkness the darkness is offline
Miembro
 
Registrado: ene 2004
Posts: 30
Poder: 0
the darkness Va por buen camino
imagenes

o.k. muchas gracias por sus respuestas, y jachguate, me queda claro lo que me pides que haga, pero la verdad, estoy en cero referente al tratamiento de imagenesa, por tanto me estoy poniendo a investigar bastante, pero me suena logico lo que mencionas, solo te pido un favro, como puedo hacer dicho barrido y sobre que lo comparo. por que se prodria decir que verificar pixel por pixel y se comparara con colores especificos.
espero y me ayudes.
gracias
Responder Con Cita
  #10  
Antiguo 06-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
si la imagen la cargas en un Bitmap, podes acceder a los pixels asi valiendote de su propiedad canvas.pixels, que es un array de 0 a width - 1, y de 0 a height - 1 de TColor.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 07-05-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
La verdad que es un sistema complejo (toda una tesis) y es muy difícil que puedas encontrar un módulo listo para contar manchas de una imagen.

Por la descripción del tipo de imagen diría que lo ideal es tratarla como escala de grises (8bits de profundidad de color, lo que da 256 niveles de gris que van de 0 a 255).

Tengo una idea simple para solucionar el problema:
cada punto vale de 0 a 255:
0=negro ,255=blanco

Eliges un punto al azar de la imagen que no esté revisado, si es más bajo que cierto umbral vas marcando esa zona en espiral (como revisado) hasta que los pixeles tengan valor más alto que otro umbral. Cuentas como 1 mancha y mides su tamaño de acuerdo al área que pintaste antes de decidir que los pixeles restantes no formaban parte de la mancha. Continuas este proceso hasta que no existan áreas de la imagen no marcadas como "revisadas".

Esto servirá si y sólo si: las manchas son circulares, la mancha más pequeña tiene un buen tamaño en pixeles, tienen buen contraste y el contraste entre manchas y fondo es constante y el fondo es también de matiz constante.

Para dar mayor potencia a un sistema de tratamiento de imágenes te recomiendo investigar algunas herramientas matemáticas como el análisis wavelet, ideal para imágenes, que permiten analizar la imagen a varias escalas y permiten realizar detección de bordes también a varias escalas, lo que también es util para eliminar frecuencias muy bajas de la imagen (gradientes en el fondo) para mejorar los resultados.

=P

Creo que escribi demasiado...

P.D.

Esto es para los que alguna vez intentaron hacer algo con "Pixels" y vieron que era muuuuuuuy lento:

Código:
/*
Esto es muchísimo más rápido que usar Pixels[x,y] (Realmente mucho más rápido), pero también más complicado y PELIGROSO, no vayan a escribir fuera del area de memoria de su bitmap!!.

OJO que el bitmap va de 0 a Height-1 y de 0 a width-1, no se salgan de límites !!
*/
//Tipos necesarios
  PuntoRGB=array[0..2] of byte;
  TlineaRGB=array[0..MAX_LINEA] of PuntoRGB;
  PlineaRGB=^TlineaRGB;

//OJO que:
CImagen = class(TBitmap)

//(Aplica un "blur" en dos pasadas a un bitmap de 24bits de profundidad de color)

//Esto está implementado a manera de incluir un método adicional:

procedure CImagen.Suavizar();
var i,j,k:integer;
    rgb1,rgb2,rgb3:PlineaRGB;
begin
  for j:=2 to Height-1 do
  begin
    rgb1:=ScanLine[j-2];
    rgb2:=ScanLine[j-1];
    rgb3:=ScanLine[j];
    for i:=0 to width-1 do
      for k:=0 to 2 do //colores
        rgb2[i,k]:=(rgb1[i,k]+rgb2[i,k] shl 1+rgb3[i,k]+3) shr 2;
  end;
  for j:=0 to Height-1 do
  begin
    rgb1:=ScanLine[j];
    for i:=2 to width-1 do
      for k:=0 to 2 do //colores
        rgb1[i-1,k]:=(rgb1[i-2,k]+rgb1[i-1,k] shl 1+rgb1[i,k]+3) shr 2;//interpolar
  end;
end;
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


La franja horaria es GMT +2. Ahora son las 10:46:13.


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