¿Alguien puede explicar el algoritmo detrás de la capa de ajuste "Blanco y negro" en Photoshop?
Tengo que reproducirlo usando C ++ para una aplicación que enfatiza píxeles no rojos / magenta (ish) de una imagen (con una tolerancia configurable similar al porcentaje), y este recurso mostró el comportamiento que estoy esperando.
Todavía no podía reproducirlo, pero encontré una pista:
Cada píxel está definido por hasta dos controles, uno aditivo (RGB) y uno sustractivo (CMY).
Respuestas:
Repliqué el algoritmo perfectamente en MATLAB (Basado en la respuesta de @ Ivan Kuckir ):
Tenga en cuenta que la conversión de
vPhotoshopValues
avCoeffValues
debe hacerse comovCoeffValues = (vPhotoshopValues - 50) ./ 50
.Como los valores de Photoshop están en [-200, 300] y deben asignarse linealmente en [-5, 5] con
50 -> 0
.Aquí hay una comparación con Photoshop:
El error máximo es inferior a 1 en el rango [0, 255].
El código completo está disponible en mi repositorio de GitHub de procesamiento de señales StackExchange Q688 .
fuente
Cada imagen (en color) está compuesta de componentes RGB. cuando agrega (o reduce) un valor constante a todos los píxeles solo en los componentes ROJOS, verá el efecto equivalente a mover la pestaña ROJA hacia la derecha, y de la misma manera, reducir el componente ROJO en una constante tendrá el efecto inverso.
Del mismo modo, puede aumentar / disminuir cada componente en un valor fijo como se describe. Si aumenta / disminuye TODOS los componentes RGB en un mismo valor, esto será equivalente a un cambio en el brillo (básicamente está agregando / eliminando el color BLANCO).
El Cian, Azul, Magenta - corresponde a dicha transformación en el espacio de color CMYK. (Pero supongo que el azul en este espacio de color corresponde a una mezcla de Cian y Amarillo. Entonces, eso es un poco complicado. La transformación es esencialmente la misma para todos.
El último elemento Tinte: {Hue and Saturation} corresponde a las mismas operaciones, pero aquí, las imágenes se transforman primero en el modelo HSV y luego HUE y Saturation se suman / restan de forma independiente.
No sé acerca de las relaciones exactas de los marcadores del dial con los números correspondientes, pero eso se puede averiguar probando valores prácticos.
fuente
dotProduct(color, vec3(0.2989, 0.5870, 0.1140)
operación). 3. El azul no "corresponde a una mezcla de cian y amarillo" en ningún espacio de color.