Club Delphi  
    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 28-07-2006
Avatar de njr2mx
njr2mx njr2mx is offline
Registrado
 
Registrado: jul 2006
Ubicación: Puebla, Mexico
Posts: 7
Poder: 0
njr2mx Va por buen camino
Question pixeles !!

hola a todos

Como he estado intentado hacer una grafica y no mas no me sale pues es que me decidi a solicitar ayuda la cual agradecere mucho

pues bien, Miren mi problema es el siguiente:

tengo una imagen en escala de grises y de esta he obtenido el valor de cada pixel y asi he creado un archivo txt el que contiene todos los valores correspondientes a la imagen entonces tengo que graficar todos esos valores en un solo canvas, bueno supongo que eso es obio, pero si mi imagen tiene una resolución de 3504X2336 entonces el numero de valores que tengo para X es 3504 y para Y es 2336, pero los tonos estan en el rango de 0a 255 y he ahi el problema si grafico la primera fila de la imagen resulta una grafica tipo Histograma de frecuencia, entonces para la segunda fila y las que le siguen en la imagen ya no sé como graficar los valores que se supone deben estar encima de la primera



----------------222
--22222------2-11-2---222
-2-1-1-2----2--1-1-2-211-2
2-1-----1-222-1---1-2-1--1-2
1--------1-1-1-----1-1-----1-2
---------------------1

bueno es una idea con el 1 seria una grafica, la 2 seria otra curva y asi con la n filas de la imagen. los guiones solo es para que se mantenga el espacio entre los numeros.
Responder Con Cita
  #2  
Antiguo 29-07-2006
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 15
Mick Va por buen camino
En tu pregunta no se entiende cual es el objetivo de esas graficas, un histograma de una imagen solo tiene dos ejes, siendo una simple grafica de barras y se aplica a todos los pixels de una imagen en conjunto.

Por lo que describes parece que deseas dibujar una barra por cada pixel, eso con la imagen que estas trabajando te obligaria a dibujar un total de 8.185.344 barras, mas de 8 millones de barras !!!!!!!.

No veo cual puede ser el objetivo, ni el sentido, de hacer una grafica de 8 millones de elementos !!!

Saludos
Responder Con Cita
  #3  
Antiguo 31-07-2006
Avatar de njr2mx
njr2mx njr2mx is offline
Registrado
 
Registrado: jul 2006
Ubicación: Puebla, Mexico
Posts: 7
Poder: 0
njr2mx Va por buen camino
alparecer no me he dado ha entender, pero pues lo que quiero decir es que si tomas una imagen y le colocamos en un mapa de bits podremos tener el tono de cada canal RGB y como yo tengo la imagen en escala de grises resulta que los tres canales tienen el mismo nivel de tono en gris, asi que teniendo en cuenta que el mapa de bits lo puedes ver como una gran Matriz de las mismas dimensiones que la imagen, pues yo tengo que hacer un histograma para cada fila de esa matriz, si fuera solo una fila pues resultaria algo de lo que me comenta Mick, pero yo tengo que ver en un solo plano todas las filas graficadas una encima de la anterior y asi sucesivamete esto es por que hay patrones de comportamiento en las imagenes que estoy tratando y debo encontrarlos, solo que aveces estos patrones estan aniveles muy bajos, por eso es esto.

bueno de antemano muchas gracias,
Responder Con Cita
  #4  
Antiguo 01-08-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 19
Delphius Va camino a la fama
Thumbs up Espero que esto pueda guiarte.

Bueno, veamos... no se si entendí muy bien. ¿Tu deseas obtener el histograma correspondiente a cada línea (llamemosle fila) de la imagen? Si es así, creo que la solución puede venir por lo siguiente:

1. Comenzemos a explicar bien el histograma: para cada fila tu obtendrás en el peor caso un histograma de 256xN, si lo vemos como una matriz. En el eje de la x tienes el rango permisible de valores para el canal, es decir 0 a 255, por tanto en el eje y... la frecuencia; N estaría indicando el ancho de la imagen. Pero claro, como tu tienes M (largo) filas y deseas visualizar una arriba de la otra (a mi entender), la verdadera matriz será de 256xNxM, siendo M la cantidad de filas. Eso es para un canal... como aquí lo que interesa es trabajar con imágenes monocromáticas... no importa el canal que leas, total... da lo mismo, por tanto usarás sólo una matriz, no tres. ¿Hasta aquí voy bien no?

2. Ahora si, entendiste el apartado 1 entenderás esto. Vamos por parte, va a ser mejor... separemos las cosas: lógica e interfaz.

LOGICA:
Según lo entiendo... podrías tener una matriz de tamaño 256xM para que en él almacenes las frecuencias para cada posible valor x. (Creo que se me entiende).
En este vector se guardará la "representación" del histograma de cada línea.
¿Cómo?
Declaras una función que devuelva dicha matriz, y que reciba como parámetro la imagen.
Mediante la función ScanLine(), se puede leer una línea de una imagen. Ahora sólo bastará recorrer dicha línea, e ir incrementando en 1, la posición [x,y] de la matriz. Donde y es la linea y-ésima. y x es el valor x-ésimo comprendido entre 0 y 255. Cuando termines la línea... avanzas a la siguiente.

