Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/12/2007, 19:01
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Simplificar los colores de una imagen

Hola foro, vamos a ver si me explico bien. Estoy intentando hacer mediante PHP y GD una simplificación de colores de una imagen. Básicamente quiero conseguir que de una imagen como ésta:


Se consiga una cosa como ésta


(esto es un apaño que he hecho con el photoshop, su varita mágica, cuentagotas y bote de pintura nada más...)

Lo que quiero no es conseguir ésta segunda imagen, lo que quiero es quedarme con esos colores que la componen. Si os dais cuenta, esos colores son básicamente un esbozo de lo que aparece en la imagen. Los colores que tendría en la segunda imagen del post son unos 3 azules, 5 ó 6 verdes, 2 ó 3 ocres, un blanco, un gris, y quizá un negro.

Si guardamos la imagen como un GIF con 4 colores veremos ésto:

Que es cercano a la composición que quiero conseguir.

Estoy cerca de lograrlo, pero aún así me faltan ideas...

Los pasos que sigo para conseguir estos colores son los siguientes:
  1. Obtengo la imagen (imagecreatefromjpeg)
  2. Entro en un bucle para leer el color de cada píxel (imagecolorat), y ese color leído lo almaceno en $listaColores (array asociativo color=>cantidad de veces que aparece en la imagen)
  3. Transformo ese color a valor HSV (ó HSL) para poder compararlo más fácilmente a los colores previamente obtenidos en el bucle y encontrar similitudes.
  4. Si ese color es parecido a algún otro ya almacenado (según unos umbrales de tono, saturación y luminosidad personalmente escogidos), éste color no se almacena en $listaColores, sólo aumenta el número de veces que aparece.
  5. Muestro los colores almacenados en $listaColores que son los buscados.


Al parecer ésto es lo que debería servir para hallarlos sin problemas. Bueno esto es lo que obtengo:



Si alguien quiere darme alguna idea, o se le ha ocurrido trabajar con gamas de colores y quiere aportar algo, que no dude en postear. En absoluto he conseguido que los colores obtenidos sean la media de los encontrados en la imagen, simplemente cada color es el primer color leído, y luego los demás se han ido sumando a él por parecido. Si después algún color que se obtiene difiere lo suficiente de sus antecesores, se crea un nuevo registro en el array.

Me gustaría hacer lo de la media, si alguien es capaz de hacer una media entre dos colores HSL será agradecido



Un saludo y gracias por leer
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.