PrevNext

Processing Image

Author: Oscar Julián Tinjacá y Luis Miguel Báez

Convolución de Imagenes

Edit This Page

¿Cómo ve una persona con diferentes tipos de daltonismo?

Introducción

El daltonismo es un tipo de deficiencia de la visión del color. Hay tres tipos de daltonismo: Monocromacia, Dicromacia y Tricromacia Anómala. El daltónico no tiene cura. Sin embargo, hay diferentes técnicas que han permitido mejorar la visión de las personas, desde gafas con filtros de color hasta algoritmos que permiten mejorar la imagen en teléfonos celulares.

El daltonismo afecta aproximadamente a 1 de cada 12 hombres y 1 de cada 200 mujeres en el mundo. La mayoría de las personas con daltonismo tienen la capacidad de ver las cosas tan claramente como otras personas, pero no pueden ver claramente la luz roja, verde o azul.

Hay diferentes causas de daltonismo. Para la mayoría de las personas con deficiencia de la visión del color, la afección es genética y por lo general es hereditaria.

Tipo daltónico Causa Efecto
Monocromatico No hay conos o sólo existe un tipo de cono Incapacidad de ver cualquier color (Visión en escala de grises)
Dicromatico No existen conos o solo existe un tipo de cono
1) Protanopia: ausencia de conos L
2) Duteranopia: ausencia de conos M
3) Tritanopia: ausencia de conos S
Incapacidad de ver el color correspondiente al tipo de cono perdido
Incapacidad de ver el color rojo (Red Blind)
Incapacidad para ver el color verde (Green Blind)
Incapacidad para ver el color azul (Blue Blind)
Tricromacia anómala Existen todos los tipos de conos, pero no están alineados, tres tipos:

1) Protanomalía: los conos L no están alineados
2) Dueteranomalía: los conos M no están alineados
3) Tritanomalía: los conos S no están alineados
Reducción de la sensibilidad a un color en particular

Menor sensibilidad al color rojo (Red Blind)
Menor sensibilidad al color verde (Green Blind)
Menor sensibilidad al color azul (Blue Blind)

Revisión de la Literatura / Antecedentes

Entrega 1

De acuerdo a lo practicado en la entrega 1, cuyo tema era corrección de colores para imágenes vistas por personas daltónicas, se decidió implementar este algoritmo (LMS algorithm) para generar la corrección de color en tres tipos de daltonismo.

El método de implementación inicialmente era realizar recorridos de toda la imagen usando dos ciclos for, validando el ancho y alto de la imagen; dicho proceso consumía tiempo adicional y podía ser lento para imágenes pesadas o de alta definición.

Sin embargo, con el uso de shaders este proceso se puede optimizar. Permitiendo al hardware reemplazar lo ciclos for usados en la primera entrega.

Algoritmo 1: Filtros en cada pixel.

Entrada: imagen de entrada RGB

Salida: imagen con filtro de daltonismo

1) Convierta la imagen RGB con daltonismo usando las siguientes matrices.

Para Protanopía.

(RpGpBp)=(0.5670.4330.00.5580.4420.00.2420.7580.0)(RGB)(1)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix}0.567&0.433&0.0\\ 0.558&0.442&0.0\\ 0.242&0.758&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(1\right)

Para Deuteranopía.

(RpGpBp)=(0.6250.3750.00.76.30.00.30.70.0)(RGB)(2)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix}0.625&0.375&0.0\\ 0.7&6.3&0.0\\ 0.3&0.7&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(2\right)

Para Tritanopía.

(RpGpBp)=(0.950.050.00.4330.5670.00.4750.5250.0)(RGB)(3)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.95&0.05&0.0\\ 0.433&0.567&0.0\\ 0.475&0.525&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(3\right)

Para Protanomalía.

(RpGpBp)=(0.8170.1830.00.8170.1830.00.1250.8750.0)(RGB)(4)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.817&0.183&0.0\\ 0.817&0.183&0.0\\ 0.125&0.875&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(4\right)

Para Deuteranomalía.

(RpGpBp)=(0.80.20.00.2580.7420.00.1420.8580.0)(RGB)(5)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.8&0.2&0.0\\ 0.258&0.742&0.0\\ 0.142&0.858&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(5\right)

Para Tritanomalía.

(RpGpBp)=(0.9670.0330.00.7330.2670.00.1830.8170.0)(RGB)(6)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.967&0.033&0.0\\ 0.733&0.267&0.0\\ 0.183&0.817&0.0\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(6\right)

Para Acromatopsía.

(RpGpBp)=(0.2990.5870.1140.2990.5870.1140.2990.5870.114)(RGB)(5)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.299&0.587&0.114\\ 0.299&0.587&0.114\\ 0.299&0.587&0.114\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(5\right)

Para Acromatomía.

(RpGpBp)=(0.6180.320.0620.1630.7750.0620.1630.320.516)(RGB)(6)\begin{pmatrix}Rp\\ Gp\\ Bp\end{pmatrix}_=\begin{pmatrix} 0.618&0.32&0.062\\ 0.163&0.775&0.062\\ 0.163&0.32&0.516\end{pmatrix}\begin{pmatrix}R\\ G\\ B\end{pmatrix}\:\:\:\:\left(6\right)

Ahora... ¿cómo aplicamos estos filtros?

Usando shaders

Un shader es un programa definido por el usuario y diseñado para ejecutarse en alguna etapa de un procesador gráfico. Los sombreadores proporcionan el código para ciertas etapas programables del proceso de renderizado. También pueden utilizarse de forma algo más limitada para el cálculo general en la GPU.

Básicamente hay tres tipos de shaders: Vertex Shaders: se ejecutan una vez por cada vértice que forma parte del elemento que se quiere renderizar. Permiten hacer efectos sobre los propios vértices, es decir, moverlos para hacer algún efecto de distorsión (aplicar una función trigonométrica como seno podría servir para simular las olas de un océano, por ejemplo). Su valor de retorno es la posición del vértice procesada.

Pixel Shaders (en OpenGL los llaman Fragment Shader): se ejecutan una vez por cada fragmento visible de la imagen (es decir, la cantidad de veces que se ejecuten depende de la vista de cámara, tamaño del objeto y otros factores más). Su valor de retorno es el color del pixel resultante. Con la ayuda de los vertex shaders, permiten hacer efectos vistosos como iluminación, cel shading, bump mapping, y una gran cantidad de filtros de post-procesamiento como desenfoque, profundidad de campo, desenfoque de movimiento, bloom, hdr, entre otros.

Geometry Shaders: se ejecutan por cada cara del modelo que se quiere renderizar. Tienen la particularidad que pueden crear nuevos vértices por lo que son muy útiles para generar efectos como pasto, pelo, sombras proyectadas, reflejos, etc.

filter_color_blindness.frag

Resultados usando P5js

Conclusiones y Trabajo Futuro

  • Los shaders son útiles para usar el hardware del dispositivo sobre el cuál se está corriendo la página web y así mejorar su rendimiento.
  • La corrección de color en imágenes y videos puede ser útil para las personas daltónicas, mejorando la accesibilidad.
  • Se pueden usar otros algoritmos para la corrección de colores tales como: Color-Blind Filter Service Algorithm, el cuál puede mejorar el resultado de la corrección para Deuteranopía.
Resources: References
Shader

Shader

Color Vision

Color Vision with JS

Research Gate

Lamiaa A. Elrefaei

Coblis

Color Blindness Simulator

Module Progress:

PrevNext