Entradas en "perros"

La visión en los perros

Llevo tiempo preguntándome cómo se ve el mundo desde los ojos de Arthur. Algunas personas piensan que los perros ven en blanco y negro, pero lo cierto es que sí distinguen algunos colores. En concreto, perros, lobos, zorros… y la mayoría de los cánidos y mamíferos poseen una forma de visión dicromática llamada deuteranopía; y es también, de hecho, una forma de daltonismo en humanos.

Los colores

Para entender nuestra visión: en la retina humana (y en la de muchos primates) podemos encontrar bastones (células de visión por intensidad) y tres tipos de conos (células responsables de la visión en color); cada tipo de cono especializado en una longitud de onda diferente: “azules” sensibles en un rango de longitudes centradas en el azul (unos 430nm), “verdes” especializados en longitudes de onda similares a la del verde (unos 520nm) y “rojos” para longitudes de onda largas cercanas al rojo (~650nm).

Dado que estas son las longitudes de los colores primarios aditivos (rojo – verde- azul); la composición de la información receptada por cada tipo de cono completa un espectro como el siguiente:

em-spectrum_human-eye

En los animales con deuteranopía los conos responsables de la recepción del verde no están presentes o no son funcionales. La composición de la información receptada presenta en estos casos un espectro como el siguiente:

KoOST

Niveles de gris

Otra diferencia importante entre la visión humana y la de un perro es la diferencia mínima perceptible entre factores de gris (AR). Para esta medición se suele usar la ley de Weber-Fechner; una regla psicofísica que establece una relación cuantitativa entre la magnitud de un estímulo físico y cómo éste es percibido. El resultado de la fracción de Webber para humanos se estima en 0.11, y para perros en 0.22; esto significa que los perros son sólo capaces de captar la mitad de niveles de grises que nosotros.

Por ejemplo, los perros verían los siguientes cuadrados del mismo color:

Si tú ves el mismo color en ambos cuadrados, puede deberse a que tu monitor sea de gama baja y no sea capaz de mostrar correctamente los colores (o que esté mal configurado en parámetros de brillo, contraste y temperatura). Descartamos la opción de que seas un perro, claro.

Agudeza visual

Dicho en pocas (pero muy imprecisas) palabras; la agudeza visual es la resolución espacial del sistema visual. Al tratarse de un término de resolución es fácil imaginar que está directamente relacionado con la densidad de conos y bastones de la retina. Esta densidad varía según la zona; así, perdemos resolución en los límites de nuestro campo visual (donde apenas podemos percibir objetos) y alcanzamos el máximo en el punto donde centramos la vista.

El máximo de agudeza visual para humanos está entre 50 y 60 CPD. En los perros se sitúa entre 6.5-9 y 11.6 CPD.

Simular cómo es la visión con una agudeza visual diferente a la nuestra es complicado; intervienen muchos factores y es alterada circunstancialmente por el entorno. Por ejemplo el desenfoque por profundidad de campo se dispara (no podemos simularlo en una imagen 2D) al enfocar; y la cantidad de luz recibida también afecta de forma virtual; ya que los perros tienen mayor densidad de bastones que los humanos, pupilas más grandes y un tapetum lucidum refractivo; así en la oscuridad la agudeza visual de los perros acabaría superando a la del humano.

Aunque esta aproximación sea muy imprecisa; podemos ilustrar la pérdida de resolución con la siguiente figura; asumiendo un factor de /4 para los perros.

AV /1
raster2
AV /4
raster4

Al lío. Dedos al código.

Con todo este resumen; la idea es escribir una pequeña función javascript que dada una imagen de ejemplo la transforme y haga una aproximación acertada de cómo la percibiría un perro.

La función tiene 3 tareas independiente a realizar:

1) Simulación de deuterapía: No es tan sencillo como pueda parecer, ya que los niveles de luz y ponderaciones entre colores cambian gradualmente según la curva de sensibilidad de los conos que sí están presentes (rojo-azul). En este paper [1] encontramos los factores medidos experimentalmente -para humanos; aunque la diferencia con perros es mínima (comparamos con [2])- que necesitaremos para la conversión.

2) Discretizamos algunos niveles de luz. No vamos a implementar todas las curvas; sólo una aproximación. Algo de información adicional en [3]. Hacemos una reducción de la intensidad a niveles pares.

3) Desenfoque gausiano a la imagen. Para hacerlo correctamente el desenfoque variaría su grado arbitrariamente según la zona; y para ello necesitaríamos una imagen tridimensional, información sobre la exposición y el punto de enfoque marcado. Como no tenemos nada de eso, hacemos un desenfoque suave y global que simule el máximo grado de agudeza visual en todos los puntos. El desenfoque podemos hacerlo eficientemente (usando la GPU) mediante un filtro en CSS3 (fuera del código javascript).

function DogVision() //v0.1 - LaNsHoR @ 2014
{
	//===================================================
	//Factors
	var gamma=1.0 /* normal value: 1.8;
                         -0.8 correction for dogs */
	var by=127, k=[9591, 23173, -730];
	for(var luts={}, invluts={}, i=0; i<256; i++)
	{
	    luts[i]=0.992052*Math.pow(i/255, gamma)+0.003974;
	    invluts[i]=255*Math.pow(i/255, 1/1.8);
	}
	//===================================================
	//Functions
	//-- RGB normalization
	function normalize(value)
                     {return value<0?0:value>255?255:value;}
	//-- Dog light reduction
	function even(value) {return value%2?value-1:value;}
	//===================================================
	this.dogPixel=function(r,g,b)
	{
	    var r_lin=luts[r], g_lin=luts[g], b_lin=luts[b];
	    var r_blind=((k[0]*r_lin)+(k[1]*g_lin))/by;
	    var b_blind=((k[2]*r_lin)-(k[2]*g_lin)+32768*b_lin)/by;
	    r_blind=normalize(r_blind);
        b_blind=normalize(b_blind);
	    var red=invluts[Math.round(r_blind)];
            var blue=blue=invluts[Math.round(b_blind)];
	    return [even(red), even(red), even(blue)];
	}
}

Y ya está! Podemos empezar a jugar con los resultados 🙂

Ejemplos

1a
1b
2a

2b

3a

3b

4a

4b

5a

5b

Prueba tú mism@. Arrastra cualquier imagen de tu ordenador al rectángulo de borde negro para convertirla a visión canina usando la función que hemos descrito más arriba 😉

El resultado aparecerá en el rectángulo de borde azul.

Conclusión de andar por casa

Por todo lo dicho y visto; los perros en ambientes de luz diurna tienen una visión mucho más precaria que la humana. Sin embargo, con condiciones de baja luz su percepción de siluetas es mucho mejor que la nuestra (fijaos en los ejemplos). Además, su mayor número de bastones les hacen mejores detectando pequeños movimientos a grandes distancias (algo que no podemos percibir en imágenes estáticas).

No está nada mal. Después de todo; su sentido principal es el olfato (la mayoría de neuronas de su corteza cerebral están dedicadas a este sentido; la mayoría de las nuestras, a la visión). Aún con una visión mediocre, si sumamos sus excelentes olfato y oído su nivel de percepción sensorial global es superior al nuestro. Y desde luego, perfectamente adaptado a lo que necesitan.

Dedicatoria
Esta entrada y el código fuente de la función que hemos escrito están dedicados a Quarkyta… una de las preciosas perritas de Virgy, que nos dejó hace unos días 🙁

Referencias

[1] Digital Video Colourmaps for Checking the Legibility of Displays by Dichromats

[2] Color Vision in the dog

[3] The spectral luminosity curves for a dichroma tic eye and a normal eye

Leer más