Pregunta

¿Cómo convierto los valores RGB de un píxel en un único valor monocromático?

¿Fue útil?

Solución

Encontré una posible solución en el Preguntas frecuentes sobre colores.El componente de luminancia Y (de la Sistema CIE XYZ) captura lo que los humanos más perciben como color en un canal.Entonces, usa esos coeficientes:

mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);

Otros consejos

Este artículo de MSDN usos (0.299 * color.R + 0.587 * color.G + 0.114 * color.B);

Este artículo de Wikipedia usos (0.3* color.R + 0.59 * color.G + 0.11 * color.B);

Este artículo científico reciente compara lo último en conversión de fotografías en color a escala de grises, incluida la fórmula de luminancia simple y técnicas más complejas.

Esto depende de cuáles sean tus motivaciones.Si solo desea convertir una imagen arbitraria a escala de grises y que se vea bastante bien, las conversiones en otras respuestas a esta pregunta serán suficientes.

Si está convirtiendo fotografías en color a blanco y negro, el proceso puede ser muy complicado y subjetivo, y requiere ajustes específicos para cada imagen.Para tener una idea de lo que podría estar involucrado, eche un vistazo a esto. tutorial de Adobe para Photoshop.

Replicar esto en código sería bastante complicado y aún requeriría la intervención del usuario para obtener la imagen resultante estéticamente "perfecta" (¡lo que sea que eso signifique!).

Como también se mencionó, una traducción en escala de grises (tenga en cuenta que las imágenes monocromáticas no necesitan estar en escala de grises) de un triplete RGB está sujeta a gustos.

Por ejemplo, podría hacer trampa, extraer solo el componente azul, simplemente desechando los componentes rojo y verde y copiando el valor azul en su lugar.Otra solución simple y generalmente buena sería tomar el promedio del triplete RGB del píxel y usar ese valor en los tres componentes.

El hecho de que exista un mercado considerable para complementos de conversión de escala de grises/monocromo profesionales y no muy baratos en absoluto para Photoshop solo, indica que la conversión es tan simple o compleja como desee.

La lógica detrás de convertir cualquier imagen basada en RGB a monocromática no es una transformación lineal trivial.En mi opinión, este problema se soluciona mejor mediante técnicas de "segmentación de color".Podría lograr una "segmentación de color" mediante agrupación de k-medias.

Vea el ejemplo de referencia del sitio de MathWorks.

https://www.mathworks.com/examples/image/mw/images-ex71219044-color-based-segmentation-using-k-means-clustering

Imagen original en colores.

Picture with colours

Después de convertir a monocromo usando agrupación de k-medias Picture after converting to monochrome using k-means clustering

¿Cómo funciona esto?

Recopile todos los valores de píxeles de toda la imagen.A partir de una imagen que tiene W píxeles de ancho y H píxeles de alto, obtendrá valores de color W *H.Ahora, utilizando el algoritmo k-means, cree 2 grupos (o contenedores) y coloque los colores en los "contenedores" apropiados.Los 2 grupos representan tus tonos blanco y negro.

¿Video de Youtube que demuestra la segmentación de imágenes usando k-means? https://www.youtube.com/watch?v=yR7k19YBqiw

Desafíos con este método

El algoritmo de agrupamiento de k-medias es susceptible a valores atípicos.Unos pocos píxeles aleatorios con un color cuya distancia RGB esté muy alejada del resto de la multitud podrían fácilmente sesgar los centroides y producir resultados inesperados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top