2012-02-16 26 views
8

He estado tratando de averiguar qué tipo de algoritmo matemático usan programas como Photoshop cuando desaturan cada píxel de una imagen. Por desaturate, me refiero a convertir una imagen coloreada en una imagen en escala de grises y mantener el espacio de color. Todavía estoy hablando de una imagen RGB, pero una que ha sido desaturada en color y ahora es en blanco y negro.¿Qué algoritmo usa Photoshop para desaturar una imagen?

¿Alguien sabe qué tipo de algoritmo se utiliza?

+0

Debo especificar que estoy buscando un algoritmo en un nivel por píxel. Por ejemplo, RGB (12, 104, 22) en lugar de la imagen completa. –

+0

Espero que esto sea útil: http://en.wikipedia.org/wiki/Colorfulness: hay muy poco de espacio de color RGB, pero hay muchos detalles sobre otros espacios de color ... – sarnold

+1

Otra opción es investigar las fuentes de GIMP ; también hay una herramienta Desaturate, que podría ser lo suficientemente cerca para usted. – sarnold

Respuesta

11

Desaturando es bastante simple. Lo habitual es algo así como G*.59+R*.3+B*.11

Photoshop también tiene una herramienta de conversión B & que (básicamente) le permite seleccionar el factor para cada uno. Por ejemplo, puede obtener el efecto de un filtro rojo aumentando el porcentaje de rojo y disminuyendo el verde y azul para que coincida.

+1

Sí, esa es la fórmula habitual para obtener gris de un color. Luego puede tomar eso y mezclarlo proporcionalmente con el color original para obtener la cantidad de desaturación que desee. –

+0

Esto no era el algoritmo de Photoshops exactamente, pero acabo de utilizar el programa Photoshop como referencia. Esta fórmula terminó produciendo algunos buenos resultados. ¡Gracias! –

3

Como se señaló en los comentarios, la respuesta aceptada no es la fórmula utilizada por Photoshop. La fórmula real de desaturar de Photoshop es el promedio de los componentes RGB mínimo y RGB máximo.

float bw = (fminf(r, fminf(g, b)) + fmaxf(r, fmaxf(g, b))) * 0.5f; 

Creo que las operaciones de HSL en Photoshop se ejecutan en el espacio de min-max-hue, por lo que se elige esta fórmula para la velocidad.

+0

Esto es MUCHO más cercano a Photoshop que la respuesta aceptada. Estoy usando Unreal Engine y su función desaturate integrada produce los mismos resultados que la respuesta aceptada. Sin embargo, la función predeterminada pierde el valor de las áreas azules de una imagen, pero Photoshop y esta fórmula los mantienen muy bien. ¡Gracias! – MrFlamey

Cuestiones relacionadas