INTERFAZ:
Aquí es donde se pone fea la cosa... ya tienes tu matriz hecha... ahora hay que "mostrarla". Se me ocurre que puedes tener un procedimiento que reciba la matriz y la leas linea por línea. No se... se puede hacer más fácil si dispones un formulario del tamaño de 255xNxM pixeles y valiendote de LineTo() y MoveTo() del Canvas... se puede ir dibujando líneas a lo largo del formulario aprovechando que hay una correspondencia entre la matriz y el tamaño del formulario. Es decir la posición [X,M] del vector correspondería a la posición [X,NxM] de la forma.

Espero haberme expresado bien... y poder ayudado en algo.... No tengo Delphi abierto... si dispongo de un tiempito... podría hacerte un ejemplo.

Tu avisas.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 02-08-2006
Avatar de njr2mx
njr2mx njr2mx is offline
Registrado
 
Registrado: jul 2006
Ubicación: Puebla, Mexico
Posts: 7
Poder: 0
njr2mx Va por buen camino
Bueno Delphius, la verdad es que entendi en partes tu solución, pero en algunas partes como que me perdi, pero repito muchas gracias, mira la matriz que dices de 255xM es donde se supone tendre que meter la frecuencia de cada posible valor de x, pero resulta que si recorro la linea [0,0] hasta [N-1,0]
deberia graficar el valor de cada pixel en esas posición:
[0,0] grafica valor de pixel, [1,0] grafica valor de pixel, [2,0] grafica valor de pixel, [3,0] grafica valor de pixel, . . . ,[N-1,0] grafica valor de pixel.

el valor de y = 0 es temporal hasta que termine de recorrer la fila de la imagen y después se incrementa.
la idea de la matriz que mencionas me parece atractiva solo que, no creo tener la memoria suficiente para hacer tantas matrices

bueno despues detanto he logrado graficar los puntos que necesito pero no me convence, mira lo que he hecho es que abrí la imagen y la coloco en un bitmap, luego leo eso bitmap y para cada posicion guardo en un archivo el tono. (que aunque no lo uso es importante pues despues lo necesitare jeje), pues en ese procedimiento donde guardo los valores al aarchivo tambien lleno una matriz auxiliar que luego tomo para leer y tomar cada valor de pixel y mandarlo a graficar, pero cuando uso el MoveTo y el LineTo solo me pinta puntos y no consigo lineas, ahora ese es mi problema.

Ya intente :

for j := 0 to By-1 do begin
for i := 0 to Ax-1 do
begin
BM2.Canvas.Pen.Color := clBlue;
BM2.Canvas.MoveTo(val*i,Maux[i][j][0]+t );
BM2.Canvas.LineTo((val*i)+1,(Maux[i][j][0]+t)+1);
end;
t := t + 2;
end;

pero no sale mucho la variable "val" lo uso como escala, un valor que doy en interfaz, y t es para que y se posicione mas arriba en cada recorrido de la linea en un multiplo de 2.
Responder Con Cita
  #6  
Antiguo 03-08-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 19
Delphius Va camino a la fama
A ver si me explico mejor...

La idea de la matriz es la siguiente:

M[0,1] = frecuencia del valor cero para la línea 1
M[1,1] = frecuencia del valor 1 para la línea 1
M[255,5] = frecuencia del valor 255 para la línea 5

Tu imagen es de dimensión NxM, por tanto... la matriz llegará a ser:
M[0 a 255,1..M-1] = frecuencia de valor 0..255 para la línea 1..M-1

Creo que así se entiende mejor.

Cita:
Empezado por njr2mx
la idea de la matriz que mencionas me parece atractiva solo que, no creo tener la memoria suficiente para hacer tantas matrices
¿Tantas matrices? Pero si sólo emplearas una.... ya que usarás un solo canal.
¿Memoria? Ummm.... puede ser. Si es como dices, que tienes una imgen del largo de 2336, te va a ocupar un buen pedazo.
Una solución sería que sólo mantengas un vector de 256x1, es decir de "memoria de una línea" y a medida que lo llenas... lo grafiques.

Como dije antes... lee la línea con ScanLine(), y recorrela, guarda los valores ya sea en el vector o la matriz.

Con respecto al código... no lo he probado.... no puedo, mi PC se fundió. No tengo herramienta de trabajo por unos días. Lo siento. Pero si encuentro la manera de ver como lo puedes solucionar te aviso.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 03-08-2006
Avatar de njr2mx
njr2mx njr2mx is offline
Registrado
 
Registrado: jul 2006
Ubicación: Puebla, Mexico
Posts: 7
Poder: 0
njr2mx Va por buen camino
hola :)

Bueno , pues por el momento gracias deja checar lo que me dices y co respecto al codigo, creo que no es muy necesario que lo ejecutes, basta con una prueba a mano.

gracias
Responder Con Cita
  #8  
Antiguo 07-08-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 19
Delphius Va camino a la fama
Creo que esto puede servirte

Pues, en otro hilo se ha dado una refencia de cómo realizar gráficas. Aquí te mando el enlace al hilo. La respuesta que ofrece Roman está interesante... fíjate si puede ser de ayuda.

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
Longitud de un String en pixeles andre Varios 5 09-06-2006 02:36:39
Todos a vender pixeles!! lpmlpm Noticias 0 17-12-2005 22:41:54
Ancho en pixeles de un string luchopriet Varios 1 23-09-2004 19:38:41
Pixeles y twips en Visual torito Varios 4 05-06-2004 02:28:17
Longitud de Cadena (en píxeles!!!) Jose_Pérez API de Windows 2 01-06-2003 13:28:00


La franja horaria es GMT +2. Ahora son las 11:13:37.


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