Tema: pixeles !!
Ver Mensaje Individual
  #4  
Antiguo 01-08-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
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